module Schema::Parsers::Common

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

Constants

BOOLEAN_REGEX
FLOAT_REGEX
INTEGER_REGEX

Public Instance Methods

parse_boolean(field_name, parsing_errors, value) click to toggle source
# 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) click to toggle source
# 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) click to toggle source
# 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) click to toggle source

rubocop:disable Metrics/CyclomaticComplexity

# 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)
      Integer(value)
    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) click to toggle source

rubocop:enable Metrics/CyclomaticComplexity

# 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) click to toggle source
# 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