Allows you to conserve space by storing several boolean attributes to one integer attribute.
Ruby
Switch branches/tags
Nothing to show
Pull request Compare This branch is 8 commits ahead of arturaz:master.
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Failed to load latest commit information.
lib
spec
.document
.gitignore
.rspec
.rvmrc
Gemfile
Gemfile.lock
LICENSE.txt
README.rdoc
Rakefile
VERSION
ar_binary_flag_attributes.gemspec

README.rdoc

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.