Class: DataMapper::Validations::LengthValidator
- Inherits:
-
GenericValidator
- Object
- GenericValidator
- DataMapper::Validations::LengthValidator
- Defined in:
- lib/data_mapper/validations/length_validator.rb
Constant Summary collapse
- ERROR_MESSAGES =
{ :range => '#{field} must be between #{min} and #{max} characters long', :min => '#{field} must be more than #{min} characters long', :max => '#{field} must be less than #{max} characters long', :equals => '#{field} must be #{equal} characters long' }
Instance Method Summary collapse
- #call(target) ⇒ Object
-
#initialize(field_name, options) ⇒ LengthValidator
constructor
A new instance of LengthValidator.
Methods inherited from GenericValidator
#add_error, #validation_error_message
Constructor Details
#initialize(field_name, options) ⇒ LengthValidator
Returns a new instance of LengthValidator.
13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
# File 'lib/data_mapper/validations/length_validator.rb', line 13 def initialize(field_name, ) @field_name = field_name @options = @min = [:minimum] || [:min] @max = [:maximum] || [:max] @equal = [:is] || [:equals] @range = [:within] || [:in] @validation_method ||= :range if @range @validation_method ||= :min if @min && @max.nil? @validation_method ||= :max if @max && @min.nil? @validation_method ||= :equals unless @equal.nil? end |
Instance Method Details
#call(target) ⇒ Object
28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 |
# File 'lib/data_mapper/validations/length_validator.rb', line 28 def call(target) field_value = target.instance_variable_get("@#{@field_name}").to_s return true if @options[:allow_nil] && field_value.nil? # HACK seems hacky to do this on every validation, probably should do this elsewhere? field = Inflector.humanize(@field_name) min = @range ? @range.min : @min max = @range ? @range.max : @max equal = @equal = (ERROR_MESSAGES[@validation_method], nil, binding) valid = case @validation_method when :range then @range.include?(field_value.size) when :min then field_value.size >= min when :max then field_value.size <= max when :equals then field_value.size == equal end add_error(target, , @field_name) unless valid return valid end |