nz_bank_account_validator 0.9.0 → 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
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