nz_bank_account_validator 1.0.0 → 1.1.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
- SHA1:
3
- metadata.gz: 41cda291273f19edfda0b18968d46ba1f65ef836
4
- data.tar.gz: f542268d119d4b7eef21326a4232c70e030fe5c5
2
+ SHA256:
3
+ metadata.gz: 93d01a32380a3a0205ac9fb23d6d641c3a0c1b87a991668461e360a1ededf858
4
+ data.tar.gz: 1acc8512108e428c6ffed4834f9604de152a5c4645fe3ff55e4eeb9023bd9854
5
5
  SHA512:
6
- metadata.gz: b9ac2d9ace8242af0522242d24008396911e2d425cccbe681e0a7dd5fcee7640bf11a24d8596bfc97e761163391dd8abc0a185bcaabbe99c2c193b11a9e51e1f
7
- data.tar.gz: d9d0ec628b5a8da404cd49b71f7dec529969cc73ea21eba2e38a54bd52709a80b06d385febc1806ab4f9677649d7b886de5f384e57c9befe88e275039404b3d3
6
+ metadata.gz: eb569c9d512b4c64037d1bb981ce2bbd613c2ba53531b627176c136f1eb86d00903f4c4cdca5fca83260213e746cd3e783ad08f2b0f6a4402256b602ad4c0621
7
+ data.tar.gz: 869edddce45641db25d7566b119a78bdeac3ff9fc284cb4ec606fbe8f21e4eb9dd8e874d9a0c3140023bdbd6b1512ea61b6bbdd5d288c9adfe40f0d471ed331c
@@ -0,0 +1,134 @@
1
+ require:
2
+ - rubocop-rspec
3
+ - rubocop-performance
4
+
5
+ AllCops:
6
+ TargetRubyVersion: 2.6
7
+ Exclude:
8
+ - .git/
9
+ - bin/*
10
+ - config/deploy/*
11
+ - coverage/**/*
12
+ - db/migrate/*
13
+ - db/schema.rb
14
+ - doc/**/*
15
+ - Gemfile
16
+ - lib/tasks/*.rake
17
+ - log/**/*
18
+ - node_modules/**/*
19
+ - script/*
20
+ - spec/**/*
21
+ - test/**/*
22
+ - tmp/**/*
23
+ - vendor/assets/**/*
24
+ - vendor/gems/*/bin/*
25
+ - vendor/gems/*/spec/**/*
26
+
27
+ Layout/AlignParameters:
28
+ EnforcedStyle: with_first_parameter
29
+
30
+ Layout/AlignHash:
31
+ EnforcedHashRocketStyle: table
32
+ EnforcedColonStyle: table
33
+
34
+ Lint/UnusedBlockArgument:
35
+ AllowUnusedKeywordArguments: true
36
+
37
+ Lint/UnusedMethodArgument:
38
+ AllowUnusedKeywordArguments: true
39
+
40
+ Lint/LiteralAsCondition:
41
+ Enabled: false
42
+
43
+ Layout/EndAlignment:
44
+ EnforcedStyleAlignWith: keyword
45
+ AutoCorrect: true
46
+
47
+ Layout/BlockAlignment:
48
+ EnforcedStyleAlignWith: start_of_block
49
+ AutoCorrect: true
50
+
51
+ Layout/DefEndAlignment:
52
+ EnforcedStyleAlignWith: def
53
+ AutoCorrect: true
54
+
55
+ Style/AsciiComments:
56
+ Enabled: false
57
+
58
+ Style/StringLiterals:
59
+ EnforcedStyle: double_quotes
60
+
61
+ Style/TrailingCommaInArrayLiteral:
62
+ EnforcedStyleForMultiline: comma
63
+
64
+ Style/TrailingCommaInHashLiteral:
65
+ EnforcedStyleForMultiline: comma
66
+
67
+ Style/WordArray:
68
+ EnforcedStyle: brackets
69
+
70
+ Style/SymbolArray:
71
+ EnforcedStyle: brackets
72
+
73
+ Style/Lambda:
74
+ EnforcedStyle: literal
75
+
76
+ Style/FormatStringToken:
77
+ EnforcedStyle: template
78
+
79
+ Style/ClassAndModuleChildren:
80
+ EnforcedStyle: nested
81
+
82
+ Style/EmptyMethod:
83
+ EnforcedStyle: expanded
84
+
85
+ Style/NumericLiterals:
86
+ Enabled: false
87
+
88
+ Style/FrozenStringLiteralComment:
89
+ Enabled: false
90
+
91
+ Style/DoubleNegation:
92
+ Enabled: false
93
+
94
+ Style/Documentation:
95
+ Enabled: false
96
+
97
+ Style/RegexpLiteral:
98
+ Enabled: false
99
+
100
+ Style/IfUnlessModifier:
101
+ Enabled: false
102
+
103
+ Metrics/LineLength:
104
+ Enabled: false
105
+
106
+ Metrics/ClassLength:
107
+ Enabled: false
108
+
109
+ Metrics/BlockLength:
110
+ Enabled: false
111
+
112
+ Metrics/MethodLength:
113
+ Enabled: false
114
+
115
+ Metrics/ModuleLength:
116
+ Enabled: false
117
+
118
+ Metrics/CyclomaticComplexity:
119
+ Enabled: false
120
+
121
+ Metrics/PerceivedComplexity:
122
+ Enabled: false
123
+
124
+ Metrics/AbcSize:
125
+ Enabled: false
126
+
127
+ Metrics/ParameterLists:
128
+ Enabled: false
129
+
130
+ Metrics/BlockNesting:
131
+ Enabled: false
132
+
133
+ Naming/UncommunicativeMethodParamName:
134
+ Enabled: false
@@ -1,3 +1,5 @@
1
+ 1.1.0 - Tidy up code, add more bank accounts from updated document
2
+ 1.0.0 - First public release
1
3
  0.9.0 - Add new ranges from updated IRD document
2
4
  Use new RSpec syntax
3
5
  Accept a string of a full bank account number rather than a collection of parts
data/Gemfile CHANGED
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  source 'https://rubygems.org'
2
4
 
3
5
  gemspec
data/Rakefile CHANGED
@@ -1,5 +1,7 @@
1
- require 'bundler/gem_tasks'
2
- require 'rspec/core/rake_task'
1
+ # frozen_string_literal: true
2
+
3
+ require "bundler/gem_tasks"
4
+ require "rspec/core/rake_task"
3
5
 
4
6
  RSpec::Core::RakeTask.new(:spec)
5
7
 
@@ -1,4 +1,5 @@
1
1
  #!/usr/bin/env ruby
2
+ # frozen_string_literal: true
2
3
 
3
4
  require 'bundler/setup'
4
5
  require 'nz_bank_account_validator'
@@ -1,10 +1,24 @@
1
1
  # frozen_string_literal: true
2
- require 'nz_bank_account_validator/version'
2
+
3
+ require "nz_bank_account_validator/version"
3
4
 
4
5
  class NzBankAccountValidator
5
- BankDefinition = Struct.new(:ranges, :algo)
6
+ class BankDefinition
7
+ def initialize(ranges: [], algo: nil)
8
+ @ranges = ranges
9
+ @algo = algo
10
+ end
11
+
12
+ attr_reader :algo
13
+
14
+ def include?(branch)
15
+ @ranges.any? do |range|
16
+ range.include?(branch)
17
+ end
18
+ end
19
+ end
6
20
 
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/
21
+ PATTERN = /\A^(?<bank_id>\d{1,2})[- ]?(?<bank_branch>\d{1,4})[- ]?(?<account_base_number>\d{1,8})[- ]?(?<account_suffix>\d{1,4})\z/.freeze
8
22
 
9
23
  RADIX = 10
10
24
 
@@ -13,36 +27,38 @@ class NzBankAccountValidator
13
27
  ACCOUNT_BASE_NUMBER_CUTOFF = 990_000
14
28
 
15
29
  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])
30
+ 1 => BankDefinition.new(ranges: [1..999, 1100..1199, 1800..1899]),
31
+ 2 => BankDefinition.new(ranges: [1..999, 1200..1299]),
32
+ 3 => BankDefinition.new(ranges: [1..999, 1300..1399, 1500..1599, 1700..1799, 1900..1999, 7350..7399]),
33
+ 4 => BankDefinition.new(ranges: [2020..2024]),
34
+ 6 => BankDefinition.new(ranges: [1..999, 1400..1499]),
35
+ 8 => BankDefinition.new(ranges: [6500..6599], algo: :d),
36
+ 9 => BankDefinition.new(ranges: [0..0], algo: :e),
37
+ 10 => BankDefinition.new(ranges: [5165..5169]),
38
+ 11 => BankDefinition.new(ranges: [5000..6499, 6600..8999]),
39
+ 12 => BankDefinition.new(ranges: [3000..3299, 3400..3499, 3600..3699]),
40
+ 13 => BankDefinition.new(ranges: [4900..4999]),
41
+ 14 => BankDefinition.new(ranges: [4700..4799]),
42
+ 15 => BankDefinition.new(ranges: [3900..3999]),
43
+ 16 => BankDefinition.new(ranges: [4400..4499]),
44
+ 17 => BankDefinition.new(ranges: [3300..3399]),
45
+ 18 => BankDefinition.new(ranges: [3500..3599]),
46
+ 19 => BankDefinition.new(ranges: [4600..4649]),
47
+ 20 => BankDefinition.new(ranges: [4100..4199]),
48
+ 21 => BankDefinition.new(ranges: [4800..4899]),
49
+ 22 => BankDefinition.new(ranges: [4000..4049]),
50
+ 23 => BankDefinition.new(ranges: [3700..3799]),
51
+ 24 => BankDefinition.new(ranges: [4300..4349]),
52
+ 25 => BankDefinition.new(ranges: [2500..2599], algo: :f),
53
+ 26 => BankDefinition.new(ranges: [2600..2699], algo: :g),
54
+ 27 => BankDefinition.new(ranges: [3800..3849]),
55
+ 28 => BankDefinition.new(ranges: [2100..2149], algo: :g),
56
+ 29 => BankDefinition.new(ranges: [2150..2299], algo: :g),
57
+ 30 => BankDefinition.new(ranges: [2900..2949]),
58
+ 31 => BankDefinition.new(ranges: [2800..2849], algo: :x),
59
+ 33 => BankDefinition.new(ranges: [6700..6799], algo: :f),
60
+ 35 => BankDefinition.new(ranges: [2400..2499]),
61
+ 38 => BankDefinition.new(ranges: [9000..9499]),
46
62
  }.freeze
47
63
 
48
64
  ALGOS = {
@@ -53,7 +69,7 @@ class NzBankAccountValidator
53
69
  e: [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 4, 3, 2, 0, 0, 0, 1, 11],
54
70
  f: [0, 0, 0, 0, 0, 0, 0, 1, 7, 3, 1, 7, 3, 1, 0, 0, 0, 0, 10],
55
71
  g: [0, 0, 0, 0, 0, 0, 0, 1, 3, 7, 1, 3, 7, 1, 0, 3, 7, 1, 10],
56
- x: [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1]
72
+ x: [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1],
57
73
  }.freeze
58
74
 
59
75
  def self.valid?(string)
@@ -62,13 +78,12 @@ class NzBankAccountValidator
62
78
 
63
79
  def initialize(string)
64
80
  match = string.match(PATTERN)
81
+ return unless match
65
82
 
66
- if match
67
- @bank_id = Integer(match[:bank_id], RADIX)
68
- @bank_branch = Integer(match[:bank_branch], RADIX)
69
- @account_base_number = Integer(match[:account_base_number], RADIX)
70
- @account_suffix = Integer(match[:account_suffix], RADIX)
71
- end
83
+ @bank_id = Integer(match[:bank_id], RADIX)
84
+ @bank_branch = Integer(match[:bank_branch], RADIX)
85
+ @account_base_number = Integer(match[:account_base_number], RADIX)
86
+ @account_suffix = Integer(match[:account_suffix], RADIX)
72
87
  end
73
88
 
74
89
  attr_accessor :bank_id, :bank_branch, :account_base_number, :account_suffix
@@ -79,6 +94,7 @@ class NzBankAccountValidator
79
94
  return false unless account_base_number
80
95
  return false unless account_suffix
81
96
  return false unless valid_modulo?
97
+
82
98
  true
83
99
  end
84
100
 
@@ -88,35 +104,33 @@ class NzBankAccountValidator
88
104
  BANKS.key?(bank_id)
89
105
  end
90
106
 
91
- def bank_definition
92
- BANKS[bank_id]
93
- end
94
-
95
107
  def valid_bank_branch?
96
108
  return false unless bank_definition
97
109
  return false unless bank_branch
98
110
 
99
- bank_definition.ranges.any? do |range|
100
- range.include?(bank_branch)
101
- end
111
+ bank_definition.include?(bank_branch)
102
112
  end
103
113
 
104
114
  def valid_modulo?
105
115
  (checksum % algo[CHECKSUM_DIGITS]).zero?
106
116
  end
107
117
 
108
- def algo_code
109
- # If the account base number is below 00990000 then apply algorithm A
110
- # Otherwise apply algorithm B.
111
- bank_definition.algo || (account_base_number < ACCOUNT_BASE_NUMBER_CUTOFF ? :a : :b)
118
+ def bank_definition
119
+ BANKS[bank_id]
112
120
  end
113
121
 
114
122
  def algo
115
123
  ALGOS[algo_code]
116
124
  end
117
125
 
126
+ def algo_code
127
+ # If the account base number is below 00990000 then apply algorithm A
128
+ # Otherwise apply algorithm B.
129
+ bank_definition.algo || (account_base_number < ACCOUNT_BASE_NUMBER_CUTOFF ? :a : :b)
130
+ end
131
+
118
132
  def number_for_checksum
119
- format('%02d%04d%08d%04d', bank_id, bank_branch, account_base_number, account_suffix)
133
+ format("%02d%04d%08d%04d", bank_id, bank_branch, account_base_number, account_suffix)
120
134
  end
121
135
 
122
136
  def checksum
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  class NzBankAccountValidator
2
- VERSION = '1.0.0'.freeze
4
+ VERSION = "1.1.0"
3
5
  end
@@ -1,24 +1,28 @@
1
- # coding: utf-8
2
- lib = File.expand_path('../lib', __FILE__)
1
+ # frozen_string_literal: true
2
+
3
+ lib = File.expand_path("lib", __dir__)
3
4
  $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
- require 'nz_bank_account_validator/version'
5
+ require "nz_bank_account_validator/version"
5
6
 
6
7
  Gem::Specification.new do |spec|
7
- spec.name = 'nz_bank_account_validator'
8
+ spec.name = "nz_bank_account_validator"
8
9
  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'
10
+ spec.authors = ["Steve Hoeksema", "Eaden McKee"]
11
+ spec.email = ["steve@kotiri.com"]
12
+ spec.summary = "Validate a New Zealand bank account number according to IRD specifications"
13
+ spec.description = "Validate a New Zealand bank account number according to IRD specifications"
14
+ spec.homepage = "https://github.com/steveh/nz_bank_account_validator"
15
+ spec.license = "MIT"
15
16
  spec.files = `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
16
- spec.bindir = 'exe'
17
+ spec.bindir = "exe"
17
18
  spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
18
- spec.require_paths = ['lib']
19
+ spec.require_paths = ["lib"]
19
20
 
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'
21
+ spec.add_development_dependency "bundler"
22
+ spec.add_development_dependency "rake"
23
+ spec.add_development_dependency "rspec"
24
+ spec.add_development_dependency "rubocop"
25
+ spec.add_development_dependency "rubocop-performance"
26
+ spec.add_development_dependency "rubocop-rspec"
27
+ spec.add_development_dependency "simplecov"
24
28
  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: 1.0.0
4
+ version: 1.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Steve Hoeksema
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: exe
11
11
  cert_chain: []
12
- date: 2016-08-30 00:00:00.000000000 Z
12
+ date: 2019-06-03 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: bundler
@@ -54,7 +54,49 @@ dependencies:
54
54
  - !ruby/object:Gem::Version
55
55
  version: '0'
56
56
  - !ruby/object:Gem::Dependency
57
- name: codeclimate-test-reporter
57
+ name: rubocop
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'
70
+ - !ruby/object:Gem::Dependency
71
+ name: rubocop-performance
72
+ requirement: !ruby/object:Gem::Requirement
73
+ requirements:
74
+ - - ">="
75
+ - !ruby/object:Gem::Version
76
+ version: '0'
77
+ type: :development
78
+ prerelease: false
79
+ version_requirements: !ruby/object:Gem::Requirement
80
+ requirements:
81
+ - - ">="
82
+ - !ruby/object:Gem::Version
83
+ version: '0'
84
+ - !ruby/object:Gem::Dependency
85
+ name: rubocop-rspec
86
+ requirement: !ruby/object:Gem::Requirement
87
+ requirements:
88
+ - - ">="
89
+ - !ruby/object:Gem::Version
90
+ version: '0'
91
+ type: :development
92
+ prerelease: false
93
+ version_requirements: !ruby/object:Gem::Requirement
94
+ requirements:
95
+ - - ">="
96
+ - !ruby/object:Gem::Version
97
+ version: '0'
98
+ - !ruby/object:Gem::Dependency
99
+ name: simplecov
58
100
  requirement: !ruby/object:Gem::Requirement
59
101
  requirements:
60
102
  - - ">="
@@ -76,6 +118,7 @@ extra_rdoc_files: []
76
118
  files:
77
119
  - ".gitignore"
78
120
  - ".rspec"
121
+ - ".rubocop.yml"
79
122
  - ".travis.yml"
80
123
  - CHANGELOG.txt
81
124
  - Gemfile
@@ -106,8 +149,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
106
149
  - !ruby/object:Gem::Version
107
150
  version: '0'
108
151
  requirements: []
109
- rubyforge_project:
110
- rubygems_version: 2.5.1
152
+ rubygems_version: 3.0.3
111
153
  signing_key:
112
154
  specification_version: 4
113
155
  summary: Validate a New Zealand bank account number according to IRD specifications