module StringEnum::ClassMethods
Public Instance Methods
string_enum(field, values, options = {})
click to toggle source
Example using string_enum
class User < ActiveRecord::Base string_enum :status, %w(active deleted) string_enum :status, %w(active deleted), prefix: :foo, suffix: :bar, scopes: :plural end user = User.new user.active? user.deleted?
Calls superclass method
# File lib/string_enum.rb, line 18 def string_enum(field, values, options = {}) validates field, inclusion: { in: values } values.each do |value| value = value.to_s if value.is_a? Symbol prefix = options[:prefix] == true ? field : options[:prefix] postfix = options[:postfix] == true ? field : options[:postfix] name = [prefix, value, postfix].compact.join('_') scope_name = options[:scopes] == :plural ? name.pluralize : name scope scope_name, -> { where(field => value) } scope "not_#{scope_name}", -> { where.not(field => value) } define_method "#{name}?" do send(field) == value end define_method "#{field}=" do |new_value| super(new_value.is_a?(Symbol) ? new_value.to_s : new_value) end end end