Class: SwissQRBill::QRBillParser

Inherits:
Object
  • Object
show all
Defined in:
lib/swiss_qr_bill/qr_bill_parser.rb

Class Method Summary collapse

Class Method Details

.parse(data) ⇒ Object



13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
# File 'lib/swiss_qr_bill/qr_bill_parser.rb', line 13

def self.parse(data)
  case data
  when String
    data = if data.count("\r").positive?
             data.split("\r\n")
           else
             data.split("\n")
           end
  when Array
    # ok
  else
    raise "Unsupported data argument type. Expected data argument of type Array or String, got: #{data.class}"
  end

  raise "Unsupported data length. Data object must have at least 31 entries. Found: #{data.length}" if data.length < 31
  raise "Unsupported QRType: #{data[0]}" if data[0] != "SPC"
  raise "Unsupported Version: #{data[1]}" if data[1] != "0200"
  raise "Unsupported Coding: #{data[2]}" if data[2] != "1"

  regions = QRBill::REGIONS.to_h { |range, (key, klass)| [key, klass.new(*data[range])] }

  QRBill.new(
    raw: data,
    **regions
  )
end

.parse_file(path) ⇒ Object



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

def self.parse_file(path)
  detected_codes = QRCodeParser.parse_file(path)

  return [] if detected_codes.empty?

  detected_codes.map { |code| parse(code) }
end