Sha256: f06e461389dd11f357a0dbd0bf6305a7043afede1e544526304fe2eabc22344e

Contents?: true

Size: 1.31 KB

Versions: 11

Compression:

Stored size: 1.31 KB

Contents

module ActiveRecord
  module Validations
    module ClassMethods
      # Automatically validates the column against the schema definition
      # for nullability, format, and enumerations. Handles integers, floats,
      # enumerations, and string limits.
      #
      # Usage: validates_columns :severity, :name
      def validates_columns(*column_names)
        begin
          cols = columns_hash
          column_names.each do |name|
            col = cols[name.to_s]
            raise ArgumentError, "Cannot find column #{name}" unless col
            
            # test for nullability
            validates_presence_of(name) if !col.null
            
            # Test various known types.
            case col.type
            when :enum
              validates_inclusion_of name, :in => col.values, :allow_nil => true
              
            when :integer, :float
              validates_numericality_of name, :allow_nil => true
              
            when :string
              if col.limit
                validates_length_of name, :maximum => col.limit, :allow_nil => true
              end
            end
          end
        rescue ActiveRecord::StatementInvalid=>e
          raise e unless e.message.include?("42S02") # swallow the exception if its for a missing table
        end
      end
    end
  end
end

Version data entries

11 entries across 11 versions & 3 rubygems

Version Path
smukherjee-openbill-0.1.5 vendor/plugins/enum-column/lib/enum/validations.rb
smukherjee-openbill-0.1.6 vendor/plugins/enum-column/lib/enum/validations.rb
smukherjee-openbill-0.1.7 vendor/plugins/enum-column/lib/enum/validations.rb
enum_column-0.1.6 lib/enum_column/validations.rb
enum_column-0.1.5 lib/enum_column/validations.rb
enum_column-0.1.4 lib/enum_column/validations.rb
enum_column-0.1.2 lib/enum_column/validations.rb
enum_column-0.1.1 lib/enum/validations.rb
enum_column-0.1.0 lib/enum/validations.rb
openbill-0.1.6 vendor/plugins/enum-column/lib/enum/validations.rb
openbill-0.1.5 vendor/plugins/enum-column/lib/enum/validations.rb