Begetter is a teeny tiny little gem that creates a class constant from a string based name. It is inspired by ActiveSupport's constantize
but with-out the ActiveSupport girth.
Add this line to your application's Gemfile:
gem 'begetter'
And then execute:
$ bundle install
Or install it yourself as:
$ gem install begetter
Require Begetter:
require 'begetter'
Call Begetter.get
with the name of the class you wish to reference:
class FooBar; end
klass_name = 'FooBar'
klass = Begetter.get(klass_name)
foo_bar = klass.new
#=> FooBar
Classes with-in modules work as well:
module Foo
class Bar; end
end
klass_name = 'Foo::Bar'
klass = Begetter.get(klass_name)
bar = klass.new
#=> Foo::Bar
That's it!
Do we really need an entire gem to do this? After no less than 3 projects that had heavily dynamic architecture, I found myself building this functionality as a module into each one. There have to be others who will find this moderately useful.
Bug reports and pull requests are welcome on GitHub at https://github.com/jzahnd/begetter.