simple_form-bank_account_number 1.1.0 → 2.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: 89400455ffe9eb2f250fbd14802352f6c89e3ec5
4
- data.tar.gz: a3eea1f96cceda733ae7f0bd2d59d966459f956d
3
+ metadata.gz: 39782379daf3648e7540fe25b5ac71379d3c77c4
4
+ data.tar.gz: d2578ac282f742c95490b2a2b8a7f5fde99c2af8
5
5
  SHA512:
6
- metadata.gz: 68828827190438e6a1d99bffdddbf15dc3e551f850da24b310ff837f53a0fe0ccf502252a43b0dcf5139078ef3f355b4fb6d02bef1fe432e1ee69304cece0809
7
- data.tar.gz: b8ad4bdcb94676adf92f65e9f545cbce636ef716e84bb3d208cc0bb33ce28684c60561a1d43c4749e4a870cf29478c0536b4ab29bfee69e730b2e453ef5bd67c
6
+ metadata.gz: a88c957d2c044502f1c20e140e361261673c9936102608c2f0393679f3b5b38c64d5d5b776349c1d83632f17afd9c558d387cf91395c9d4fa07b92287bffc6fc
7
+ data.tar.gz: 9bfd107bf9076eefd508c98fbd51036d557ce76ae2463ca49ee9c7baa93c49965ddd7aa3f1caaada34cc802a368a950b513d4df8cc8c776a5b0a021611ace3b1
data/.rspec ADDED
@@ -0,0 +1,2 @@
1
+ --color
2
+ --require spec_helper
data/.rubocop.yml CHANGED
@@ -5,7 +5,7 @@ Metrics/MethodLength:
5
5
  Enabled: false
6
6
 
7
7
  Metrics/LineLength:
8
- Max: 120
8
+ Max: 160
9
9
  Exclude: [spec/**/*.rb]
10
10
 
11
11
  Lint/AssignmentInCondition:
@@ -3,31 +3,32 @@ require "simple_form/bank_account_number/formatter"
3
3
 
4
4
  module SimpleForm
5
5
  module Inputs
6
- class BankAccountNumberInput < NumericInput
6
+ class BankAccountNumberInput < StringInput
7
7
  def input
8
8
  country = options.delete(:country) || raise(ArgumentError, "You must set the :country key.")
9
9
  full_number = options.fetch(:value, "")
10
- parts = BankAccountNumber::Formatter.formatted_bank_account_number(full_number, country).to_h.values
11
- format = BankAccountNumber::Formatter.number_format(country)
10
+ number_parts = SimpleForm::BankAccountNumber::Formatter.formatted_bank_account_number(full_number, country).parts
11
+ format = SimpleForm::BankAccountNumber::Format.for_country(country)
12
12
 
13
- format.fetch(:parts).map do |part|
13
+ format.parts.map do |part|
14
14
  input_html_options.delete(:country) # don't include it in the markup
15
15
 
16
+ input_html_options[:type] = "text"
16
17
  input_html_options[:required] = "required"
17
18
  input_html_options[:autocomplete] = "off"
18
19
  input_html_options[:name] = "#{lookup_model_names.join('_')}[#{reflection_or_attribute_name}][]"
19
- input_html_options[:pattern] = "^#{part.fetch(:format).source}$"
20
- input_html_options[:title] = part.fetch(:title)
20
+ input_html_options[:pattern] = "^#{part.format.source}$"
21
+ input_html_options[:title] = part.title
21
22
  input_html_options[:style] = "width: auto; display: inline; margin-right: .2em"
22
- input_html_options["data-label"] = part.fetch(:label)
23
- input_html_options["data-multiline"] = format.fetch(:multiline)
23
+ input_html_options["data-label"] = part.label
24
+ input_html_options["data-multiline"] = format.multiline
24
25
 
25
26
  # Twitter Bootstrap tooltips
26
27
  input_html_options["data-toggle"] = "tooltip"
27
- input_html_options["data-original-title"] = part.fetch(:title)
28
+ input_html_options["data-original-title"] = part.title
28
29
  input_html_options["data-placement"] = "bottom"
29
30
 
30
- if length = part.fetch(:format).source.scan(/\b\d}/).map(&:to_i).max
31
+ if length = part.format.source.scan(/\b\d}/).map(&:to_i).max
31
32
  input_html_options[:size] = length
32
33
  input_html_options[:maxlength] = length
33
34
  else
@@ -35,7 +36,7 @@ module SimpleForm
35
36
  input_html_options[:maxlength] = nil
36
37
  end
37
38
 
38
- input_html_options[:value] = parts.shift
39
+ input_html_options[:value] = number_parts.shift
39
40
 
40
41
  super
41
42
  end.join
@@ -1,44 +1,75 @@
1
1
  require "simple_form"
2
+ require "virtus"
2
3
 
3
4
  module SimpleForm
4
5
  module BankAccountNumber
5
- COUNTRIES = {
6
- "AU" => {
7
- parts: [
8
- { label: "BSB Number", title: "6 digit BSB number", format: /\d{6}/ },
9
- { label: "Account Number", title: "6 to 9 digit account number", format: /\d{6,9}/ },
10
- ],
11
- multiline: true,
12
- },
13
- "CA" => {
14
- parts: [
15
- { label: "Transit Number", title: "8 or 9 digit transit number", format: /\d{8,9}/ },
16
- { label: "Account Number", title: "7 to 12 digit account number", format: /\d{7,12}/ },
17
- ],
18
- multiline: true,
19
- },
20
- "GB" => {
21
- parts: [
22
- { label: "Sort Code", title: "6 digit sort code", format: /\d{6}/ },
23
- { label: "Account Number", title: "7 to 10 digit account number", format: /\d{7,10}/ },
24
- ],
25
- multiline: true,
26
- },
27
- "NZ" => {
28
- parts: [
29
- { label: "Bank Number", title: "2 digit bank number", format: /\d{2}/ },
30
- { label: "Branch Number", title: "4 digit branch number", format: /\d{4}/ },
31
- { label: "Account Number", title: "7 digit account number", format: /\d{7}/ },
32
- { label: "Suffix", title: "2 or 3 digit suffix", format: /\d{2,3}/ },
33
- ],
34
- multiline: false,
35
- },
36
- nil => { # NOTE: default format
37
- parts: [
38
- { label: "Account Number", title: "account number", format: /[A-Z0-9]+/ }
39
- ],
40
- multiline: false,
41
- }
42
- }.freeze
6
+ module ValueObject
7
+ def self.included(base)
8
+ base.instance_eval do
9
+ include Virtus.model(strict: true)
10
+ private :attributes=
11
+ end
12
+ end
13
+ end
14
+
15
+ # A partial bank account number
16
+ class Part
17
+ include ValueObject
18
+
19
+ attribute :label, String
20
+ attribute :title, String
21
+ attribute :format, Regexp
22
+ end
23
+
24
+ # A full bank account number format
25
+ class Format
26
+ include ValueObject
27
+
28
+ attribute :parts, Array[Part]
29
+ attribute :multiline, Boolean
30
+
31
+ def self.for_country(alpha2)
32
+ COUNTRIES[alpha2.upcase] || COUNTRIES[nil]
33
+ end
34
+
35
+ COUNTRIES = {
36
+ "AU" => Format.new(
37
+ parts: [
38
+ { label: "BSB Number", title: "6 digit BSB number", format: /\d{6}/ },
39
+ { label: "Account Number", title: "6 to 9 digit account number", format: /\d{6,9}/ },
40
+ ],
41
+ multiline: true,
42
+ ),
43
+ "CA" => Format.new(
44
+ parts: [
45
+ { label: "Transit Number", title: "8 or 9 digit transit number", format: /\d{8,9}/ },
46
+ { label: "Account Number", title: "7 to 12 digit account number", format: /\d{7,12}/ },
47
+ ],
48
+ multiline: true,
49
+ ),
50
+ "GB" => Format.new(
51
+ parts: [
52
+ { label: "Sort Code", title: "6 digit sort code", format: /\d{6}/ },
53
+ { label: "Account Number", title: "7 to 10 digit account number", format: /\d{7,10}/ },
54
+ ],
55
+ multiline: true,
56
+ ),
57
+ "NZ" => Format.new(
58
+ parts: [
59
+ { label: "Bank Number", title: "2 digit bank number", format: /\d{2}/ },
60
+ { label: "Branch Number", title: "4 digit branch number", format: /\d{4}/ },
61
+ { label: "Account Number", title: "7 digit account number", format: /\d{7}/ },
62
+ { label: "Suffix", title: "2 or 3 digit suffix", format: /\d{2,3}/ },
63
+ ],
64
+ multiline: false,
65
+ ),
66
+ nil => Format.new( # NOTE: default format
67
+ parts: [
68
+ { label: "Account Number", title: "account number", format: /[A-Z0-9]+/ }
69
+ ],
70
+ multiline: false,
71
+ )
72
+ }.freeze
73
+ end
43
74
  end
44
75
  end
@@ -4,21 +4,15 @@ require "simple_form/bank_account_number/countries"
4
4
  module SimpleForm
5
5
  module BankAccountNumber
6
6
  class Formatter
7
- def self.number_format(country)
8
- BankAccountNumber::COUNTRIES.fetch(
9
- country.upcase, BankAccountNumber::COUNTRIES[nil]
10
- )
11
- end
12
-
13
7
  def self.formatted_bank_account_number(full_number, country)
14
8
  full_number = full_number.to_s.dup
15
- format = number_format(country)
9
+ format = Format.for_country(country)
16
10
 
17
- fields = format.fetch(:parts).inject({}) do |hash, part|
18
- length = part.fetch(:format).source.scan(/\b\d}/).map(&:to_i).max
11
+ fields = format.parts.inject({}) do |hash, part|
12
+ length = part.format.source.scan(/\b\d}/).map(&:to_i).max
19
13
  field = full_number.slice!(0, length || full_number.length)
20
14
 
21
- hash.merge!(part.fetch(:label) => field)
15
+ hash.merge!(part.label => field)
22
16
  end
23
17
 
24
18
  unless full_number.empty?
@@ -49,8 +43,12 @@ module SimpleForm
49
43
  @fields
50
44
  end
51
45
 
46
+ def parts
47
+ @fields.values
48
+ end
49
+
52
50
  def multiline?
53
- self.class.number_format(@country).fetch(:multiline)
51
+ Format.for_country(@country).multiline
54
52
  end
55
53
  end
56
54
  end
@@ -4,7 +4,7 @@ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
4
 
5
5
  Gem::Specification.new do |spec|
6
6
  spec.name = "simple_form-bank_account_number"
7
- spec.version = "1.1.0"
7
+ spec.version = "2.0.0"
8
8
  spec.authors = ["Cédric Félizard"]
9
9
  spec.email = ["cedric@felizard.fr"]
10
10
  spec.description = "A SimpleForm input field for bank account numbers"
@@ -17,10 +17,15 @@ Gem::Specification.new do |spec|
17
17
  spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
18
18
  spec.require_paths = ["lib"]
19
19
 
20
- spec.add_dependency "simple_form", "~> 2.1.0"
20
+ spec.add_dependency "simple_form", "~> 3.0"
21
+ spec.add_dependency "virtus", "~> 1.0"
21
22
 
22
23
  spec.add_development_dependency "rake"
23
24
  spec.add_development_dependency "bundler"
24
25
  spec.add_development_dependency "rspec"
25
26
  spec.add_development_dependency "rubocop"
27
+
28
+ # XXX: actionpack 4.2 requires rails-html-sanitizer which has a soft dependency on Rails
29
+ # this breaks simple_form when testing without Rails
30
+ spec.add_development_dependency "actionpack", "~> 4.0.0"
26
31
  end
File without changes
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: simple_form-bank_account_number
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.1.0
4
+ version: 2.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Cédric Félizard
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-05-26 00:00:00.000000000 Z
11
+ date: 2015-08-15 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: simple_form
@@ -16,14 +16,28 @@ dependencies:
16
16
  requirements:
17
17
  - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: 2.1.0
19
+ version: '3.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
- version: 2.1.0
26
+ version: '3.0'
27
+ - !ruby/object:Gem::Dependency
28
+ name: virtus
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '1.0'
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '1.0'
27
41
  - !ruby/object:Gem::Dependency
28
42
  name: rake
29
43
  requirement: !ruby/object:Gem::Requirement
@@ -80,6 +94,20 @@ dependencies:
80
94
  - - ">="
81
95
  - !ruby/object:Gem::Version
82
96
  version: '0'
97
+ - !ruby/object:Gem::Dependency
98
+ name: actionpack
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - "~>"
102
+ - !ruby/object:Gem::Version
103
+ version: 4.0.0
104
+ type: :development
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - "~>"
109
+ - !ruby/object:Gem::Version
110
+ version: 4.0.0
83
111
  description: A SimpleForm input field for bank account numbers
84
112
  email:
85
113
  - cedric@felizard.fr
@@ -88,6 +116,7 @@ extensions: []
88
116
  extra_rdoc_files: []
89
117
  files:
90
118
  - ".gitignore"
119
+ - ".rspec"
91
120
  - ".rubocop.yml"
92
121
  - ".travis.yml"
93
122
  - Gemfile
@@ -100,6 +129,7 @@ files:
100
129
  - simple_form-bank_account_number.gemspec
101
130
  - spec/simple_form/bank_account_number/formatter_spec.rb
102
131
  - spec/simple_form/bank_account_number_spec.rb
132
+ - spec/spec_helper.rb
103
133
  homepage: https://github.com/buckybox/simple_form-bank_account_number
104
134
  licenses:
105
135
  - MIT
@@ -127,3 +157,4 @@ summary: Bank account number field for SimpleForm
127
157
  test_files:
128
158
  - spec/simple_form/bank_account_number/formatter_spec.rb
129
159
  - spec/simple_form/bank_account_number_spec.rb
160
+ - spec/spec_helper.rb