Sha256: 25c9db2205cb04a7dcbaa07114c6e4aac3cfdc75392ba98175a464ded8f19d4c

Contents?: true

Size: 1.1 KB

Versions: 9

Compression:

Stored size: 1.1 KB

Contents

module Extensions
  # Supplies RelativeConstGet#relative_const_get, which is like +const_get+, except it
  # attempts to resolve using the current class's module, rather than
  # the class's scope itself.
  module RelativeConstGet

    # Finds the constant with name +name+, relative to the calling
    # module. For instance, <tt>A::B.const_get_relative("C")</tt> will
    # search for A::C, then ::C. This is heavily inspired by
    # +find_resource_in_modules+ in active_resource.
    def relative_const_get(name)
      module_names = self.name.split("::")
      if module_names.length > 1
        receiver = Object
        namespaces = module_names[0, module_names.size-1].map do |module_name|
          receiver = receiver.const_get(module_name)
        end
        const_args = RUBY_VERSION < "1.9" ? [name] : [name, false]
        if namespace = namespaces.reverse.detect { |ns| ns.const_defined?(*const_args) }
          return namespace.const_get(*const_args)
        else
          raise NameError, "Couldn't find a class named #{name}"
        end
      else
        const_get(name)
      end
    end
  end
end

Version data entries

9 entries across 9 versions & 1 rubygems

Version Path
reactive_resource-0.7.3 lib/reactive_resource/extensions/relative_const_get.rb
reactive_resource-0.7.2 lib/reactive_resource/extensions/relative_const_get.rb
reactive_resource-0.7.1 lib/reactive_resource/extensions/relative_const_get.rb
reactive_resource-0.7.0 lib/reactive_resource/extensions/relative_const_get.rb
reactive_resource-0.6.1 lib/reactive_resource/extensions/relative_const_get.rb
reactive_resource-0.6.0 lib/reactive_resource/extensions/relative_const_get.rb
reactive_resource-0.5.1 lib/reactive_resource/extensions/relative_const_get.rb
reactive_resource-0.5.0 lib/reactive_resource/extensions/relative_const_get.rb
reactive_resource-0.0.1 lib/reactive_resource/extensions/relative_const_get.rb