Sha256: 09ccee68b94b3751c9bca0b9bb681830fb07c9acbc69ea31eec61961776d98b9

Contents?: true

Size: 1.41 KB

Versions: 2

Compression:

Stored size: 1.41 KB

Contents

require "rubygems"
require "active_record"

module ValidatesLengthsFromDatabase
  def self.included(base)
    base.send(:extend, ClassMethods)
    base.send(:include, InstanceMethods)
  end

  module ClassMethods
    def validates_lengths_from_database(options = {})
      return unless self.table_exists? #return if table does not exist. Happens in test env during migration
      options.symbolize_keys!

      raise ArgumentError, "The :only option to validates_lengths_from_database must be an array." if options[:only] and !options[:only].is_a?(Array)
      raise ArgumentError, "The :except option to validates_lengths_from_database must be an array." if options[:except] and !options[:except].is_a?(Array)

      if options[:only]
        columns_to_validate = options[:only].map(&:to_s)
      else
        columns_to_validate = column_names.map(&:to_s)
        columns_to_validate -= options[:except].map(&:to_s) if options[:except]
      end

      columns_to_validate.each do |column|
        column_schema = columns.find {|c| c.name == column }
        next if column_schema.nil?
        next if ![:string, :text].include?(column_schema.type)
        next if column_schema.limit.nil?

        class_eval do
          validates_length_of column, :maximum => column_schema.limit, :allow_blank => true
        end
      end

      nil
    end

  end

  module InstanceMethods
  end
end

require "validates_lengths_from_database/railtie"

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
validates_lengths_from_database_tmp-0.1.3 lib/validates_lengths_from_database.rb
validates_lengths_from_database_tmp-0.1.2 lib/validates_lengths_from_database.rb