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
|
PATH
|
||||||
remote: .
|
remote: .
|
||||||
specs:
|
specs:
|
||||||
girocode (0.2.0)
|
girocode (1.0.0)
|
||||||
|
bigdecimal
|
||||||
iban-tools
|
iban-tools
|
||||||
rqrcode
|
rqrcode
|
||||||
|
|
||||||
GEM
|
GEM
|
||||||
remote: https://rubygems.org/
|
remote: https://rubygems.org/
|
||||||
specs:
|
specs:
|
||||||
|
bigdecimal (3.2.1)
|
||||||
chunky_png (1.4.0)
|
chunky_png (1.4.0)
|
||||||
docile (1.4.1)
|
docile (1.4.1)
|
||||||
iban-tools (1.2.1)
|
iban-tools (1.2.1)
|
||||||
@ -32,6 +34,3 @@ DEPENDENCIES
|
|||||||
minitest
|
minitest
|
||||||
rake
|
rake
|
||||||
simplecov
|
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.files = Dir['{lib}/**/*.rb', 'LICENSE', 'README.md', 'CHANGELOG.md']
|
||||||
s.require_paths = ['lib']
|
s.require_paths = ['lib']
|
||||||
|
|
||||||
|
s.add_dependency 'bigdecimal'
|
||||||
s.add_dependency 'rqrcode'
|
s.add_dependency 'rqrcode'
|
||||||
s.add_dependency 'iban-tools'
|
s.add_dependency 'iban-tools'
|
||||||
end
|
end
|
||||||
|
@ -3,6 +3,7 @@ require 'iban-tools'
|
|||||||
require 'rqrcode'
|
require 'rqrcode'
|
||||||
|
|
||||||
require_relative 'girocode/version'
|
require_relative 'girocode/version'
|
||||||
|
require_relative 'girocode/bic'
|
||||||
require_relative 'girocode/code'
|
require_relative 'girocode/code'
|
||||||
|
|
||||||
module Girocode
|
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)
|
def bic=(value)
|
||||||
if value.nil?
|
if value.nil?
|
||||||
@bic = 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
|
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
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -1,3 +1,3 @@
|
|||||||
module Girocode
|
module Girocode
|
||||||
VERSION = "0.2.0"
|
VERSION = "1.0.0"
|
||||||
end
|
end
|
||||||
|
@ -2,7 +2,7 @@ require_relative 'test_helper'
|
|||||||
|
|
||||||
class GirocodeTest < Minitest::Test
|
class GirocodeTest < Minitest::Test
|
||||||
def test_that_it_has_a_version_number
|
def test_that_it_has_a_version_number
|
||||||
refute_nil ::Girocode::VERSION
|
refute_nil Girocode::VERSION
|
||||||
end
|
end
|
||||||
|
|
||||||
def test_girocode
|
def test_girocode
|
||||||
@ -10,9 +10,15 @@ class GirocodeTest < Minitest::Test
|
|||||||
code = Girocode.new(**attrs)
|
code = Girocode.new(**attrs)
|
||||||
assert_equal data(:data), code.to_ascii
|
assert_equal data(:data), code.to_ascii
|
||||||
end
|
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
|
private
|
||||||
|
|
||||||
def data(name)
|
def data(name)
|
||||||
Pathname(__dir__).join("#{name}.txt").read
|
Pathname(__dir__).join("#{name}.txt").read
|
||||||
end
|
end
|
||||||
|
Loading…
x
Reference in New Issue
Block a user