simple_form-bank_account_number 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
2
  SHA1:
3
- metadata.gz: 2188cdec0054eac3d21d6f8a3140a0f9583dc13f
4
- data.tar.gz: fbfcc9ff25ecda050792cf5e484b14fd2cda5738
3
+ metadata.gz: 89400455ffe9eb2f250fbd14802352f6c89e3ec5
4
+ data.tar.gz: a3eea1f96cceda733ae7f0bd2d59d966459f956d
5
5
  SHA512:
6
- metadata.gz: e3eb8e1be8822635d0b19754ff813e5e3dd00d3344d389d460dfa8ede534b76b57ff82cf0977e5f79741c45d19cdc7dc30b444f753a798082746266cb19873d6
7
- data.tar.gz: 088c58a15718874b6f7c72c22d5348e21ab6557a62d25cd867dd6403c4d07ac8a9120e9483f76d1405b04aab76e05175fb3561be9d91f5d2d4d89e3cc38b6c04
6
+ metadata.gz: 68828827190438e6a1d99bffdddbf15dc3e551f850da24b310ff837f53a0fe0ccf502252a43b0dcf5139078ef3f355b4fb6d02bef1fe432e1ee69304cece0809
7
+ data.tar.gz: b8ad4bdcb94676adf92f65e9f545cbce636ef716e84bb3d208cc0bb33ce28684c60561a1d43c4749e4a870cf29478c0536b4ab29bfee69e730b2e453ef5bd67c
data/.rubocop.yml ADDED
@@ -0,0 +1,45 @@
1
+ Metrics/AbcSize:
2
+ Enabled: false
3
+
4
+ Metrics/MethodLength:
5
+ Enabled: false
6
+
7
+ Metrics/LineLength:
8
+ Max: 120
9
+ Exclude: [spec/**/*.rb]
10
+
11
+ Lint/AssignmentInCondition:
12
+ Enabled: false
13
+
14
+ Lint/EndAlignment:
15
+ Enabled: false
16
+
17
+ Style/AccessModifierIndentation:
18
+ EnforcedStyle: outdent
19
+
20
+ Style/AndOr:
21
+ EnforcedStyle: conditionals
22
+
23
+ Style/ClassAndModuleChildren:
24
+ Enabled: false
25
+
26
+ Style/ElseAlignment:
27
+ Enabled: false
28
+
29
+ Style/IndentationWidth:
30
+ Enabled: false
31
+
32
+ Style/SignalException:
33
+ EnforcedStyle: only_raise
34
+
35
+ Style/StringLiterals:
36
+ EnforcedStyle: double_quotes
37
+
38
+ Style/SpecialGlobalVars:
39
+ Enabled: false
40
+
41
+ Style/TrailingComma:
42
+ Enabled: false
43
+
44
+ Style/Documentation:
45
+ Enabled: false
data/.travis.yml CHANGED
@@ -1,9 +1,5 @@
1
1
  language: ruby
2
2
  rvm:
3
- - 1.9.3
4
3
  - 2.0.0
5
- - 2.1.1
6
- notifications:
7
- email:
8
- on_success: always
9
- on_failure: always
4
+ - 2.1
5
+ - 2.2
data/Gemfile CHANGED
@@ -1,4 +1,4 @@
1
- source 'https://rubygems.org'
1
+ source "https://rubygems.org"
2
2
 
3
3
  # Specify your gem's dependencies in simple_form-bank_account_number.gemspec
4
4
  gemspec
data/LICENSE.txt CHANGED
@@ -1,4 +1,4 @@
1
- Copyright (c) 2013 Bucky Box Limited
1
+ Copyright (c) 2013-2015 Bucky Box Limited
2
2
 
3
3
  MIT License
4
4
 
data/README.md CHANGED
@@ -1,5 +1,9 @@
1
1
  # SimpleForm::BankAccountNumber
2
2
 
3
+ [![Build Status](https://travis-ci.org/buckybox/simple_form-bank_account_number.svg?branch=master)](https://travis-ci.org/buckybox/simple_form-bank_account_number)
4
+ [![Dependency Status](http://img.shields.io/gemnasium/buckybox/simple_form-bank_account_number.svg)](https://gemnasium.com/buckybox/simple_form-bank_account_number)
5
+ [![Gem Version](http://img.shields.io/gem/v/simple_form-bank_account_number.svg)](https://rubygems.org/gems/simple_form-bank_account_number)
6
+
3
7
  A [SimpleForm](https://github.com/plataformatec/simple_form) input field for bank account numbers.
4
8
 
5
9
  ## Usage
@@ -17,3 +21,6 @@ You probably want to concatenate them into one single number for your backend wi
17
21
 
18
22
  `params[:bank_deposit][:account_number] = params[:bank_deposit][:account_number].join`
19
23
 
24
+ ## License
25
+
26
+ MIT
data/Rakefile CHANGED
@@ -1,8 +1,11 @@
1
1
  require "bundler/gem_tasks"
2
- require "rspec/core/rake_task"
3
2
 
3
+ require "rspec/core/rake_task"
4
4
  RSpec::Core::RakeTask.new(:spec) do |t|
5
5
  t.ruby_opts = "-w"
6
6
  end
7
7
 
8
- task :default => :spec
8
+ require "rubocop/rake_task"
9
+ RuboCop::RakeTask.new
10
+
11
+ task default: [:rubocop, :spec]
@@ -1,46 +1,33 @@
1
1
  require "simple_form"
2
- require "simple_form/bank_account_number/countries"
3
- require "simple_form/bank_account_number/version"
2
+ require "simple_form/bank_account_number/formatter"
4
3
 
5
4
  module SimpleForm
6
5
  module Inputs
7
6
  class BankAccountNumberInput < NumericInput
8
- def self.formatted_bank_account_number(full_number, country)
9
- full_number = full_number.dup
10
-
11
- fields = number_format(country).map do |part|
12
- length = part[:format].source.scan(/\b\d}/).map(&:to_i).max
13
- full_number.slice!(0, length || full_number.length)
14
- end
15
-
16
- unless full_number.empty?
17
- raise ArgumentError, "format does not match (#{full_number.length} extra digits)"
18
- end
19
-
20
- fields.join("-")
21
- end
22
-
23
- # requires to set :country and :value
24
7
  def input
25
8
  country = options.delete(:country) || raise(ArgumentError, "You must set the :country key.")
26
- full_number = options.fetch(:value) || ""
27
- parts = self.class.formatted_bank_account_number(full_number, country).split("-").reverse
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)
12
+
13
+ format.fetch(:parts).map do |part|
14
+ input_html_options.delete(:country) # don't include it in the markup
28
15
 
29
- fields = self.class.number_format(country).map do |part|
30
16
  input_html_options[:required] = "required"
31
17
  input_html_options[:autocomplete] = "off"
32
- input_html_options[:name] = "#{lookup_model_names.join("_")}[#{reflection_or_attribute_name}][]"
33
- input_html_options[:pattern] = "^#{part[:format].source}$"
34
- input_html_options[:title] = part[:label]
18
+ 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)
35
21
  input_html_options[:style] = "width: auto; display: inline; margin-right: .2em"
36
- input_html_options.delete(:country) # don't include it in the markup
22
+ input_html_options["data-label"] = part.fetch(:label)
23
+ input_html_options["data-multiline"] = format.fetch(:multiline)
37
24
 
38
25
  # Twitter Bootstrap tooltips
39
26
  input_html_options["data-toggle"] = "tooltip"
40
- input_html_options["data-original-title"] = part[:label]
27
+ input_html_options["data-original-title"] = part.fetch(:title)
41
28
  input_html_options["data-placement"] = "bottom"
42
29
 
43
- if length = part[:format].source.scan(/\b\d}/).map(&:to_i).max
30
+ if length = part.fetch(:format).source.scan(/\b\d}/).map(&:to_i).max
44
31
  input_html_options[:size] = length
45
32
  input_html_options[:maxlength] = length
46
33
  else
@@ -48,21 +35,11 @@ module SimpleForm
48
35
  input_html_options[:maxlength] = nil
49
36
  end
50
37
 
51
- input_html_options[:value] = parts.pop
38
+ input_html_options[:value] = parts.shift
52
39
 
53
40
  super
54
- end
55
-
56
- fields.join
57
- end
58
-
59
- private
60
-
61
- def self.number_format(country)
62
- SimpleForm::BankAccountNumber::COUNTRIES[country.upcase] ||
63
- SimpleForm::BankAccountNumber::DEFAULT_FORMAT
41
+ end.join
64
42
  end
65
43
  end
66
44
  end
67
45
  end
68
-
@@ -1,29 +1,44 @@
1
+ require "simple_form"
2
+
1
3
  module SimpleForm
2
4
  module BankAccountNumber
3
5
  COUNTRIES = {
4
- "AU" => [
5
- { label: "6 digit BSB number", format: /\d{6}/ },
6
- { label: "6 to 9 digit account number", format: /\d{6,9}/ },
7
- ],
8
- "CA" => [
9
- { label: "8 or 9 digit transit number", format: /\d{8,9}/ },
10
- { label: "7 to 12 digit account number", format: /\d{7,12}/ },
11
- ],
12
- "GB" => [
13
- { label: "6 digit sort code", format: /\d{6}/ },
14
- { label: "7 to 10 digit account number", format: /\d{7,10}/ },
15
- ],
16
- "NZ" => [
17
- { label: "2 digit bank number", format: /\d{2}/ },
18
- { label: "4 digit branch number", format: /\d{4}/ },
19
- { label: "7 digit account number", format: /\d{7}/ },
20
- { label: "2 or 3 digit suffix", format: /\d{2,3}/ },
21
- ],
22
- }
23
-
24
- DEFAULT_FORMAT = [
25
- { label: "account number", format: /[A-Z0-9]+/ }
26
- ]
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
27
43
  end
28
44
  end
29
-
@@ -0,0 +1,57 @@
1
+ require "simple_form"
2
+ require "simple_form/bank_account_number/countries"
3
+
4
+ module SimpleForm
5
+ module BankAccountNumber
6
+ class Formatter
7
+ def self.number_format(country)
8
+ BankAccountNumber::COUNTRIES.fetch(
9
+ country.upcase, BankAccountNumber::COUNTRIES[nil]
10
+ )
11
+ end
12
+
13
+ def self.formatted_bank_account_number(full_number, country)
14
+ full_number = full_number.to_s.dup
15
+ format = number_format(country)
16
+
17
+ fields = format.fetch(:parts).inject({}) do |hash, part|
18
+ length = part.fetch(:format).source.scan(/\b\d}/).map(&:to_i).max
19
+ field = full_number.slice!(0, length || full_number.length)
20
+
21
+ hash.merge!(part.fetch(:label) => field)
22
+ end
23
+
24
+ unless full_number.empty?
25
+ raise ArgumentError, "format does not match (#{full_number.length} extra digits)"
26
+ end
27
+
28
+ new(fields, country)
29
+ end
30
+
31
+ def initialize(fields, country)
32
+ @fields = fields
33
+ @country = country
34
+ end
35
+
36
+ def to_s(value_separator: ": ", field_separator: "\n")
37
+ hash = if multiline?
38
+ to_h
39
+ else
40
+ { "Account Number" => to_h.values.join("-") } # TODO: i18n
41
+ end
42
+
43
+ hash.map do |label, value|
44
+ [label, value_separator, value].join
45
+ end.join(field_separator)
46
+ end
47
+
48
+ def to_h
49
+ @fields
50
+ end
51
+
52
+ def multiline?
53
+ self.class.number_format(@country).fetch(:multiline)
54
+ end
55
+ end
56
+ end
57
+ end
@@ -1,16 +1,15 @@
1
1
  # coding: utf-8
2
- lib = File.expand_path('../lib', __FILE__)
2
+ lib = File.expand_path("../lib", __FILE__)
3
3
  $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
- require 'simple_form/bank_account_number/version'
5
4
 
6
5
  Gem::Specification.new do |spec|
7
6
  spec.name = "simple_form-bank_account_number"
8
- spec.version = SimpleForm::BankAccountNumber::VERSION
7
+ spec.version = "1.1.0"
9
8
  spec.authors = ["Cédric Félizard"]
10
9
  spec.email = ["cedric@felizard.fr"]
11
- spec.description = %q{A SimpleForm input field for bank account numbers}
12
- spec.summary = %q{Bank account number field for SimpleForm}
13
- spec.homepage = ""
10
+ spec.description = "A SimpleForm input field for bank account numbers"
11
+ spec.summary = "Bank account number field for SimpleForm"
12
+ spec.homepage = "https://github.com/buckybox/simple_form-bank_account_number"
14
13
  spec.license = "MIT"
15
14
 
16
15
  spec.files = `git ls-files`.split($/)
@@ -18,8 +17,10 @@ Gem::Specification.new do |spec|
18
17
  spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
19
18
  spec.require_paths = ["lib"]
20
19
 
21
- spec.add_dependency "simple_form", "~> 2.1.0"
22
- spec.add_development_dependency "bundler", "~> 1.3"
20
+ spec.add_dependency "simple_form", "~> 2.1.0"
21
+
23
22
  spec.add_development_dependency "rake"
23
+ spec.add_development_dependency "bundler"
24
24
  spec.add_development_dependency "rspec"
25
+ spec.add_development_dependency "rubocop"
25
26
  end
@@ -0,0 +1,38 @@
1
+ require "simple_form/bank_account_number/formatter"
2
+
3
+ module SimpleForm
4
+ module BankAccountNumber
5
+ describe Formatter do
6
+ describe ".formatted_bank_account_number" do
7
+ def assert(country, number, formatted_number)
8
+ expect(Formatter.formatted_bank_account_number(number, country).to_h).to eq formatted_number
9
+ end
10
+
11
+ specify do
12
+ assert "AU", "484795453513423", "BSB Number" => "484795", "Account Number" => "453513423"
13
+ assert "GB", "40142431565517", "Sort Code" => "401424", "Account Number" => "31565517"
14
+ assert "NZ", "041587005000000", "Bank Number" => "04", "Branch Number" => "1587", "Account Number" => "0050000", "Suffix" => "00"
15
+ assert "XX", "1234", "Account Number" => "1234"
16
+ end
17
+
18
+ it "honors the multiline flag" do
19
+ gb = Formatter.formatted_bank_account_number("40142431565517", "GB")
20
+ expect(gb.to_s).to eq "Sort Code: 401424\nAccount Number: 31565517"
21
+
22
+ nz = Formatter.formatted_bank_account_number("041587005000000", "NZ")
23
+ expect(nz.to_s).to eq "Account Number: 04-1587-0050000-00"
24
+
25
+ xx = Formatter.formatted_bank_account_number("1234", "XX")
26
+ expect(xx.to_s).to eq "Account Number: 1234" # TODO: support i18n
27
+ end
28
+
29
+ it "preserves the given number" do
30
+ number = "484795453513423"
31
+ Formatter.formatted_bank_account_number(number, "AU")
32
+
33
+ expect(number).to eq "484795453513423"
34
+ end
35
+ end
36
+ end
37
+ end
38
+ end
@@ -17,26 +17,6 @@ end
17
17
 
18
18
  module SimpleForm::Inputs
19
19
  describe BankAccountNumberInput do
20
- describe ".formatted_bank_account_number" do
21
- def assert country, number, formatted_number
22
- expect(BankAccountNumberInput.formatted_bank_account_number(number, country)).to eq formatted_number
23
- end
24
-
25
- specify do
26
- assert "AU", "484795453513423", "484795-453513423"
27
- assert "GB", "40142431565517", "401424-31565517"
28
- assert "NZ", "041587005000000", "04-1587-0050000-00"
29
- assert "XX", "1234", "1234"
30
- end
31
-
32
- it "preserves the given number" do
33
- number = "484795453513423"
34
- BankAccountNumberInput.formatted_bank_account_number(number, "AU")
35
-
36
- expect(number).to eq "484795453513423"
37
- end
38
- end
39
-
40
20
  describe "#input" do
41
21
  let(:options) do
42
22
  {
@@ -59,4 +39,3 @@ module SimpleForm::Inputs
59
39
  end
60
40
  end
61
41
  end
62
-
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.0.0
4
+ version: 1.1.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: 2014-03-11 00:00:00.000000000 Z
11
+ date: 2015-05-26 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: simple_form
@@ -25,21 +25,21 @@ dependencies:
25
25
  - !ruby/object:Gem::Version
26
26
  version: 2.1.0
27
27
  - !ruby/object:Gem::Dependency
28
- name: bundler
28
+ name: rake
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
- - - "~>"
31
+ - - ">="
32
32
  - !ruby/object:Gem::Version
33
- version: '1.3'
33
+ version: '0'
34
34
  type: :development
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
- - - "~>"
38
+ - - ">="
39
39
  - !ruby/object:Gem::Version
40
- version: '1.3'
40
+ version: '0'
41
41
  - !ruby/object:Gem::Dependency
42
- name: rake
42
+ name: bundler
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
45
  - - ">="
@@ -66,6 +66,20 @@ dependencies:
66
66
  - - ">="
67
67
  - !ruby/object:Gem::Version
68
68
  version: '0'
69
+ - !ruby/object:Gem::Dependency
70
+ name: rubocop
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - ">="
74
+ - !ruby/object:Gem::Version
75
+ version: '0'
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - ">="
81
+ - !ruby/object:Gem::Version
82
+ version: '0'
69
83
  description: A SimpleForm input field for bank account numbers
70
84
  email:
71
85
  - cedric@felizard.fr
@@ -74,6 +88,7 @@ extensions: []
74
88
  extra_rdoc_files: []
75
89
  files:
76
90
  - ".gitignore"
91
+ - ".rubocop.yml"
77
92
  - ".travis.yml"
78
93
  - Gemfile
79
94
  - LICENSE.txt
@@ -81,10 +96,11 @@ files:
81
96
  - Rakefile
82
97
  - lib/simple_form/bank_account_number.rb
83
98
  - lib/simple_form/bank_account_number/countries.rb
84
- - lib/simple_form/bank_account_number/version.rb
99
+ - lib/simple_form/bank_account_number/formatter.rb
85
100
  - simple_form-bank_account_number.gemspec
101
+ - spec/simple_form/bank_account_number/formatter_spec.rb
86
102
  - spec/simple_form/bank_account_number_spec.rb
87
- homepage: ''
103
+ homepage: https://github.com/buckybox/simple_form-bank_account_number
88
104
  licenses:
89
105
  - MIT
90
106
  metadata: {}
@@ -104,9 +120,10 @@ required_rubygems_version: !ruby/object:Gem::Requirement
104
120
  version: '0'
105
121
  requirements: []
106
122
  rubyforge_project:
107
- rubygems_version: 2.2.2
123
+ rubygems_version: 2.4.6
108
124
  signing_key:
109
125
  specification_version: 4
110
126
  summary: Bank account number field for SimpleForm
111
127
  test_files:
128
+ - spec/simple_form/bank_account_number/formatter_spec.rb
112
129
  - spec/simple_form/bank_account_number_spec.rb
@@ -1,5 +0,0 @@
1
- module SimpleForm
2
- module BankAccountNumber
3
- VERSION = "1.0.0"
4
- end
5
- end