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