Propensity

Note: This gem is still under development, but is usable, and I have used it in production systems. Ensure that you follow the instructions in their entirety.

Propensity provides an easy way to manage settings within a Rails application. These settings are persisted in a database and loaded on initialization of Rails. This gem is simple, and does not contain any administrative UI.

Usage

To install propensity, add the following to your Gemfile

gem 'propensity', git: "https://github.com/entropillc/propensity.git"

Note that I use Ruby 1.9.x syntax above, because it rocks, and the code uses 1.9.3 conventions. Once your Gemfile is updated make sure you install your new bundle

bundle install

After bundling, you're ready to run the installation generator

  rails g propensity:install

Running the installer will copy the migrations in to your db/migrations folder and add an app_configuration.rb file to your models folder. Within app_configuration.rb you will specify your preferences.

There is one piece of magic that isn't completed yet that will require you to initialize Propensity on application startup. To do this, add the following code in your application.rb file:

# Initializing MyApplications Application Settings
initializer "application.environment", :before => :load_config_initializers do |app|
  config.my_application = Propensity::Environment.new
  MyApplication::Config = config.my_application.preferences
end

Configuring Your Settings

The app_configuraiton.rb file in the models folder is where you will define your preferences. An example may look something like this:

class AppConfiguration < Propensity::Preferences::Configuration

  preference :blog_title, :string, default: "My Blog Title"
  preference :hours_in_a_day, :integer, default: 24
  preference :am_i_crazy, :boolean, default: true

end

Credits

I've always liked the way Spree (https://github.com/spree/spree) stored configuration settings and thought to myself "Self, you should really break that out so you can use it in other projects". So here it is, most of the code and ideas came from the Spree team. I liked their work, so I gemed it up.