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. See .travis.yml
for supported (tested) Ruby versions.
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.