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
- Fork it ( https://github.com/Zequez/simple_flaggable_column/fork )
- Create your feature branch (
git checkout -b my-new-feature
) - Commit your changes (
git commit -am 'Add some feature'
) - Push to the branch (
git push origin my-new-feature
) - Create a new Pull Request