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
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
|