Inline BIC validation from bank-contact
Fix bundler
This commit is contained in:
parent
2bd3dd8656
commit
8d93f295cf
@ -1,3 +1,5 @@
|
||||
## 0.2.0
|
||||
## 1.0.0
|
||||
|
||||
- support Ruby 2.7+
|
||||
- Drop bank-contact, use iban-tools (@Joerg-Seitz)
|
||||
- Inline BIC validation from bank-contact
|
||||
- Support Ruby 3.4
|
||||
|
@ -1,13 +1,15 @@
|
||||
PATH
|
||||
remote: .
|
||||
specs:
|
||||
girocode (0.2.0)
|
||||
girocode (1.0.0)
|
||||
bigdecimal
|
||||
iban-tools
|
||||
rqrcode
|
||||
|
||||
GEM
|
||||
remote: https://rubygems.org/
|
||||
specs:
|
||||
bigdecimal (3.2.1)
|
||||
chunky_png (1.4.0)
|
||||
docile (1.4.1)
|
||||
iban-tools (1.2.1)
|
||||
@ -32,6 +34,3 @@ DEPENDENCIES
|
||||
minitest
|
||||
rake
|
||||
simplecov
|
||||
|
||||
BUNDLED WITH
|
||||
2.6.8
|
||||
|
@ -16,6 +16,7 @@ Gem::Specification.new do |s|
|
||||
s.files = Dir['{lib}/**/*.rb', 'LICENSE', 'README.md', 'CHANGELOG.md']
|
||||
s.require_paths = ['lib']
|
||||
|
||||
s.add_dependency 'bigdecimal'
|
||||
s.add_dependency 'rqrcode'
|
||||
s.add_dependency 'iban-tools'
|
||||
end
|
||||
|
@ -3,6 +3,7 @@ require 'iban-tools'
|
||||
require 'rqrcode'
|
||||
|
||||
require_relative 'girocode/version'
|
||||
require_relative 'girocode/bic'
|
||||
require_relative 'girocode/code'
|
||||
|
||||
module Girocode
|
||||
|
67
lib/girocode/bic.rb
Normal file
67
lib/girocode/bic.rb
Normal file
@ -0,0 +1,67 @@
|
||||
# derived from bank-contact/bic by Kevin
|
||||
|
||||
module Girocode
|
||||
class BIC
|
||||
REGEX = /\A([A-Z]{4})([A-Z]{2})([A-Z0-9]{2})([A-Z0-9]{3})?\z/.freeze
|
||||
|
||||
def self.valid?(code)
|
||||
new(code).valid?
|
||||
end
|
||||
|
||||
def initialize(code)
|
||||
@code = code.to_s.gsub(/\s+/, '').upcase
|
||||
end
|
||||
|
||||
def bank_code
|
||||
@code[0..3]
|
||||
end
|
||||
|
||||
def country_code
|
||||
@code[4..5]
|
||||
end
|
||||
|
||||
def location_code
|
||||
@code[6..7]
|
||||
end
|
||||
|
||||
def branch_code
|
||||
@code[8..10]
|
||||
end
|
||||
|
||||
def to_s(formatted = false)
|
||||
formatted ? to_formatted_str : @code
|
||||
end
|
||||
|
||||
def to_formatted_str
|
||||
"#{bank_code} #{country_code} #{location_code} #{branch_code}".strip
|
||||
end
|
||||
|
||||
def test?
|
||||
location_code[1] == '0'
|
||||
end
|
||||
|
||||
def passive?
|
||||
location_code[1] == '1'
|
||||
end
|
||||
|
||||
def reverse_billing?
|
||||
location_code[1] == '2'
|
||||
end
|
||||
|
||||
def valid?
|
||||
valid_format? && valid_location_code? && valid_branch_code?
|
||||
end
|
||||
|
||||
def valid_format?
|
||||
REGEX.match?(@code)
|
||||
end
|
||||
|
||||
def valid_location_code?
|
||||
!location_code.start_with?('0', '1') && !location_code.end_with?('O')
|
||||
end
|
||||
|
||||
def valid_branch_code?
|
||||
branch_code.empty? || branch_code == 'XXX' || !branch_code.start_with?('X')
|
||||
end
|
||||
end
|
||||
end
|
@ -23,10 +23,10 @@ module Girocode
|
||||
def bic=(value)
|
||||
if value.nil?
|
||||
@bic = nil
|
||||
elsif value.match? /\A[A-Z0-9]{4}([A-Z]{2})([A-Z0-9]{2})([A-Z0-9]{3})?\z/
|
||||
@bic = value
|
||||
else
|
||||
raise ArgumentError, "Invalid BIC #{value.inspect}"
|
||||
bic = BIC.new(value)
|
||||
raise ArgumentError, "Invalid BIC #{value.inspect}" unless bic.valid?
|
||||
@bic = bic.to_s
|
||||
end
|
||||
end
|
||||
|
||||
|
@ -1,3 +1,3 @@
|
||||
module Girocode
|
||||
VERSION = "0.2.0"
|
||||
VERSION = "1.0.0"
|
||||
end
|
||||
|
@ -2,7 +2,7 @@ require_relative 'test_helper'
|
||||
|
||||
class GirocodeTest < Minitest::Test
|
||||
def test_that_it_has_a_version_number
|
||||
refute_nil ::Girocode::VERSION
|
||||
refute_nil Girocode::VERSION
|
||||
end
|
||||
|
||||
def test_girocode
|
||||
@ -11,6 +11,12 @@ class GirocodeTest < Minitest::Test
|
||||
assert_equal data(:data), code.to_ascii
|
||||
end
|
||||
|
||||
def test_bic
|
||||
assert_raises ArgumentError do
|
||||
Girocode.new(bic: 'FOOBAR', name: 'Franz Mustermänn', iban: 'DE71110220330123456789', currency: :eur, amount: 12.3, purpose: 'GDDS', creditor_reference: 'RF18539007547034')
|
||||
end
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def data(name)
|
||||
|
Loading…
x
Reference in New Issue
Block a user