Module: SmoSepaKiwis::ResponseParser

Defined in:
lib/smo_sepa_kiwis/response_parser.rb

Class Method Summary collapse

Class Method Details

.parse(body) ⇒ Object



5
6
7
8
9
10
11
# File 'lib/smo_sepa_kiwis/response_parser.rb', line 5

def self.parse(body)
  data = JSON.parse(body)
rescue JSON::ParserError => e
  raise ParseError, "Invalid JSON: #{e.message}"
else
  validate_and_convert(data)
end

.validate_and_convert(data) ⇒ Object



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

def self.validate_and_convert(data)
  # Empty result.
  return [] if data == []

  unless data.is_a?(Array) && data.first.is_a?(Array) && data.first.all? { |h| h.is_a?(String) }
    raise ParseError, "Unexpected response shape: #{data.class}"
  end

  headers = data.first.map { |h| h.to_sym }
  rows = data[1..]

  # No data rows (headers only).
  return [] if rows.nil? || rows.empty?

  rows.map do |row|
    unless row.is_a?(Array)
      raise ParseError, "Expected row to be an Array, got #{row.class}"
    end
    headers.zip(row).to_h
  end
end