Sha256: 28014354556c3fbcb1299ef60da1e5ac85f7bc79ba3a01df3427c115344e1ffe

Contents?: true

Size: 1.01 KB

Versions: 10

Compression:

Stored size: 1.01 KB

Contents

class Module
  def find_const(const_name)
    if const_name[0..1] == '::'
      Object.find_const(const_name[2..-1])
    else
      nested_const_lookup(const_name)
    end
  end
  
  def try_dup
    self
  end

  private

  # Doesn't do any caching since constants can change with remove_const
  def nested_const_lookup(const_name)
    constants = [ Object ]

    unless self == Object
      self.name.split('::').each do |part|
        constants.unshift(constants.first.const_get(part))
      end
    end

    parts = const_name.split('::')

    # from most to least specific constant, use each as a base and try
    # to find a constant with the name const_name within them
    constants.each do |const|
      # return the nested constant if available
      return const if parts.all? do |part|
        const = const.const_defined?(part) ? const.const_get(part) : nil
      end
    end

    # if we get this far then the nested constant was not found
    raise NameError, "uninitialized constant #{const_name}"
  end

end # class Module

Version data entries

10 entries across 10 versions & 3 rubygems

Version Path
merb-core-1.1.3 spec10/public/webrat/test_app/gems/gems/extlib-0.9.8/lib/extlib/module.rb
merb-core-1.1.2 spec10/public/webrat/test_app/gems/gems/extlib-0.9.8/lib/extlib/module.rb
merb-core-1.1.1 spec10/public/webrat/test_app/gems/gems/extlib-0.9.8/lib/extlib/module.rb
merb-core-1.1.0 spec10/public/webrat/test_app/gems/gems/extlib-0.9.8/lib/extlib/module.rb
merb-core-1.1.0.rc1 spec10/public/webrat/test_app/gems/gems/extlib-0.9.8/lib/extlib/module.rb
merb-core-1.1.0.pre spec10/public/webrat/test_app/gems/gems/extlib-0.9.8/lib/extlib/module.rb
extlib-0.9.8 lib/extlib/module.rb
extlib-0.9.7 lib/extlib/module.rb
extlib-0.9.6 lib/extlib/module.rb
mack-facets-0.8.2 lib/gems/extlib-0.9.8/lib/extlib/module.rb