simple_form-bank_account_number 1.0.0 → 1.1.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: 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