Class: CzechPostB2bClient::ResponseParsers::ParcelServiceSyncParser

Inherits:
BaseParser show all
Defined in:
lib/czech_post_b2b_client/response_parsers/parcel_service_sync_parser.rb

Instance Attribute Summary

Attributes inherited from SteppedService::Base

#result

Instance Method Summary collapse

Methods inherited from BaseParser

#initialize, #steps

Methods inherited from SteppedService::Base

call, #call, #errors, #failure?, #finished?, #steps, #success?

Constructor Details

This class inherits a constructor from CzechPostB2bClient::ResponseParsers::BaseParser

Instance Method Details

#build_resultObject



8
9
10
11
12
# File 'lib/czech_post_b2b_client/response_parsers/parcel_service_sync_parser.rb', line 8

def build_result
  super
  @result[:response][:state] = state_hash_from(response_state_response)
  @result[:parcel] = parcel_data_hash
end

#parcel_data_from(rp_hash) ⇒ Object



45
46
47
48
# File 'lib/czech_post_b2b_client/response_parsers/parcel_service_sync_parser.rb', line 45

def parcel_data_from(rp_hash)
  { parcel_code: rp_hash['parcelCode'],
    states: [state_hash_from(rp_hash.dig('parcelDataResponse'))] }
end

#parcel_data_hashObject



14
15
16
17
18
19
20
21
22
23
# File 'lib/czech_post_b2b_client/response_parsers/parcel_service_sync_parser.rb', line 14

def parcel_data_hash
  parcel_id = nil
  pdh = response_parcel_hashes.each_with_object({}) do |rp_hash, result|
    parcel_id = parcel_parcel_id_from(rp_hash)
    result[parcel_id] = updated_result_value_for(result[parcel_id], rp_hash)
  end
  pdh[parcel_id].merge!(printings: print_data_from(response_print_hash))

  pdh
end

#parcel_parcel_id_from(rp_hash) ⇒ Object



41
42
43
# File 'lib/czech_post_b2b_client/response_parsers/parcel_service_sync_parser.rb', line 41

def parcel_parcel_id_from(rp_hash)
  rp_hash['recordNumber'].to_s
end

#pdf_content_from(pdf_content_encoded) ⇒ Object



57
58
59
60
61
# File 'lib/czech_post_b2b_client/response_parsers/parcel_service_sync_parser.rb', line 57

def pdf_content_from(pdf_content_encoded)
  return nil if pdf_content_encoded.nil?

  ::Base64.decode64(pdf_content_encoded)
end


50
51
52
53
54
55
# File 'lib/czech_post_b2b_client/response_parsers/parcel_service_sync_parser.rb', line 50

def print_data_from(print_hash)
  return nil if print_hash.nil? || print_hash.empty?

  { pdf_content: pdf_content_from(print_hash.dig('file')),
    state: state_hash_from(print_hash.dig('printParamsResponse')) }
end

#response_parcel_hashesObject



33
34
35
# File 'lib/czech_post_b2b_client/response_parsers/parcel_service_sync_parser.rb', line 33

def response_parcel_hashes
  [response_root_node.dig('responseHeader', 'resultParcelData')].flatten.compact # to always get array of hash(es)
end

#response_print_hashObject



37
38
39
# File 'lib/czech_post_b2b_client/response_parsers/parcel_service_sync_parser.rb', line 37

def response_print_hash
  response_root_node.dig('responsePrintParams')
end

#response_root_node_nameObject



25
26
27
# File 'lib/czech_post_b2b_client/response_parsers/parcel_service_sync_parser.rb', line 25

def response_root_node_name
  'parcelServiceSyncResponse'
end

#response_state_responseObject



29
30
31
# File 'lib/czech_post_b2b_client/response_parsers/parcel_service_sync_parser.rb', line 29

def response_state_response
  response_root_node.dig('responseHeader', 'resultHeader')
end

#updated_result_value_for(value, parcel_params_result_hash) ⇒ Object



63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
# File 'lib/czech_post_b2b_client/response_parsers/parcel_service_sync_parser.rb', line 63

def updated_result_value_for(value, parcel_params_result_hash)
  pd_hash = parcel_data_from(parcel_params_result_hash)

  return pd_hash if value.nil?

  # merging states
  value[:states] = (value[:states] + pd_hash[:states]).sort { |a, b| a[:code] <=> b[:code] }

  # more parcel_codes for one parcel_id => probably errors
  old_p_code = value[:parcel_code]
  new_p_code = pd_hash[:parcel_code]
  if old_p_code != new_p_code
    raise "Two different parcel_codes [#{old_p_code}, #{new_p_code}] for parcel_id:'#{parcel_id}'"
  end

  value
end