Module: Schema::Parsers::Common

Defined in:
lib/schema/parsers/common.rb

Overview

Schema::Parsers::Common are parser methods for basic types

Constant Summary collapse

INTEGER_REGEX =
/^[-+]?(?:[1-9]\d*|0)(?:\.0+)?$/.freeze
FLOAT_REGEX =
/^[-+]?(?:[1-9]\d*|0)(?:\.\d+)?([Ee]-?\d+)?$/.freeze
BOOLEAN_REGEX =
/^(?:1|t|true|on|y|yes)$/i.freeze

Instance Method Summary collapse

Instance Method Details

#parse_boolean(field_name, parsing_errors, value) ⇒ Object



129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
# File 'lib/schema/parsers/common.rb', line 129

def parse_boolean(field_name, parsing_errors, value)
  case value
  when TrueClass, FalseClass
    value
  when Integer, Float
    value != 0
  when String
    BOOLEAN_REGEX.match?(value)
  when nil
    nil
  else
    parsing_errors.add(field_name, ::Schema::ParsingErrors::UNHANDLED_TYPE)
    nil
  end
end

#parse_date(field_name, parsing_errors, value) ⇒ Object



108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
# File 'lib/schema/parsers/common.rb', line 108

def parse_date(field_name, parsing_errors, value)
  case value
  when Date
    value
  when Time
    value.to_date
  when String
    begin
      Date.parse(value)
    rescue ArgumentError
      parsing_errors.add(field_name, ::Schema::ParsingErrors::INVALID)
      nil
    end
  when nil
    nil
  else
    parsing_errors.add(field_name, ::Schema::ParsingErrors::UNHANDLED_TYPE)
    nil
  end
end

#parse_float(field_name, parsing_errors, value) ⇒ Object



66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
# File 'lib/schema/parsers/common.rb', line 66

def parse_float(field_name, parsing_errors, value)
  case value
  when Float
    value
  when Integer
    value.to_f
  when String
    if FLOAT_REGEX.match(value)
      Float(value)
    else
      parsing_errors.add(field_name, ::Schema::ParsingErrors::INVALID)
      nil
    end
  when nil
    nil
  else
    parsing_errors.add(field_name, ::Schema::ParsingErrors::UNHANDLED_TYPE)
    nil
  end
end

#parse_integer(field_name, parsing_errors, value) ⇒ Object

rubocop:disable Metrics/CyclomaticComplexity



14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
# File 'lib/schema/parsers/common.rb', line 14

def parse_integer(field_name, parsing_errors, value)
  case value
  when Integer
    value
  when String
    if INTEGER_REGEX.match(value)
      value.to_i
    else
      parsing_errors.add(field_name, ::Schema::ParsingErrors::INVALID)
      nil
    end
  when Float
    parsing_errors.add(field_name, ::Schema::ParsingErrors::INCOMPATABLE) if (value % 1) > 0.0
    value.to_i
  when nil
    nil
  else
    parsing_errors.add(field_name, ::Schema::ParsingErrors::UNHANDLED_TYPE)
    nil
  end
end

#parse_string(field_name, parsing_errors, value) ⇒ Object

rubocop:enable Metrics/CyclomaticComplexity



37
38
39
40
41
42
43
44
45
46
47
48
49
# File 'lib/schema/parsers/common.rb', line 37

def parse_string(field_name, parsing_errors, value)
  case value
  when String
    value
  when ::Hash, ::Array
    parsing_errors.add(field_name, ::Schema::ParsingErrors::INCOMPATABLE)
    nil
  when nil
    nil
  else
    String(value)
  end
end

#parse_string_or_nil(field_name, parsing_errors, value) ⇒ Object

if the string is empty return nil



52
53
54
55
56
57
58
59
60
61
62
63
64
# File 'lib/schema/parsers/common.rb', line 52

def parse_string_or_nil(field_name, parsing_errors, value)
  case value
  when String
    value.empty? ? nil : value
  when ::Hash, ::Array
    parsing_errors.add(field_name, ::Schema::ParsingErrors::INCOMPATABLE)
    nil
  when nil
    nil
  else
    String(value)
  end
end

#parse_time(field_name, parsing_errors, value) ⇒ Object



87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
# File 'lib/schema/parsers/common.rb', line 87

def parse_time(field_name, parsing_errors, value)
  case value
  when Time
    value
  when Date
    value.to_time
  when String
    begin
      Time.xmlschema(value)
    rescue ArgumentError
      parsing_errors.add(field_name, ::Schema::ParsingErrors::INVALID)
      nil
    end
  when nil
    nil
  else
    parsing_errors.add(field_name, ::Schema::ParsingErrors::UNHANDLED_TYPE)
    nil
  end
end