Skip to content

Repository files navigation

str_enum

Don’t like storing enums as integers in your database? Introducing...

String enums for Rails!! 🎉

  • scopes
  • validations
  • accessor methods
  • update methods

Build Status

Getting Started

Add this line to your application’s Gemfile:

gem"str_enum"

Add a string column to your model.

add_column:users,:status,:string

And use:

classUser < ActiveRecord::Basestr_enum:status,[:active,:archived]end

The first value will be the initial value. This gives you:

Scopes

User.activeUser.archived

And negative scopes

User.not_activeUser.not_archived

Validations

user=User.new(status: "unknown")user.valid?# false

Accessor Methods

user.active?user.archived?

Update Methods

user.active!user.archived!

Forms

<%= f.select :status, User.statuses.map { |s| [s.titleize, s] } %>

Options

Choose which features you want with (default values shown):

classUser < ActiveRecord::Basestr_enum:status,[:active,:archived],accessor_methods: true,allow_nil: false,default: true,prefix: false,scopes: true,suffix: false,update_methods: true,validate: trueend

Prevent method name collisions with the prefix and suffix options.

classUser < ActiveRecord::Basestr_enum:address_status,[:active,:archived],suffix: :addressend# scopesUser.active_addressUser.archived_address# accessor methodsuser.active_address?user.archived_address?# update methodsuser.active_address!user.archived_address!

History

View the changelog

Contributing

Everyone is encouraged to help improve this project. Here are a few ways you can help:

To get started with development and testing:

git clone https://github.com/ankane/str_enum.git
cd str_enum
bundle install
bundle exec rake test

About

String enums for Rails

Resources

Stars

88 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages