banktools-gb 0.5.0 → 0.13.1

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
- SHA1:
3
- metadata.gz: c0f3e7f61bc8d6f56034536be0c064e6cf1f7d18
4
- data.tar.gz: bb3a03b154524de3daed3de0d75513236b4541c8
2
+ SHA256:
3
+ metadata.gz: 8f241c891a2df2eb6956201979b16081156a886ca681486b1eeb66756275ba31
4
+ data.tar.gz: '0975475a825a66dc1b6653a17dd9fa8baa55dd9eac1866c8e140d31590caf62a'
5
5
  SHA512:
6
- metadata.gz: 9a57461e8877d93410799c501e87d06cd995d9c92519f29731d3fdcef79c3450d43a0b23f2f4a0d8a149d5d7f9248ee711b15f7731de935855d51372abbf470a
7
- data.tar.gz: f7e80fe6f3758b54ab86cd6f452172537fa0f684517313cce0b619a8b84b40e68824b1a201a6295695c8f7a46487dc14e5a320e5d5ac4ace2f909f4759b9e160
6
+ metadata.gz: 1823f38ba139459d6dfde4d1732f14d9e7df62c77b99bede06de3d910a3df70a8df47c2f0e76bba5ea28f93061894499cc6edff816548d9eff0f323774895607
7
+ data.tar.gz: b89460ed009cd2c14d3c41ab527a183c30bc2a60413216ebce426d7e4d573ef0d7ae624ad1b0e68748faf331819e4e27fc28b518e276e63f09fbf8db430e6a27
@@ -0,0 +1,26 @@
1
+ name: Ruby CI
2
+
3
+ on:
4
+ push:
5
+ branches: [ master ]
6
+ pull_request:
7
+ branches: [ master ]
8
+
9
+ jobs:
10
+ test:
11
+
12
+ runs-on: ubuntu-latest
13
+
14
+ strategy:
15
+ matrix:
16
+ ruby-version: ["3.0", "2.7", "2.6", "2.5"]
17
+
18
+ steps:
19
+ - uses: actions/checkout@v2
20
+ - name: Set up Ruby ${{ matrix.ruby-version }}
21
+ uses: ruby/setup-ruby@ae9cb3b565e36682a2c6045e4f664388da4c73aa
22
+ with:
23
+ ruby-version: ${{ matrix.ruby-version }}
24
+ bundler-cache: true # runs 'bundle install' and caches installed gems automatically
25
+ - name: Run tests
26
+ run: bundle exec rake
data/.rubocop.yml ADDED
@@ -0,0 +1,5 @@
1
+ AllCops:
2
+ Exclude:
3
+ - "tmp/**/*"
4
+ inherit_gem:
5
+ barsoom_utils: shared_rubocop.yml
data/Gemfile CHANGED
@@ -4,3 +4,8 @@ source "https://rubygems.org"
4
4
  gemspec
5
5
 
6
6
  gem "uk_account_validator", github: "ball-hayden/uk_account_validator"
7
+
8
+ group :development do
9
+ gem "barsoom_utils", github: "barsoom/barsoom_utils"
10
+ gem "rubocop"
11
+ end
data/README.md CHANGED
@@ -1,35 +1,44 @@
1
1
  # United Kingdom bank tools
2
2
 
3
- [![Build Status](https://travis-ci.org/barsoom/banktools-gb.svg?branch=master)](https://travis-ci.org/barsoom/banktools-gb)
3
+ [![Ruby CI](https://github.com/barsoom/banktools-gb/actions/workflows/ci.yml/badge.svg)](https://github.com/barsoom/banktools-gb/actions/workflows/ci.yml)
4
4
 
5
- Ruby gem to validate United Kingdom bank account numbers.
5
+ Ruby gem to validate United Kingdom sort codes and bank account numbers.
6
+
7
+ When in doubt, this library aims to err on the side of allowing too much.
6
8
 
7
9
  If we got anything wrong, please file an issue or contribute a fix yourself.
8
10
 
9
11
  ## Usage
10
12
 
11
- account = BankTools::GB::AccountNumberWithSortCode.new(account_number: "31926819", sort_code: "60-16-13")
12
- account.valid? # => true
13
- account.errors # => []
13
+ ```ruby
14
+ # Sort code
15
+
16
+ sort_code = BankTools::GB::SortCode.new("60-16-13")
17
+ sort_code.valid? # => true
18
+ sort_code.errors # => []
19
+
20
+ bad_sort_code = BankTools::GB::SortCode.new("1X")
21
+ bad_sort_code.valid? # => false
22
+ bad_sort_code.errors # => [ :too_short, :invalid_characters ]
14
23
 
15
- bad_account = BankTools::GB::AccountNumberWithSortCode.new(account_number: "1", sort_code: "")
16
- bad_account.valid? # => false
17
- bad_account.errors # => [:account_number_is_too_short]
24
+ # Account
18
25
 
19
- # Error codes
26
+ account = BankTools::GB::Account.new("31926819")
27
+ account.valid? # => true
28
+ account.errors # => []
20
29
 
21
- BankTools::GB::Errors::ACCOUNT_NUMBER_IS_TOO_SHORT # => :account_number_is_too_short
22
- BankTools::GB::Errors::ACCOUNT_NUMBER_IS_TOO_LONG # => :account_number_is_too_long
23
- BankTools::GB::Errors::SORT_CODE_WITH_WRONG_LENGTH # => :sort_code_with_wrong_length
24
- BankTools::GB::Errors::ACCOUNT_NUMBER_WITH_INVALID_CHARACTERS # => :account_number_with_invalid_characters
25
- BankTools::GB::Errors::SORT_CODE_WITH_INVALID_CHARACTERS # => :sort_code_with_invalid_characters
26
- BankTools::GB::Errors::ACCOUNT_NUMBER_DOES_NOT_MATCH_SORT_CODE # => :account_number_does_not_match_sort_code
30
+ bad_account = BankTools::GB::Account.new("1")
31
+ bad_account.valid? # => false
32
+ bad_account.errors # => [ :too_short ]
33
+ ```
27
34
 
28
35
  ## Installation
29
36
 
30
37
  Add this line to your application's Gemfile:
31
38
 
32
- gem "banktools-gb"
39
+ ```ruby
40
+ gem "banktools-gb"
41
+ ```
33
42
 
34
43
  And then execute:
35
44
 
@@ -46,18 +55,13 @@ Or install it yourself as:
46
55
 
47
56
  ## Also see
48
57
 
49
- * [BankTools::SE (Swedish)](https://github.com/barsoom/banktools-se)
50
- * [BankTools::DE (German)](https://github.com/barsoom/banktools-de)
51
- * [BankTools::DK (German)](https://github.com/barsoom/banktools-dk)
58
+ * [Our other BankTools](https://github.com/barsoom?q=banktools)
59
+ * [BanklineCsvImportFile](https://github.com/barsoom/bankline_csv_import_file)
52
60
 
53
61
  ## Credits
54
62
 
55
63
  * [Hayden Ball](https://github.com/ball-hayden) for creating [UkAccountValidator](https://github.com/ball-hayden/uk_account_validator) that we base this gem on.
56
64
 
57
- ## Contributing
58
-
59
- Bug reports and pull requests are welcome on GitHub at https://github.com/[USERNAME]/banktools-gb.
60
-
61
65
  ## License
62
66
 
63
67
  The gem is available as open source under the terms of the [MIT License](http://opensource.org/licenses/MIT).
data/banktools-gb.gemspec CHANGED
@@ -5,9 +5,9 @@ require "banktools-gb/version"
5
5
 
6
6
  Gem::Specification.new do |spec|
7
7
  spec.name = "banktools-gb"
8
- spec.version = Banktools::Gb::VERSION
9
- spec.authors = ["Tomas Skogberg"]
10
- spec.email = ["tomas@auctionet.com"]
8
+ spec.version = BankTools::GB::VERSION
9
+ spec.authors = [ "Tomas Skogberg" ]
10
+ spec.email = [ "tomas@auctionet.com" ]
11
11
 
12
12
  spec.summary = %q{Validate and normalise United Kingdom bank account numbers.}
13
13
  spec.homepage = "https://github.com/barsoom/banktools-gb"
@@ -16,12 +16,12 @@ Gem::Specification.new do |spec|
16
16
  spec.files = `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
17
17
  spec.bindir = "exe"
18
18
  spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
19
- spec.require_paths = ["lib"]
19
+ spec.require_paths = [ "lib" ]
20
+ spec.metadata = { "rubygems_mfa_required" => "true" }
20
21
 
21
- spec.add_dependency "uk_account_validator", "~> 0"
22
- spec.add_dependency "attr_extras", "~> 5"
22
+ spec.add_dependency "attr_extras"
23
23
 
24
- spec.add_development_dependency "bundler", "~> 1"
25
- spec.add_development_dependency "rake", "~> 11"
24
+ spec.add_development_dependency "bundler", ">= 1"
25
+ spec.add_development_dependency "rake", ">= 12.3.3"
26
26
  spec.add_development_dependency "rspec", "~> 3"
27
27
  end
@@ -0,0 +1,43 @@
1
+ require "attr_extras/explicit"
2
+ require "banktools-gb/errors"
3
+
4
+ module BankTools
5
+ module GB
6
+ class Account
7
+ extend AttrExtras.mixin
8
+
9
+ # Officially, bank accounts in the UK can be between 6 and 10 digits, but
10
+ # the standard is 8, and any system that receives them will require them to
11
+ # be zero-padded. Customers should be used to prepend zeroes, and it should not be an issue.
12
+ # If this becomes an issue, lets consider handling auto-zeropadding, but it is both
13
+ # less technical issues and easier to give feedback to the user if we enforce the 8 digit length rule.
14
+ LENGTH = 8
15
+
16
+ pattr_initialize :original_value
17
+
18
+ def valid?
19
+ errors.none?
20
+ end
21
+
22
+ def errors
23
+ errors = []
24
+
25
+ errors << Errors::ACCOUNT_TOO_SHORT if compacted_value.length < LENGTH
26
+ errors << Errors::ACCOUNT_TOO_LONG if compacted_value.length > LENGTH
27
+ errors << Errors::ACCOUNT_INVALID_CHARACTERS if any_non_digits?
28
+
29
+ errors
30
+ end
31
+
32
+ def compacted_value
33
+ original_value.to_s.gsub(/[\s-]/, "")
34
+ end
35
+
36
+ private
37
+
38
+ def any_non_digits?
39
+ compacted_value.match(/\D/)
40
+ end
41
+ end
42
+ end
43
+ end
@@ -1,12 +1,12 @@
1
- module Banktools
1
+ module BankTools
2
2
  module GB
3
3
  module Errors
4
- ACCOUNT_NUMBER_IS_TOO_SHORT = :account_number_is_too_short
5
- ACCOUNT_NUMBER_IS_TOO_LONG = :account_number_is_too_long
6
- SORT_CODE_WITH_WRONG_LENGTH = :sort_code_with_wrong_length
7
- SORT_CODE_WITH_INVALID_CHARACTERS = :sort_code_with_invalid_characters
8
- ACCOUNT_NUMBER_WITH_INVALID_CHARACTERS = :account_number_with_invalid_characters
9
- ACCOUNT_NUMBER_DOES_NOT_MATCH_SORT_CODE = :account_number_does_not_match_sort_code
4
+ ACCOUNT_TOO_SHORT = :account_too_short
5
+ ACCOUNT_TOO_LONG = :account_too_long
6
+ SORT_CODE_TOO_SHORT = :sort_code_too_short
7
+ SORT_CODE_TOO_LONG = :sort_code_too_long
8
+ ACCOUNT_INVALID_CHARACTERS = :account_invalid_characters
9
+ SORT_CODE_INVALID_CHARACTERS = :sort_code_invalid_characters
10
10
  end
11
11
  end
12
12
  end
@@ -0,0 +1,38 @@
1
+ require "attr_extras/explicit"
2
+ require "banktools-gb/errors"
3
+
4
+ module BankTools
5
+ module GB
6
+ class SortCode
7
+ extend AttrExtras.mixin
8
+
9
+ LENGTH = 6
10
+
11
+ pattr_initialize :original_value
12
+
13
+ def valid?
14
+ errors.none?
15
+ end
16
+
17
+ def errors
18
+ errors = []
19
+
20
+ errors << Errors::SORT_CODE_TOO_SHORT if compacted_value.length < LENGTH
21
+ errors << Errors::SORT_CODE_TOO_LONG if compacted_value.length > LENGTH
22
+ errors << Errors::SORT_CODE_INVALID_CHARACTERS if any_non_digits?
23
+
24
+ errors
25
+ end
26
+
27
+ def compacted_value
28
+ original_value.to_s.gsub(/[\s-]/, "")
29
+ end
30
+
31
+ private
32
+
33
+ def any_non_digits?
34
+ compacted_value.match(/\D/)
35
+ end
36
+ end
37
+ end
38
+ end
@@ -1,5 +1,5 @@
1
- module Banktools
2
- module Gb
3
- VERSION = "0.5.0"
1
+ module BankTools
2
+ module GB
3
+ VERSION = "0.13.1"
4
4
  end
5
5
  end
data/lib/banktools-gb.rb CHANGED
@@ -1,5 +1,3 @@
1
- require "uk_account_validator"
2
-
3
1
  require "banktools-gb/version"
4
- require "banktools-gb/account_number_with_sort_code"
5
- require "banktools-gb/errors"
2
+ require "banktools-gb/sort_code"
3
+ require "banktools-gb/account"
metadata CHANGED
@@ -1,71 +1,57 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: banktools-gb
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.5.0
4
+ version: 0.13.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Tomas Skogberg
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2016-06-29 00:00:00.000000000 Z
11
+ date: 2021-11-19 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
- name: uk_account_validator
14
+ name: attr_extras
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - "~>"
17
+ - - ">="
18
18
  - !ruby/object:Gem::Version
19
19
  version: '0'
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
- - - "~>"
24
+ - - ">="
25
25
  - !ruby/object:Gem::Version
26
26
  version: '0'
27
- - !ruby/object:Gem::Dependency
28
- name: attr_extras
29
- requirement: !ruby/object:Gem::Requirement
30
- requirements:
31
- - - "~>"
32
- - !ruby/object:Gem::Version
33
- version: '5'
34
- type: :runtime
35
- prerelease: false
36
- version_requirements: !ruby/object:Gem::Requirement
37
- requirements:
38
- - - "~>"
39
- - !ruby/object:Gem::Version
40
- version: '5'
41
27
  - !ruby/object:Gem::Dependency
42
28
  name: bundler
43
29
  requirement: !ruby/object:Gem::Requirement
44
30
  requirements:
45
- - - "~>"
31
+ - - ">="
46
32
  - !ruby/object:Gem::Version
47
33
  version: '1'
48
34
  type: :development
49
35
  prerelease: false
50
36
  version_requirements: !ruby/object:Gem::Requirement
51
37
  requirements:
52
- - - "~>"
38
+ - - ">="
53
39
  - !ruby/object:Gem::Version
54
40
  version: '1'
55
41
  - !ruby/object:Gem::Dependency
56
42
  name: rake
57
43
  requirement: !ruby/object:Gem::Requirement
58
44
  requirements:
59
- - - "~>"
45
+ - - ">="
60
46
  - !ruby/object:Gem::Version
61
- version: '11'
47
+ version: 12.3.3
62
48
  type: :development
63
49
  prerelease: false
64
50
  version_requirements: !ruby/object:Gem::Requirement
65
51
  requirements:
66
- - - "~>"
52
+ - - ">="
67
53
  - !ruby/object:Gem::Version
68
- version: '11'
54
+ version: 12.3.3
69
55
  - !ruby/object:Gem::Dependency
70
56
  name: rspec
71
57
  requirement: !ruby/object:Gem::Requirement
@@ -87,9 +73,10 @@ executables: []
87
73
  extensions: []
88
74
  extra_rdoc_files: []
89
75
  files:
76
+ - ".github/workflows/ci.yml"
90
77
  - ".gitignore"
91
78
  - ".rspec"
92
- - ".travis.yml"
79
+ - ".rubocop.yml"
93
80
  - Gemfile
94
81
  - LICENSE.txt
95
82
  - README.md
@@ -98,13 +85,15 @@ files:
98
85
  - bin/console
99
86
  - bin/setup
100
87
  - lib/banktools-gb.rb
101
- - lib/banktools-gb/account_number_with_sort_code.rb
88
+ - lib/banktools-gb/account.rb
102
89
  - lib/banktools-gb/errors.rb
90
+ - lib/banktools-gb/sort_code.rb
103
91
  - lib/banktools-gb/version.rb
104
92
  homepage: https://github.com/barsoom/banktools-gb
105
93
  licenses:
106
94
  - MIT
107
- metadata: {}
95
+ metadata:
96
+ rubygems_mfa_required: 'true'
108
97
  post_install_message:
109
98
  rdoc_options: []
110
99
  require_paths:
@@ -120,8 +109,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
120
109
  - !ruby/object:Gem::Version
121
110
  version: '0'
122
111
  requirements: []
123
- rubyforge_project:
124
- rubygems_version: 2.5.1
112
+ rubygems_version: 3.2.28
125
113
  signing_key:
126
114
  specification_version: 4
127
115
  summary: Validate and normalise United Kingdom bank account numbers.
data/.travis.yml DELETED
@@ -1,6 +0,0 @@
1
- language: ruby
2
- rvm:
3
- - 2.3.1
4
- - 2.2.0
5
- - 2.1.0
6
- - 2.0.0
@@ -1,65 +0,0 @@
1
- require "attr_extras/explicit"
2
- require "banktools-gb/errors"
3
-
4
- module BankTools
5
- module GB
6
- class AccountNumberWithSortCode
7
- extend AttrExtras.mixin
8
-
9
- ACCOUNT_NUMBER_MIN_LENGTH = 6
10
- ACCOUNT_NUMBER_MAX_LENGTH = 10
11
- SORT_CODE_LENGTH = 6
12
-
13
- pattr_initialize [ :account_number, :sort_code ]
14
-
15
- def valid?
16
- errors.none?
17
- end
18
-
19
- def errors
20
- errors = []
21
- errors << :account_number_is_too_short if account_number_is_too_short?
22
- errors << :account_number_is_too_long if account_number_is_too_long?
23
- errors << :sort_code_with_wrong_length if sort_code_with_wrong_length?
24
- errors << :sort_code_with_invalid_characters if any_non_digits?(compact_sort_code)
25
- errors << :account_number_with_invalid_characters if any_non_digits?(compact_account_number)
26
- errors << :account_number_does_not_match_sort_code unless valid_account_number_with_sort_code?
27
- errors
28
- end
29
-
30
- private
31
-
32
- def valid_account_number_with_sort_code?
33
- UkAccountValidator::Validator.new(compact_account_number, compact_sort_code).valid?
34
- end
35
-
36
- def sort_code_with_wrong_length?
37
- compact_sort_code.length != SORT_CODE_LENGTH
38
- end
39
-
40
- def account_number_is_too_short?
41
- compact_account_number.length < ACCOUNT_NUMBER_MIN_LENGTH
42
- end
43
-
44
- def account_number_is_too_long?
45
- compact_account_number.length > ACCOUNT_NUMBER_MAX_LENGTH
46
- end
47
-
48
- def any_non_digits?(number)
49
- number.match(/\D/)
50
- end
51
-
52
- def compact_sort_code
53
- compact(sort_code)
54
- end
55
-
56
- def compact_account_number
57
- compact(account_number)
58
- end
59
-
60
- def compact(number)
61
- number.gsub(/[\s-]/, "")
62
- end
63
- end
64
- end
65
- end