module ReadableEnums::ClassMethods

Public Instance Methods

readable_enum(name, values, **args) click to toggle source
# File lib/readable_enums.rb, line 5
def readable_enum(name, values, **args)
  validates_args = args.slice(:allow_nil, :if).compact

  validates name.to_sym, inclusion: { in: values, message: "%{value} is not a valid #{name}" }, **validates_args

  values.each do |enum|
    define_method(:"#{enum}?") { send(name.to_s) == enum }
    define_method(:"#{enum}!") { update(name.to_s => enum) }
    define_singleton_method(:"#{enum}") { where(name.to_s => enum) } unless args[:with_scopes] == false
  end
end