Sha256: 4e5f30844f7e8fa884a32b7ba85612a0beaa96e6287ee6e72c65e4a6271db045

Contents?: true

Size: 1.82 KB

Versions: 5

Compression:

Stored size: 1.82 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 <tt>:save</tt>, 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 = { :on => :save }
      configuration.update(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)
          record.errors.add(enum_def[:name], :invalid_enum, :default => configuration[:message], :value => value)
        end
      end
    end    
  end
end

Version data entries

5 entries across 5 versions & 2 rubygems

Version Path
lwe-simple_enum-0.3.0 lib/simple_enum/validation.rb
simple_enum-1.0.1 lib/simple_enum/validation.rb
simple_enum-1.0.0 lib/simple_enum/validation.rb
simple_enum-0.9.0 lib/simple_enum/validation.rb
simple_enum-0.3.0 lib/simple_enum/validation.rb