ConstLookup
Makes resolving a constant in a given namespace easy.
Installation
Install as usual: gem install const_lookup or add gem 'const_lookup' to your Gemfile. Note that Ruby 2.0 is required.
Usage
module A
module B; end
module C; end
end
module D; end
require 'const_lookup'
ConstLookup.lookup('A', A::C) #=> A
ConstLookup.lookup('B', A::C) #=> A::B
ConstLookup.lookup('D', A::C) #=> D
ConstLookup.lookup('E', A::C) #=> #<NameError: Failed to find `E' in A::C>
Or, if you like monkey-patching Ruby core:
module A
module B; end
module C; end
end
module D; end
require 'const_lookup/core_ext'
A::C.const_lookup('B') #=> A::B
A::C.const_lookup('D') #=> D
Compare this with using Module#const_get:
module A
module B; end
module C; end
end
module D; end
A::C.const_get('A') #=> A
A::C.const_get('B') #=> #<NameError: uninitialized constant A::C::B>
A::C.const_get('D') #=> D
A::C.const_get('E') #=> #<NameError: uninitialized constant A::C::E>
This is because const_get looks up the ancestor tree, not the namespace tree like ConstLookup does.
Contributing
Contributions are welcome. Please be sure that your pull requests are atomic so they can be considered and accepted separately.
- Fork it
- Create your feature branch (
git checkout -b my-new-feature) - Commit your changes (
git commit -am 'Add some feature') - Push to the branch (
git push origin my-new-feature) - Create new Pull Request
Credits & License
Copyright © 2013 J. Andrew Marshall. License is available in the LICENSE file.


