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 +4 -4
- data/.rspec +2 -0
- data/.rubocop.yml +1 -1
- data/lib/simple_form/bank_account_number.rb +12 -11
- data/lib/simple_form/bank_account_number/countries.rb +69 -38
- data/lib/simple_form/bank_account_number/formatter.rb +9 -11
- data/simple_form-bank_account_number.gemspec +7 -2
- data/spec/spec_helper.rb +0 -0
- metadata +35 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 39782379daf3648e7540fe25b5ac71379d3c77c4
|
4
|
+
data.tar.gz: d2578ac282f742c95490b2a2b8a7f5fde99c2af8
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: a88c957d2c044502f1c20e140e361261673c9936102608c2f0393679f3b5b38c64d5d5b776349c1d83632f17afd9c558d387cf91395c9d4fa07b92287bffc6fc
|
7
|
+
data.tar.gz: 9bfd107bf9076eefd508c98fbd51036d557ce76ae2463ca49ee9c7baa93c49965ddd7aa3f1caaada34cc802a368a950b513d4df8cc8c776a5b0a021611ace3b1
|
data/.rspec
ADDED
data/.rubocop.yml
CHANGED
@@ -3,31 +3,32 @@ require "simple_form/bank_account_number/formatter"
|
|
3
3
|
|
4
4
|
module SimpleForm
|
5
5
|
module Inputs
|
6
|
-
class BankAccountNumberInput <
|
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
|
-
|
11
|
-
format = BankAccountNumber::
|
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.
|
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.
|
20
|
-
input_html_options[:title] = part.
|
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.
|
23
|
-
input_html_options["data-multiline"] = format.
|
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.
|
28
|
+
input_html_options["data-original-title"] = part.title
|
28
29
|
input_html_options["data-placement"] = "bottom"
|
29
30
|
|
30
|
-
if length = part.
|
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] =
|
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
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
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 =
|
9
|
+
format = Format.for_country(country)
|
16
10
|
|
17
|
-
fields = format.
|
18
|
-
length = part.
|
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.
|
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
|
-
|
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 = "
|
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", "~>
|
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
|
data/spec/spec_helper.rb
ADDED
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:
|
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-
|
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:
|
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:
|
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
|