Preference Fu plugin
Plugin details
Documentation
ruby script/plugin install git://github.com/brennandunn/preference_fu.git
Setup
=====
Simply add an integer column to each table of the database that requires preferences. By default, the column used is 'preferences', but by defining a method called preferences_column this can be modified.
def preferences_column 'other_column' end
Your migration should probably look something like this:
add_column :people, :preferences, :integer
Examples
========
Using PreferenceFu is very simple.
class User < ActiveRecord::Base has_preferences :send_email, :change_theme, :delete_user, :create_user set_default_preference :send_email, true end
For new AR objects, all preference options will be set to false. This can be overwritten using set_default_preference. I really recommend you read the 'Warning' section below.
Setting a key:
...individually @user.prefs[:delete_user] = true ...mass assignment (useful with the params hash) @user.prefs = {:delete_user => true, :create_user => true}
Setting an option as true doesn't necessarily need to be done with the Boolean true - in fact, the Fixnum 1, and strings '1', 'y' and 'yes' are all valid. This is particularly helpful for checkbox form posts.
@user.prefs[:create_user] = 'yes'
Fetching a key:
@user.prefs[:change_theme] => false
Getting the index of a key:
@user.prefs.index(:delete_user) => 4
Enumerable...
@user.prefs.size => 4 @user.prefs.each do |key, value| puts "#{key} is set to #{value}" end
Warning
=======
This works by taking the index of the splat supplied in has_preferences as the power of two, summing all values, and storing the sum in the preferences column. Because of this, the first item in the splat will be identified by 1, the second by 2, the third by 4, etc. Once you start using PreferenceFu in production, add new options to the *end* of the ezsplat. At the moment, there's no safe way to delete a preference item at the moment. Any advice is welcome!
Further Documentation
There is currently no advanced documentation for this plugin.
New documentationEdit plugin | Back in time (1 older version) | Last edited by: scott, 6 months ago

