Class: IGE_ISB_API::Validation

Inherits:
Object
  • Object
show all
Defined in:
lib/ige_isb_api/validation.rb

Class Method Summary collapse

Class Method Details

.is_valid_currency?(an_amount) ⇒ Boolean

Returns:

  • (Boolean)


69
70
71
72
# File 'lib/ige_isb_api/validation.rb', line 69

def self.is_valid_currency?(an_amount)
  vc = an_amount.match /^[1-9][0-9]*\.[0-9][0-9]$/
  return !vc.nil?
end

.is_valid_datestring?(a_datestring) ⇒ Boolean

Returns:

  • (Boolean)


50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
# File 'lib/ige_isb_api/validation.rb', line 50

def self.is_valid_datestring?(a_datestring)
  dm = a_datestring.match  /^((19|20)[0-9][0-9])-([0-9]{2})-([0-9]{2})\.([0-9]{2}):([0-9]{2}):([0-9]{2})$/
  if dm.nil?
    dm = a_datestring.match /^((19|20)[0-9][0-9])-([0-9]{2})-([0-9]{2})$/ 
    return false if dm.nil?
  else
    return false unless $5.to_i.between?(0,23)
    return false unless $6.to_i.between?(0,59)
    return false unless $7.to_i.between?(0,59)
  end
  return false unless $1.to_i.between?(1900,2099)
  return false unless $3.to_i.between?(1,12)
  return false unless $4.to_i.between?(1,31)
  return false if [9, 4, 6, 11].include?($3.to_i) && !$4.to_i.between?(1,30)
  return false if $3.to_i == 2 && $1.to_i % 4 == 0 && !$4.to_i.between?(1,29) # leap year
  return false if $3.to_i == 2 && !$4.to_i.between?(1,28) # non leap year
  return true
end

.is_valid_email?(an_email) ⇒ Boolean

Returns:

  • (Boolean)


23
24
25
26
# File 'lib/ige_isb_api/validation.rb', line 23

def self.is_valid_email?(an_email)
  return false if an_email.empty?
  return !an_email.match(RFC822::EMAIL).nil?
end

.is_valid_ip4?(an_ip) ⇒ Boolean

Returns:

  • (Boolean)


42
43
44
45
46
47
48
# File 'lib/ige_isb_api/validation.rb', line 42

def self.is_valid_ip4?(an_ip)
  # valid IP4 address
  vip = an_ip.match /^([0-9]{1,3})\.([0-9]{1,3})\.([0-9]{1,3})\.([0-9]{1,3})$/
  return false if vip.nil?
  return false unless $1.to_i.between?(0,255) && $2.to_i.between?(0,255) && $3.to_i.between?(0,255)
  return true
end

.is_valid_name?(a_name) ⇒ Boolean

Returns:

  • (Boolean)


28
29
30
31
32
33
# File 'lib/ige_isb_api/validation.rb', line 28

def self.is_valid_name?(a_name)
  "0123456789!@#$%^&*()[]\\/+=?<>~;:{}".split('').each do |ch|
    return false if a_name.include?(ch)
  end
  return true
end

.is_valid_password?(a_password) ⇒ Boolean

Returns:

  • (Boolean)


17
18
19
20
21
# File 'lib/ige_isb_api/validation.rb', line 17

def self.is_valid_password?(a_password)
  # Password must be over 6 and less than 20 characters long; Password must be alphanumeric
  return false unless a_password.size.between?(6,20)
  return !a_password.match(/^[[:alpha:]|[0-9]]+$/).nil?
end

.is_valid_phonenumber?(a_phonenumber) ⇒ Boolean

Returns:

  • (Boolean)


35
36
37
38
39
40
# File 'lib/ige_isb_api/validation.rb', line 35

def self.is_valid_phonenumber?(a_phonenumber)
  # phone can start with +
  # TODO: Awaiting feedback from ISB
  numb_regex = /^\+?[0-9\(\s\)-]{5,21}$/
  return !a_phonenumber.match(numb_regex).nil?
end

.is_valid_username?(a_username) ⇒ Boolean

Returns:

  • (Boolean)


11
12
13
14
15
# File 'lib/ige_isb_api/validation.rb', line 11

def self.is_valid_username?(a_username)
  # Username must be alphanumeric
  return false if a_username.size > 32
  return !a_username.match(/^[[:alpha:]|[0-9]|\-_]+$/).nil?
end

.test(a_fieldname, a_value, a_type, opts = {}) ⇒ Object



74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
# File 'lib/ige_isb_api/validation.rb', line 74

def self.test(a_fieldname, a_value, a_type, opts = {})
  correct_type = true
  begin
    case a_type
    when 'username'
      correct_type = a_value.is_a?(String) && is_valid_username?(a_value)
    when 'password'
      correct_type = a_value.is_a?(String) && is_valid_password?(a_value)
    when 'boolstring'
      correct_type = a_value.is_a?(String) && ['True', 'False'].include?(a_value)
    when 'country'
      correct_type = a_value.is_a?(String) && !IGE_ISB_API::Constants::ALLOWED_COUNTRY_CODES[a_value.to_sym].nil?
    when 'limit'
      correct_type = a_value.is_a?(String) && IGE_ISB_API::Constants::ALLOWED_LIMITATIONS.include?(a_value)
    when 'timespan'                
      correct_type = a_value.is_a?(String) && IGE_ISB_API::Constants::ALLOWED_FREQUENCIES.include?(a_value)
    when 'string'
      correct_type = a_value.is_a? String
      raise ValidationException, sprintf("Value '%s' in field '%s' is too long.", a_value, a_fieldname) if opts[:length] && a_value.size > opts[:length]
      raise ValidationException, "#{a_value} is invalid for #{a_fieldname}" if opts[:values] && !opts[:values].include?(a_value)
    when 'currency_code'
      correct_type = a_value.is_a?(String) && IGE_ISB_API::Constants::ALLOWED_CURRENCIES.include?(a_value)
    when 'currency'
      correct_type = is_valid_currency?(a_value)
    when 'percent'
      correct_type = a_value.is_a?(Float) || a_value.is_a?(Integer)
      raise ValidationException, "#{a_fieldname} must be positive" if a_value < 0
    when 'int'
      correct_type = a_value.is_a? Integer
      raise ValidationException, "#{a_fieldname} only allows positive integers" if a_value < 0
      raise ValidationException, "#{a_value} is invalid for #{a_fieldname}" if opts[:values] && !opts[:values].include?(a_value)
    when 'boolint'
      correct_type = a_value.is_a?(Integer) && [0, 1].include?(a_value)
    when 'datestring'
      correct_type = a_value.is_a? String
      raise ValidationException, "#{a_value} is not a valid date string." unless is_valid_datestring?(a_value)
    when 'timestamp'
      correct_type = a_value.is_a? Integer
      raise ValidationException, "#{a_value} is not a valid timestamp." unless a_value > 0
    when 'phone'
      correct_type = a_value.is_a?(String) && is_valid_phonenumber?(a_value)
    when 'ip4'
      correct_type = a_value.is_a?(String) && is_valid_ip4?(a_value)
    when 'email'
      correct_type = a_value.is_a?(String) && is_valid_email?(a_value)
    end
  rescue ArgumentError => ae
    raise ValidationException, sprintf("Value '%s' in field '%s' is not of expected type '%s' Error: %s", a_value, a_fieldname, a_type, ae.message)
  end

  raise ValidationException, sprintf("Value '%s' in field '%s' is not of expected type '%s'", a_value, a_fieldname, a_type) unless correct_type

end