nz_bank_account_validator 0.9.0 → 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: c851a0b46247ae865d59bac22f1c982b58cc1422
4
- data.tar.gz: 8afecdcd65e79a97950894874a70b21144babb11
3
+ metadata.gz: 41cda291273f19edfda0b18968d46ba1f65ef836
4
+ data.tar.gz: f542268d119d4b7eef21326a4232c70e030fe5c5
5
5
  SHA512:
6
- metadata.gz: 9b51753e2f12832625ae6bc7d3f698a2c791a60e1a7be4a9e3af96a55d173bc1b16082c61d7b242df40e23fdcfdc92cbe240fa5236674dce1219e90ad99072b2
7
- data.tar.gz: edb846b0d34f07dc14232f64e4596f7f2ed190c86f76d31dd57dd38ebde1ead06bd2de2a04596ddabeba5a70a735d2bccf19e09c1e7e73381713d832b2e8431e
6
+ metadata.gz: b9ac2d9ace8242af0522242d24008396911e2d425cccbe681e0a7dd5fcee7640bf11a24d8596bfc97e761163391dd8abc0a185bcaabbe99c2c193b11a9e51e1f
7
+ data.tar.gz: d9d0ec628b5a8da404cd49b71f7dec529969cc73ea21eba2e38a54bd52709a80b06d385febc1806ab4f9677649d7b886de5f384e57c9befe88e275039404b3d3
data/Gemfile CHANGED
@@ -1,3 +1,3 @@
1
- source "https://rubygems.org"
1
+ source 'https://rubygems.org'
2
2
 
3
3
  gemspec
data/README.md CHANGED
@@ -1,5 +1,9 @@
1
1
  # NzBankAccountValidator
2
2
 
3
+ [![Build Status](https://travis-ci.org/steveh/nz_bank_account_validator.svg?branch=master)](https://travis-ci.org/steveh/nz_bank_account_validator)
4
+ [![Code Climate](https://codeclimate.com/github/steveh/nz_bank_account_validator/badges/gpa.svg)](https://codeclimate.com/github/steveh/nz_bank_account_validator)
5
+ [![Test Coverage](https://codeclimate.com/github/steveh/nz_bank_account_validator/badges/coverage.svg)](https://codeclimate.com/github/steveh/nz_bank_account_validator/coverage)
6
+
3
7
  An implementation of the process described on page 10 of the [IRD RWT - NRWT 2008 Specification](https://www.ird.govt.nz/resources/d/8/d8e49dce-1bda-4875-8acf-9ebf908c6e17/rwt-nrwt-spec-2014.pdf).
4
8
 
5
9
 
data/Rakefile CHANGED
@@ -1,5 +1,5 @@
1
- require "bundler/gem_tasks"
2
- require "rspec/core/rake_task"
1
+ require 'bundler/gem_tasks'
2
+ require 'rspec/core/rake_task'
3
3
 
4
4
  RSpec::Core::RakeTask.new(:spec)
5
5
 
data/bin/console CHANGED
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env ruby
2
2
 
3
- require "bundler/setup"
4
- require "nz_bank_account_validator"
3
+ require 'bundler/setup'
4
+ require 'nz_bank_account_validator'
5
5
 
6
6
  # You can add fixtures and/or initialization code here to make experimenting
7
7
  # with your gem easier. You can also use a different console, if you like.
@@ -10,5 +10,5 @@ require "nz_bank_account_validator"
10
10
  # require "pry"
11
11
  # Pry.start
12
12
 
13
- require "irb"
13
+ require 'irb'
14
14
  IRB.start
@@ -1,45 +1,49 @@
1
- require "nz_bank_account_validator/version"
2
-
3
1
  # frozen_string_literal: true
2
+ require 'nz_bank_account_validator/version'
3
+
4
4
  class NzBankAccountValidator
5
+ BankDefinition = Struct.new(:ranges, :algo)
6
+
5
7
  PATTERN = /\A^(?<bank_id>\d{1,2})[- ]?(?<bank_branch>\d{1,4})[- ]?(?<account_base_number>\d{1,8})[- ]?(?<account_suffix>\d{1,4})\z/
6
8
 
7
9
  RADIX = 10
8
10
 
9
11
  CHECKSUM_DIGITS = 18
10
12
 
11
- ACCOUNT_BASE_NUMBER_CUTOFF = 990000
12
-
13
- BANKS = { 1 => { ranges: [1..999, 1100..1199, 1800..1899] },
14
- 2 => { ranges: [1..999, 1200..1299] },
15
- 3 => { ranges: [1..999, 1300..1399, 1500..1599, 1700..1799, 1900..1999] },
16
- 6 => { ranges: [1..999, 1400..1499] },
17
- 8 => { ranges: [6500..6599], algo: :d },
18
- 9 => { ranges: [], algo: :e }, # range was 0000
19
- 11 => { ranges: [5000..6499, 6600..8999] },
20
- 12 => { ranges: [3000..3299, 3400..3499, 3600..3699] },
21
- 13 => { ranges: [4900..4999] },
22
- 14 => { ranges: [4700..4799] },
23
- 15 => { ranges: [3900..3999] },
24
- 16 => { ranges: [4400..4499] },
25
- 17 => { ranges: [3300..3399] },
26
- 18 => { ranges: [3500..3599] },
27
- 19 => { ranges: [4600..4649] },
28
- 20 => { ranges: [4100..4199] },
29
- 21 => { ranges: [4800..4899] },
30
- 22 => { ranges: [4000..4049] },
31
- 23 => { ranges: [3700..3799] },
32
- 24 => { ranges: [4300..4349] },
33
- 25 => { ranges: [2500..2599], algo: :f },
34
- 26 => { ranges: [2600..2699], algo: :g },
35
- 27 => { ranges: [3800..3849] },
36
- 28 => { ranges: [2100..2149], algo: :g },
37
- 29 => { ranges: [2150..2299], algo: :g },
38
- 30 => { ranges: [2900..2949] },
39
- 31 => { ranges: [2800..2849], algo: :x },
40
- 33 => { ranges: [6700..6799], algo: :f },
41
- 35 => { ranges: [2400..2499] },
42
- 38 => { ranges: [9000..9499] } }.freeze
13
+ ACCOUNT_BASE_NUMBER_CUTOFF = 990_000
14
+
15
+ BANKS = {
16
+ 1 => BankDefinition.new([1..999, 1100..1199, 1800..1899]),
17
+ 2 => BankDefinition.new([1..999, 1200..1299]),
18
+ 3 => BankDefinition.new([1..999, 1300..1399, 1500..1599, 1700..1799, 1900..1999]),
19
+ 6 => BankDefinition.new([1..999, 1400..1499]),
20
+ 8 => BankDefinition.new([6500..6599], :d),
21
+ 9 => BankDefinition.new([0..0], :e),
22
+ 11 => BankDefinition.new([5000..6499, 6600..8999]),
23
+ 12 => BankDefinition.new([3000..3299, 3400..3499, 3600..3699]),
24
+ 13 => BankDefinition.new([4900..4999]),
25
+ 14 => BankDefinition.new([4700..4799]),
26
+ 15 => BankDefinition.new([3900..3999]),
27
+ 16 => BankDefinition.new([4400..4499]),
28
+ 17 => BankDefinition.new([3300..3399]),
29
+ 18 => BankDefinition.new([3500..3599]),
30
+ 19 => BankDefinition.new([4600..4649]),
31
+ 20 => BankDefinition.new([4100..4199]),
32
+ 21 => BankDefinition.new([4800..4899]),
33
+ 22 => BankDefinition.new([4000..4049]),
34
+ 23 => BankDefinition.new([3700..3799]),
35
+ 24 => BankDefinition.new([4300..4349]),
36
+ 25 => BankDefinition.new([2500..2599], :f),
37
+ 26 => BankDefinition.new([2600..2699], :g),
38
+ 27 => BankDefinition.new([3800..3849]),
39
+ 28 => BankDefinition.new([2100..2149], :g),
40
+ 29 => BankDefinition.new([2150..2299], :g),
41
+ 30 => BankDefinition.new([2900..2949]),
42
+ 31 => BankDefinition.new([2800..2849], :x),
43
+ 33 => BankDefinition.new([6700..6799], :f),
44
+ 35 => BankDefinition.new([2400..2499]),
45
+ 38 => BankDefinition.new([9000..9499])
46
+ }.freeze
43
47
 
44
48
  ALGOS = {
45
49
  a: [0, 0, 6, 3, 7, 9, 0, 0, 10, 5, 8, 4, 2, 1, 0, 0, 0, 0, 11],
@@ -49,7 +53,7 @@ class NzBankAccountValidator
49
53
  e: [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 4, 3, 2, 0, 0, 0, 1, 11],
50
54
  f: [0, 0, 0, 0, 0, 0, 0, 1, 7, 3, 1, 7, 3, 1, 0, 0, 0, 0, 10],
51
55
  g: [0, 0, 0, 0, 0, 0, 0, 1, 3, 7, 1, 3, 7, 1, 0, 3, 7, 1, 10],
52
- x: [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1],
56
+ x: [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1]
53
57
  }.freeze
54
58
 
55
59
  def self.valid?(string)
@@ -84,17 +88,16 @@ class NzBankAccountValidator
84
88
  BANKS.key?(bank_id)
85
89
  end
86
90
 
91
+ def bank_definition
92
+ BANKS[bank_id]
93
+ end
94
+
87
95
  def valid_bank_branch?
88
- return false unless valid_bank_id?
96
+ return false unless bank_definition
89
97
  return false unless bank_branch
90
98
 
91
- if BANKS[bank_id][:ranges].empty?
92
- # Bank 9. Anything is valid? # TODO: confirm
93
- true
94
- else
95
- BANKS[bank_id][:ranges].any? do |range|
96
- range.include?(bank_branch)
97
- end
99
+ bank_definition.ranges.any? do |range|
100
+ range.include?(bank_branch)
98
101
  end
99
102
  end
100
103
 
@@ -105,7 +108,7 @@ class NzBankAccountValidator
105
108
  def algo_code
106
109
  # If the account base number is below 00990000 then apply algorithm A
107
110
  # Otherwise apply algorithm B.
108
- BANKS[bank_id][:algo] || (account_base_number < ACCOUNT_BASE_NUMBER_CUTOFF ? :a : :b)
111
+ bank_definition.algo || (account_base_number < ACCOUNT_BASE_NUMBER_CUTOFF ? :a : :b)
109
112
  end
110
113
 
111
114
  def algo
@@ -113,7 +116,7 @@ class NzBankAccountValidator
113
116
  end
114
117
 
115
118
  def number_for_checksum
116
- format("%02d%04d%08d%04d", bank_id, bank_branch, account_base_number, account_suffix)
119
+ format('%02d%04d%08d%04d', bank_id, bank_branch, account_base_number, account_suffix)
117
120
  end
118
121
 
119
122
  def checksum
@@ -1,3 +1,3 @@
1
1
  class NzBankAccountValidator
2
- VERSION = "0.9.0"
2
+ VERSION = '1.0.0'.freeze
3
3
  end
@@ -1,23 +1,24 @@
1
1
  # coding: utf-8
2
- lib = File.expand_path("../lib", __FILE__)
2
+ lib = File.expand_path('../lib', __FILE__)
3
3
  $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
- require "nz_bank_account_validator/version"
4
+ require 'nz_bank_account_validator/version'
5
5
 
6
6
  Gem::Specification.new do |spec|
7
- spec.name = "nz_bank_account_validator"
7
+ spec.name = 'nz_bank_account_validator'
8
8
  spec.version = NzBankAccountValidator::VERSION
9
- spec.authors = ["Steve Hoeksema", "Eaden McKee"]
10
- spec.email = ["steve@kotiri.com"]
11
- spec.summary = "Validate a New Zealand bank account number according to IRD specifications"
12
- spec.description = "Validate a New Zealand bank account number according to IRD specifications"
13
- spec.homepage = "https://github.com/steveh/nz_bank_account_validator"
14
- spec.license = "MIT"
9
+ spec.authors = ['Steve Hoeksema', 'Eaden McKee']
10
+ spec.email = ['steve@kotiri.com']
11
+ spec.summary = 'Validate a New Zealand bank account number according to IRD specifications'
12
+ spec.description = 'Validate a New Zealand bank account number according to IRD specifications'
13
+ spec.homepage = 'https://github.com/steveh/nz_bank_account_validator'
14
+ spec.license = 'MIT'
15
15
  spec.files = `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
16
- spec.bindir = "exe"
16
+ spec.bindir = 'exe'
17
17
  spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
18
- spec.require_paths = ["lib"]
18
+ spec.require_paths = ['lib']
19
19
 
20
- spec.add_development_dependency "bundler"
21
- spec.add_development_dependency "rake"
22
- spec.add_development_dependency "rspec"
20
+ spec.add_development_dependency 'bundler'
21
+ spec.add_development_dependency 'rake'
22
+ spec.add_development_dependency 'rspec'
23
+ spec.add_development_dependency 'codeclimate-test-reporter'
23
24
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: nz_bank_account_validator
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.9.0
4
+ version: 1.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Steve Hoeksema
@@ -53,6 +53,20 @@ dependencies:
53
53
  - - ">="
54
54
  - !ruby/object:Gem::Version
55
55
  version: '0'
56
+ - !ruby/object:Gem::Dependency
57
+ name: codeclimate-test-reporter
58
+ requirement: !ruby/object:Gem::Requirement
59
+ requirements:
60
+ - - ">="
61
+ - !ruby/object:Gem::Version
62
+ version: '0'
63
+ type: :development
64
+ prerelease: false
65
+ version_requirements: !ruby/object:Gem::Requirement
66
+ requirements:
67
+ - - ">="
68
+ - !ruby/object:Gem::Version
69
+ version: '0'
56
70
  description: Validate a New Zealand bank account number according to IRD specifications
57
71
  email:
58
72
  - steve@kotiri.com