Class: Prawn::SwissQRBill::QR::Data
- Inherits:
-
Object
- Object
- Prawn::SwissQRBill::QR::Data
- Defined in:
- lib/prawn/swiss_qr_bill/qr/data.rb
Overview
The data of the Swiss QR-bill
References: www.paymentstandards.ch/dam/downloads/ig-qr-bill-en.pdf
-
Chapter 4, Page 25
Defined Under Namespace
Classes: Field
Constant Summary collapse
- FIELDS =
Available fields of the QR code data, ordered.
{ # fixed: SPC qr_type: Field.new('SPC'), version: Field.new('0200'), # fixed: 1 coding: Field.new('1'), iban: Field.new(nil, nil, false, :iban), # enum: S, K creditor_address_type: Field.new('K'), creditor_address_name: Field.new, creditor_address_line1: Field.new, creditor_address_line2: Field.new, creditor_address_postal_code: Field.new, creditor_address_city: Field.new, creditor_address_country: Field.new, # omit ultimate_creditor_* => for future use # enum: S, K ultimate_creditor_address_type: Field.new, ultimate_creditor_address_name: Field.new, ultimate_creditor_address_line1: Field.new, ultimate_creditor_address_line2: Field.new, ultimate_creditor_address_postal_code: Field.new, ultimate_creditor_address_city: Field.new, ultimate_creditor_address_country: Field.new, amount: Field.new(nil, ->(value) { value && format('%.2f', value) }), # enum: CHF, EUR currency: Field.new('CHF'), # enum: S, K debtor_address_type: Field.new, debtor_address_name: Field.new, debtor_address_line1: Field.new, debtor_address_line2: Field.new, debtor_address_postal_code: Field.new, debtor_address_city: Field.new, debtor_address_country: Field.new, # enum: QRR, SCOR, NON reference_type: Field.new('NON'), reference: Field.new(nil, ->(v) { v && v.delete(' ') }, false, :reference), unstructured_message: Field.new, # fixed: EPD trailer: Field.new('EPD'), # additional: bill_information: Field.new(nil, nil, true), # key-value pairs: alternative_parameters: Field.new(nil, nil, true) }.freeze
Instance Method Summary collapse
- #generate ⇒ Object
-
#initialize(fields = {}, options = {}) ⇒ Data
constructor
A new instance of Data.
- #process ⇒ Object
- #validate ⇒ Object
Constructor Details
#initialize(fields = {}, options = {}) ⇒ Data
Returns a new instance of Data.
77 78 79 80 81 82 83 84 85 86 87 88 89 |
# File 'lib/prawn/swiss_qr_bill/qr/data.rb', line 77 def initialize(fields = {}, = {}) = || {} # set defaults FIELDS.each_key do |field| instance_variable_set("@#{field}", FIELDS[field].default) end # set given fields.each_key do |field| instance_variable_set("@#{field}", fields[field]) end end |
Instance Method Details
#generate ⇒ Object
91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 |
# File 'lib/prawn/swiss_qr_bill/qr/data.rb', line 91 def generate validate if [:validate] stack = [] FIELDS.each_key do |k| var = instance_variable_get("@#{k}") # TODO: fix possible wrong format if alt parameters (last one) is given next if FIELDS[k][:skippable] && var.nil? # TODO: use #process; generate method should only call validate, then process, then render as string var = FIELDS[k][:format].call(var) if FIELDS[k][:format].is_a?(Proc) stack << var end stack.join("\r\n") end |
#process ⇒ Object
109 110 111 112 113 114 115 |
# File 'lib/prawn/swiss_qr_bill/qr/data.rb', line 109 def process FIELDS.each_key do |k| var = instance_variable_get("@#{k}") instance_variable_set("@#{k}", FIELDS[k][:format].call(var)) if FIELDS[k][:format].is_a?(Proc) end end |
#validate ⇒ Object
117 118 119 120 121 122 123 124 125 126 127 |
# File 'lib/prawn/swiss_qr_bill/qr/data.rb', line 117 def validate FIELDS.each_key do |k| next unless FIELDS[k][:validation] var = instance_variable_get("@#{k}") call_validator(FIELDS[k][:validation], var) end true end |