I have just published a new version of the active_module gem.
This gem allows storing Module or Class objects in active_record fields.
It also allows to deal with these fields are if they are C#/Java-like enums, whose values can respond to method calls.
class MyARObject < ActiveRecord::Base
attribute :module_field,
:active_module,
possible_modules: [MyModule1, MyClass, Nested::Module]
# optional, just for enum-like behaviour
active_module_enum :module_field
end
# Assignment
object.module_field = Nested::Module
object.module_field = :Module
object.module_field = "Module"
object.module_field = :nested_module
object.module_field # => Nested::Module
# Querying
MyARObject.where(module_field: Nested::Module)
MyARObject.where(module_field: :Module)
MyARObject.where(module_field: "Module")
MyARObject.where(module_field: :nested_module) # underscored nested name
# Comparision
module MyNameSpace
using ActiveModule::Comparison
object.module_field =~ :Module
object.module_field =~ "Module"
object.module_field =~ :nested_module # underscored nested name
end
# Enum-like behaviour provided by the active_module_enum invocation
MyARObject.fields # => { MyModule1 => "::MyModule1", MyClass => "::MyClass", Nested::Module => "::MyNestedModule" }
MyARObject.with_my_class.where(..)
object.my_class!
object.my_class?
Looking for feedback and comments. Please let me know what do you think about it.