class Girocode::Code
Constants
- AMOUNT_RANGE
- ATTRIBUTES
- MAX_PAYLOAD_BYTES
Public Class Methods
new(**attrs)
click to toggle source
# File lib/girocode/code.rb, line 11 def initialize(**attrs) if keys = attrs.keys - ATTRIBUTES and not keys.empty? raise ArgumentError, "Illegal attributes #{keys.inspect}" end attrs.each { |attr, value| send("#{attr}=", value) } raise ArgumentError, "iban is required" unless iban? raise ArgumentError, "name is required" unless name? raise ArgumentError, 'currency is required for amount' if amount && !currency? raise ArgumentError, "either creditor reference or reference may be set" if creditor_reference? && reference? raise ArgumentError, "payload too long" if payload.bytesize > MAX_PAYLOAD_BYTES end
Public Instance Methods
amount=(value)
click to toggle source
# File lib/girocode/code.rb, line 53 def amount=(value) raise ArgumentError, 'amount is required' unless value value = BigDecimal(value, Float::DIG + 1) raise ArgumentError, "invalid amount #{value.inspect}" unless AMOUNT_RANGE.cover?(value) @amount = value end
bic=(value)
click to toggle source
# File lib/girocode/code.rb, line 23 def bic=(value) if value.nil? @bic = nil else bic = Bank::BIC.new(value) raise ArgumentError, "Invalid BIC #{value.inspect}" unless bic.valid? @bic = bic.to_s end end
bto_info=(value)
click to toggle source
# File lib/girocode/code.rb, line 81 def bto_info=(value) unless value.nil? raise ArgumentError, "invalid bto_info #{value.inspect}" if value.include?("\n") || value.include?("\r") || value.size > 70 end @bto_info = value end
creditor_reference=(value)
click to toggle source
# File lib/girocode/code.rb, line 67 def creditor_reference=(value) unless value.nil? raise ArgumentError, "invalid creditor reference #{value.inspect}" if value.include?("\n") || value.include?("\r") || value.size > 35 end @creditor_reference = value end
currency=(value)
click to toggle source
# File lib/girocode/code.rb, line 47 def currency=(value) value = value.to_s.upcase raise ArgumentError, "Invalid currency" unless value.match?(/\A[A-Z]{3}\z/) @currency = value end
iban=(value)
click to toggle source
# File lib/girocode/code.rb, line 41 def iban=(value) iban = Bank::IBAN.new(value) raise ArgumentError, "Invalid IBAN #{value.inspect}" unless iban.valid? @iban = iban.to_s end
name=(value)
click to toggle source
# File lib/girocode/code.rb, line 33 def name=(value) value = value.strip raise ArgumentError, 'name is required' unless value raise ArgumentError, 'name too long' if value.size > 70 raise ArgumentError, 'Illegal name' if value.include?("\n") || value.include?("\r") @name = value end
payload()
click to toggle source
# File lib/girocode/code.rb, line 95 def payload ['BCD', '002', '1', 'SCT', bic, name, iban,formatted_amount, purpose, creditor_reference || reference, bto_info].map(&:to_s).join("\n") end
purpose=(value)
click to toggle source
# File lib/girocode/code.rb, line 60 def purpose=(value) unless value.nil? raise ArgumentError, "invalid purpose #{value.inspect}" unless value.match?(/\A[A-z0-9]{0,4}\z/) end @purpose = value end
reference=(value)
click to toggle source
# File lib/girocode/code.rb, line 74 def reference=(value) unless value.nil? raise ArgumentError, "invalid reference #{value.inspect}" if value.include?("\n") || value.include?("\r") || value.size > 140 end @reference = value end
to_ascii()
click to toggle source
# File lib/girocode/code.rb, line 105 def to_ascii to_qrcode.to_s end
to_qrcode()
click to toggle source
# File lib/girocode/code.rb, line 101 def to_qrcode RQRCode::QRCode.new(payload, level: :m, mode: :byte_8bit) end
Private Instance Methods
formatted_amount()
click to toggle source
# File lib/girocode/code.rb, line 115 def formatted_amount "#{currency}#{amount.round(2).to_s('F')}" if currency? && amount end