SimpleFlaggableColumn

Allows you to add really simple binary flag column to an ActiveRecord model.

Installation

Add this line to your application's Gemfile:

gem 'simple_flaggable_column'

And then execute:

$ bundle

Or install it yourself as:

$ gem install simple_flaggable_column

Usage example

Migration:

add_column(:games, :platforms, :integer, default: 0, null: false)

Model:

class Game < ActiveRecord::Base
  include SimpleFlaggableColumn

  flag_column :platforms, {
    win:   0b001,
    mac:   0b010,
    linux: 0b100
  }
end

This redefines the platforms method in Game so you can set it and read it as an array:

game = Game.new
game.platforms = [:win, :linux]
# => [:win, :linux]
game.read_attribute :platforms
# => 5
game.read_attribute(:platforms).to_s(2)
# => "101"

Push/Pop and other arrays operations won't work, just simple writing and reading.

:throw_on_missing

If you try to set a non-existing flag it will throw an ArgumentError

game = Game.new
game.platforms = [:potato]
# => <ArgumentError: Flag potato doesn't exists>

To disable this and silently ignore invalid flags define the flags with :throw_on_missing set to false:

class Game < ActiveRecord::Base
  include SimpleFlaggableColumn

  flag_column :platforms, {
    win:   0b001,
    mac:   0b010,
    linux: 0b100
  }, throw_on_missing: false
end

Now invalid flags will be ignored

game = Game.new
game.platforms = [:win, :potato]
# => [:win]

Contributing

  1. Fork it ( https://github.com/Zequez/simple_flaggable_column/fork )
  2. Create your feature branch (git checkout -b my-new-feature)
  3. Commit your changes (git commit -am 'Add some feature')
  4. Push to the branch (git push origin my-new-feature)
  5. Create a new Pull Request