ActiveSupport::Configurable, which is part of ActiveSupport in Rails, gives objects the ability to store configuration options.
Here’s how you can use it to augment an object with configuration options.
class Employee
include ActiveSupport::Configurable
end
employee = Employee.new
employee.config.research_lab_entry = :not_allowed
employee.config.paid_leave = 5
When a config option that has not been set is requested, it’ll return nil. That’s because internally, the config options are stored in an OrderedHash which is another cool class that ActiveSupport provides.
To make the config options available as methods on the object itself, use the config_accessor
method to specify a list.
class Employee
include ActiveSupport::Configurable
config_accessor :research_lab_entry, :paid_leave
# The config options are now also available as:
# employee.research_lab_entry
# employee.paid_leave
end
In the above example, the config options are being set at the object-level. And each object can have it’s own set of config. If you set them at the class-level, then they are shared. Like the example below:
# Set the config option at the class level
Employee.config.paid_leave = 5
# Create a new object and check the value
employee = Employee.new
employee.config.paid_leave # => 5
# Set a new value at the object-level
employee.config.paid_leave = 3
# Now check the value at the class level
Employee.config.paid_leave # => 3
If you are using this outside of Rails, you should have the “activesupport” gem installed and require “active_support/configurable” in your code.
Update: For more functionality Ken Collins has authored a gem store_configurable.