ActiveConfiguration is a Rails engine that exposes a generic settings store to ActiveRecord models. Made for very configurable applications, it allows you to avoid implementing specific ways to store settings for each model that needs such a configuration. If your application isn’t very configurable, ActiveConfiguration isn’t what you want.
For example, if your application had a
Category model that only had a configurable
sort attribute, ActiveConfiguration would be overkill. Rather, you would just read and write values using a
sort column and restrict the allowed values using something like
However, if your
Category model was more flexible in its configuration, you may want a
sort setting, a
limit setting and multiple
price_filter settings that can be configured by your end user. Without ActiveConfiguration, you would have to develop a way to store and validate these settings for this specific scenario. The
limit settings are simple but because
price_filter can accept multiple rules, you’d have to set up an additional model. Still, this isn’t really an issue when you’re dealing with just a single configurable model. When you’re dealing with many, things tend to get messy.
With ActiveConfiguration, all of your settings, even for
price_filter, can be stored in a generic way. ActiveConfiguration provides a place to store settings for each of your models and even handles validation when you restrict the allowed values or format of an option.
The source for ActiveConfiguration is available at GitHub.
Add the following to your
Generate the migration for the
Migrate your database:
After installing ActiveConfiguration, the
#configure block is available to every ActiveRecord model. If the
#configure block is defined with a valid configuration, additional methods are made available on the model.
I accept that ActiveConfiguration’s concept is a bit out there, but I’ve found it very useful in certain circumstances and hope that others find it useful as well. I think the README provides all of the information necessary to get started using this gem, but there are additional details in the documentation.
If you have any questions or feedback, I’d love to hear from you. Please feel free to email me or open an issue at GitHub.