Sha256: b0244ccde4edc0aad3bc99df5380fed57f2966b38c03a7346c988ccbb4a3b010
Contents?: true
Size: 1.88 KB
Versions: 1
Compression:
Stored size: 1.88 KB
Contents
# encoding: UTF-8 # frozen_string_literal: true require 'active_support/concern' require 'active_support/lazy_load_hooks' module ValidateLimits module Extension extend ActiveSupport::Concern included do class_attribute :attributes_with_limit_validation, instance_accessor: false, instance_predicate: false class_eval { self.attributes_with_limit_validation = [] } end module ClassMethods def inherited(cls) super.tap { cls.validate_limits } end def validate_limits return if defined?(ActiveRecord::SchemaMigration) && self <= ActiveRecord::SchemaMigration return if abstract_class? return remove_instance_variable(:@table_name) unless table_name.in?(ActiveRecord::Base.connection.tables) columns_hash.values.each do |column| next if attributes_with_limit_validation.include?(column.name) case column.type when :string, :text self.attributes_with_limit_validation += [column.name] validate do value = send(column.name) value = value.to_s unless String === value errors.add(column.name, :too_long) if value.length > column.limit end when :integer next if column.name == primary_key self.attributes_with_limit_validation += [column.name] bits = column.limit * 8 min = -(2**(bits-1)) max = +(2**(bits-1))-1 validates_numericality_of column.name, greater_than_or_equal_to: min, less_than_or_equal_to: max, if: :"#{column.name}?" end end end end end end ActiveSupport.on_load(:active_record) { ActiveRecord::Base.include ValidateLimits::Extension }
Version data entries
1 entries across 1 versions & 1 rubygems
Version | Path |
---|---|
validate-limits-1.0.5 | lib/validate-limits.rb |