Sha256: 890f32e5a842095e058ffa9d8355b261bf467c708fcfb392783862bc90d6e79a

Contents?: true

Size: 1.83 KB

Versions: 6

Compression:

Stored size: 1.83 KB

Contents

module SimpleEnum
  module Validation
    # Validates an +as_enum+ field based on the value of it's column.
    #
    # Model:
    #    class User < ActiveRecord::Base
    #      as_enum :gender, [ :male, :female ]
    #      validates_as_enum :gender
    #    end
    #
    # View:
    #    <%= select(:user, :gender, User.genders.keys) %>
    #
    # Configuration options:
    # * <tt>:message</tt> - A custom error message (default: is <tt>[:activerecord, :errors, :messages, :invalid_enum]</tt>).
    # * <tt>:on</tt> - Specifies when this validation is active (default is always, other options <tt>:create</tt>, <tt>:update</tt>).
    # * <tt>:if</tt> - Specifies a method, proc or string to call to determine if the validation should
    #   occur (e.g. <tt>:if => :allow_validation</tt>, or <tt>:if => Proc.new { |user| user.signup_step > 2 }</tt>). The
    #   method, proc or string should return or evaluate to a true or false value.
    # * <tt>:unless</tt> - Specifies a method, proc or string to call to determine if the validation should
    #   not occur (e.g. <tt>:unless => :skip_validation</tt>, or <tt>:unless => Proc.new { |user| user.signup_step <= 2 }</tt>). The
    #   method, proc or string should return or evaluate to a true or false value.
    def validates_as_enum(*attr_names)
      configuration = attr_names.extract_options!

      attr_names.map! { |e| enum_definitions[e][:column] } # map to column name

      validates_each(attr_names, configuration) do |record, attr_name, value|
        enum_def = enum_definitions[attr_name]
        unless send(enum_def[:name].to_s.pluralize).values.include?(value)
          params = { :value => value}
          params[:message] = configuration[:message] if configuration[:message].present?
          record.errors.add(enum_def[:name], :invalid_enum, params)
        end
      end
    end
  end
end

Version data entries

6 entries across 6 versions & 1 rubygems

Version Path
simple_enum-1.6.4 lib/simple_enum/validation.rb
simple_enum-1.6.3 lib/simple_enum/validation.rb
simple_enum-1.6.2 lib/simple_enum/validation.rb
simple_enum-1.6.1 lib/simple_enum/validation.rb
simple_enum-1.5.1 lib/simple_enum/validation.rb
simple_enum-1.5.0 lib/simple_enum/validation.rb