🚀 Big News: Socket Acquires Coana to Bring Reachability Analysis to Every Appsec Team.Learn more
Socket
Book a DemoInstallSign in
Socket

simple_enum-multiple

Package Overview
Dependencies
Maintainers
1
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

simple_enum-multiple

0.1.7
Rubygems
Version published
Maintainers
1
Created
Source

SimpleEnum::Multiple

Travis Gem

SimpleEnum::Multiple is extension of SimpleEnum, which brings multi-select enum support to SimpleEnum.

ActiveRecord Quick start

Add this to a model:

class User < ActiveRecord::Base
  as_enum :favorites, [:iphone, :ipad, :macbook], accessor: :join_table
end

Then create the required users_favorites table using migrations:

class AddFavoritesColumnToUser < ActiveRecord::Migration
  def change
    create_join_table :users, :favorites
  end
end

It will store multi-enums data in a join table, if you don't want a join table, you may use bitwise accessor:

# Migration
add_column :Users, :favorite_cds, :integer

# Model
as_enum :favorites, [:iphone, :ipad, :macbook], accessor: :bitwise

It will store multi-enums data in a integer column, and if you don't want SimpleEnum::Multiple manage how you store your data, you can use multiple accessor:

# Model
# serialize :favorite_cds 
# serialize :favorite_cds, YourOwnCoder 
as_enum :favorites, [:iphone, :ipad, :macbook], accessor: :multiple

This accessor will not handle how the data saved in the database, so you have to use something like serialize :favorite_cds, or implement your own Coder.

Working with multi-select enums

class User < ActiveRecord::Base
  as_enum :favorites, [:iphone, :ipad, :macbook], accessor: :join_table
end

jane = User.new
jane.favorites = [:iphone, :ipad]
jane.iphone?      # => true
jane.ipad?        # => true
jane.macbook?     # => false
jane.favorites    # => [:iphone, ipad]
jane.favorite_cds # => [0, 1]

joe = User.new
joe.iphone!       # => [:iphone]
joe.favorites     # => [:iphone]
joe.favorite_cds  # => [0]

User.favorites                            # => #<SimpleEnum::Enum:0x0....>
User.favorites[:iphone]                   # => [0]
User.favorites.values_at(:iphone, :ipad)  # => [0, 1]
User.iphones                              # => #<ActiveRecord::Relation:0x0.... [jane, joe]>

# You can also do this since `favorites` returns a 
# #<SimpleEnum::Multiple::CollectionProxy> rather than a #<Array>:
joe = User.new
joe.iphone!       # => [:iphone]
joe.favorites.push :ipad
joe.favorites     # => [:iphone, ipad]
joe.favorite_cds  # => [0, 1]

License

The gem is available as open source under the terms of the MIT License.

FAQs

Package last updated on 29 Oct 2015

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