Project

General

Profile

Actions

Feature #15837

open

Module#name_components

Added by mrkn (Kenta Murata) over 5 years ago. Updated 9 months ago.

Status:
Assigned
Target version:
-
[ruby-core:92594]

Description

I sometimes wrote the expression like below to extract the components of class path:

klass.name.split('::').last

Similar expressions can be found in ruby-trunk:

mrkn@mrkn-devel:~/src/github.com/ruby/ruby$ git grep split..::
ext/json/lib/json/common.rb:      path.to_s.split(/::/).inject(Object) do |p, c|
ext/openssl/lib/openssl/config.rb:              refsec, ref = ref.split('::', 2)
ext/psych/lib/psych/visitors/yaml_tree.rb:          method = "visit_#{(klass.name || '').split('::').join('_')}"
lib/bundler/cli/gem.rb:      constant_array = constant_name.split("::")
lib/bundler/vendor/molinillo/lib/molinillo/errors.rb:      solver_name = opts.delete(:solver_name) { self.class.name.split('::').first }
lib/bundler/vendor/thor/lib/thor/parser/argument.rb:      class_name = self.class.name.split("::").last
lib/bundler/vendor/thor/lib/thor/parser/arguments.rb:      class_name = self.class.name.split("::").last.downcase
lib/optparse/version.rb:          pkg = pkg.split(/::|\//).inject(::Object) {|m, c| m.const_get(c)}
lib/optparse/version.rb:    path.split(/::|\//).inject(base) do |klass, name|
lib/rdoc/any_method.rb:                       name = @full_name.split('::')
lib/rdoc/context.rb:          names = ename.split('::')
lib/rdoc/context.rb:    path = [prefix] + path.split('::')
lib/rdoc/method_attr.rb:        $1.split('::').last.  # ClassName => class_name
lib/rdoc/parser/c.rb:                         ([\w\. \t]+ = \s+)?rb_define_(class|module)_under[\t\w, (]*?"(#{class_name.split('::').last})"%xm then
lib/rdoc/parser/ruby.rb:      obj = name_t[:text].split("::").inject(Object) do |state, item|
lib/rdoc/store.rb:    name = klass_name.split('::').last
lib/rdoc/store.rb:    File.join @path, *klass_name.split('::')
lib/rdoc/store.rb:    method_name = method_name.split('::').last
lib/rss/atom.rb:        "#{self.class.name.split(/::/).last.downcase}="
lib/rss/atom.rb:        target.__send__(self.class.name.split(/::/).last.downcase) {|x| x}
lib/rss/atom.rb:        target.__send__("new_#{self.class.name.split(/::/).last.downcase}")
lib/rss/rss.rb:        tag_name = klass.name.split(/::/).last
spec/bundler/support/artifice/fail.rb:    const = name.split("::").reduce(Object) {|mod, sym| mod.const_get(sym) }
spec/mspec/lib/mspec/utils/name_map.rb:    c.split('::').inject(base) do |dir, name|
spec/mspec/lib/mspec/utils/name_map.rb:        name = mapping[c.split('::').last] || mapping.fetch(:default)

I think we need Module#name_components method that returns the array of symbols (or string, I prefer symbols) which comes from splitting name by ::.

Actions

Also available in: Atom PDF

Like0
Like0Like0