simple_form-bank_account_number 1.1.0 → 2.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: 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