Huge News!Announcing our $40M Series B led by Abstract Ventures.Learn More
Socket
Sign inDemoInstall
Socket

preference_fu

Package Overview
Dependencies
Maintainers
1
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

preference_fu

  • 0.0.5
  • Rubygems
  • Socket score

Version published
Maintainers
1
Created
Source

PreferenceFu

This plugin, greatly inspired by Jim Morris' blog post (http://blog.wolfman.com/articles/2007/08/07/bit-vector-preferences), aims to make it easy and flexible to store boolean preferences for an ActiveRecord model. This can be also used as a very quick way to setup an ACL.

Because the values are stored within a bit vector, a virtually unlimited number of preferences can be created without additional migrations.

Feel free to email me with any suggestions or problems.

Blog: http://www.brennandunn.com Email address: me@brennandunn.com

Setup

Simply add an integer column to each table of the database that requires preferences. By default, the column used is 'preferences', and can be changed using an options hash when defining preferences:

has_preferences :send_email, :column => 'something_else'

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 splat. At the moment, there's no safe way to delete a preference item at the moment. Any advice is welcome!

Copyright (c) 2008 Brennan Dunn, released under the MIT license

FAQs

Package last updated on 02 Aug 2011

Did you know?

Socket

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc