class Parxer::Validator::Number
Public Instance Methods
validate()
click to toggle source
# File lib/parxer/validators/number_validator.rb, line 4 def validate v = context.value.to_s return true if v.blank? return false unless validate_number(v) return false unless validate_negative(v) validate_range(v) end
Private Instance Methods
allow_negative?()
click to toggle source
# File lib/parxer/validators/number_validator.rb, line 14 def allow_negative? !!config[:allow_negative] end
only_integer?()
click to toggle source
# File lib/parxer/validators/number_validator.rb, line 18 def only_integer? !!config[:only_integer] end
valid_float?(v)
click to toggle source
# File lib/parxer/validators/number_validator.rb, line 30 def valid_float?(v) !!Float(v) rescue ArgumentError false end
valid_integer?(v)
click to toggle source
# File lib/parxer/validators/number_validator.rb, line 26 def valid_integer?(v) !!(v.to_s =~ /\A[-+]?[0-9]+\z/) end
valid_limit(name)
click to toggle source
# File lib/parxer/validators/number_validator.rb, line 55 def valid_limit(name) limit = config[name] return if limit.blank? return (only_integer? ? limit.to_i : limit.to_f) if validate_number(limit) raise Parxer::ValidatorError.new("'#{name}' has not a valid value for given number type") end
validate_limit(limit_name, method, v)
click to toggle source
# File lib/parxer/validators/number_validator.rb, line 49 def validate_limit(limit_name, method, v) r = valid_limit(limit_name) return true if r.blank? v.public_send(method, r) end
validate_negative(v)
click to toggle source
# File lib/parxer/validators/number_validator.rb, line 36 def validate_negative(v) !(!allow_negative? && v.to_i.negative?) end
validate_number(v)
click to toggle source
# File lib/parxer/validators/number_validator.rb, line 22 def validate_number(v) only_integer? ? valid_integer?(v) : valid_float?(v) end
validate_range(v)
click to toggle source
# File lib/parxer/validators/number_validator.rb, line 40 def validate_range(v) v = only_integer? ? v.to_i : v.to_f return false unless validate_limit(:gt, ">", v) return false unless validate_limit(:gteq, ">=", v) return false unless validate_limit(:lt, "<", v) return false unless validate_limit(:lteq, "<=", v) true end