Sha256: 19e9c78ae0892e106142c48669272b1e0840e1f2353d71507d2352b924a18f57
Contents?: true
Size: 1.19 KB
Versions: 2
Compression:
Stored size: 1.19 KB
Contents
# frozen_string_literal: true module SoapyCake class ResponseValue attr_reader :key, :value # Known string ids that should not be parsed as integers STRING_IDS = %w[tax_id transaction_id sub_id].freeze def initialize(key, value, time_converter) @key = key.to_s @value = value @time_converter = time_converter end def parse return parse_int if id? && !string_id? return false if false? return true if true? return time_converter.from_cake(value) if date? # cast to primitive string to get rid of Saxerator string class value.to_s end private attr_reader :time_converter def false? value == 'false' end def true? value == 'true' end def date? value =~ /\A\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.?\d*\z/ end def id? key.end_with?('_id') end def string_id? STRING_IDS.any? { |id| key.end_with?(id) } end def numeric? value =~ /\A-?\d*\z/ end def parse_int unless value.nil? || numeric? raise Error, "'#{key}' contains non-digit chars but was to be parsed as an integer id" end value.to_i end end end
Version data entries
2 entries across 2 versions & 1 rubygems
Version | Path |
---|---|
soapy_cake-2.3.1 | lib/soapy_cake/response_value.rb |
soapy_cake-2.3.0 | lib/soapy_cake/response_value.rb |