ar_binary_flag_attributes
Adds many binary/flag attributes to your AR model using only one integer field.
How to use
Simply as hell :) First, add integer column called ‘flags’ (default) or whatever you like.
class AddFlagsToUserMigration < ActiveRecord::Migration
def self.run
add_column :users, :flags, :integer
end
end
Then add one line to your model so it should look like this:
class User < ActiveRecord::Base
binary_attributes [:a, :b, :c]
end
Custom ‘flags’ field
You can divide all flags into more integer columns, or use non default column name.
class AnotherMigration < ActiveRecord::Migration
def self.run
add_column :phones, :features, :integer
add_column :phones, :minor_features, :integer
end
end
class Phone < ActiveRecord::Base
binary_attributes [:camera, :wlan, :touchscreen], :features
binary_attributes [:sd_card_slot, :qwerty_keyboard], :minor_features
end
And try:
p = Phone.new
p.camera = true
p.qwerty_keyboard = true
p.save
p.features => 1
p.minor_features => 2
Custom masks
You can specify custom masks if you want to:
class Building < ActiveRecord::Base
flag_attributes(
"overdriven" => 0b00000001,
"with_points" => 0b00000010
)
end
Check also
There is a more powerful tool here github.com/pboling/flag_shih_tzu
Author
Core author - Artūras Šlajus (github.com/arturaz/ar_binary_flag_attributes/blob/master/init.rb). I just added spec, and made a gem :]
Copyright
Copyright © 2011, 2012 Artūras Šlajus, Aleksander Kwiatkowski. See LICENSE.txt for further details.