Skip to content

Repository files navigation

SimpleEnum::Multiple

TravisGem

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

ActiveRecord Quick start

Add this to a model:

classUser < ActiveRecord::Baseas_enum:favorites,[:iphone,:ipad,:macbook],accessor: :join_tableend

Then create the required users_favorites table using migrations:

classAddFavoritesColumnToUser < ActiveRecord::Migrationdefchangecreate_join_table:users,:favoritesendend

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

# Migrationadd_column:Users,:favorite_cds,:integer# Modelas_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

classUser < ActiveRecord::Baseas_enum:favorites,[:iphone,:ipad,:macbook],accessor: :join_tableendjane=User.newjane.favorites=[:iphone,:ipad]jane.iphone?# => truejane.ipad?# => truejane.macbook?# => falsejane.favorites# => [:iphone, ipad]jane.favorite_cds# => [0, 1]joe=User.newjoe.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.newjoe.iphone!# => [:iphone]joe.favorites.push:ipadjoe.favorites# => [:iphone, ipad]joe.favorite_cds# => [0, 1]

License

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

About

Multi-select enum support for SimpleEnum

Resources

Stars

6 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages