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



114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
# File 'lib/schema/parsers/common.rb', line 114

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



93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
# File 'lib/schema/parsers/common.rb', line 93

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



51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
# File 'lib/schema/parsers/common.rb', line 51

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_time(field_name, parsing_errors, value) ⇒ Object



72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
# File 'lib/schema/parsers/common.rb', line 72

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