ibanizator 0.2.3 → 0.3.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: f4516010c74f2fff18512e7fab52aea278531edf
4
- data.tar.gz: 2cc32ba114285a09e3650580d2dca904d0229eb8
3
+ metadata.gz: 80f3e9fb535d2e6919de65a9edbedbde43ea2277
4
+ data.tar.gz: 7c75a0460dc326a4bf404daf231f0b5f7f427f11
5
5
  SHA512:
6
- metadata.gz: 87eeea15696057f3a361695d878b079fa7afa3f1fdb91bb8057aed1cc8a99ee600394dfe622357037272eea0be12c7060d33b7ce65c7a3a48169904f2a637cdd
7
- data.tar.gz: bade9a4c18b8efd786440cc7e119e6c26470334f24018e43d2a28a0bd533472e833b4dc0a44390966922fd65f781704ef0e8b8b7b81e2b368c161098f91b4151
6
+ metadata.gz: 394f6e0642c5589d19d0013f5fe72469488e459c2e95034cdc835a9c3282002a8ae08338bb103bbb79853137974e2c4f8009e7c681baacb7a50dfb235a7d899c
7
+ data.tar.gz: 491636beb8fed35fc402bf717cc86a2a55585ded14d046519978ea85bd1c8aed8578ea6915a6e231a6d531a2eda97e1069669908677770ce37f91bf09510e845
data/README.md CHANGED
@@ -20,21 +20,32 @@ To calculate the iban for some german accounts, just use this method:
20
20
 
21
21
  In the current version the ibanizator gem only works for german accounts.
22
22
 
23
- ### Validate IBAN
23
+ ### Validate an IBAN
24
24
 
25
25
  To validate the iban you need to check the length and after this check the checksum. For details please refer to
26
26
  the documentation online (e.g. http://es.wikipedia.org/wiki/IBAN).
27
27
 
28
- This gem provides a simple validator for several contries. All countries that are listed in the Iban::LENGTHS hash are supported at the moment.
28
+ This gem provides a simple validator for several contries. All countries that are listed in the Ibanizator::Iban::LENGTHS hash are supported at the moment.
29
29
 
30
- validator = Iban::Validator.new
31
- valid = validator.validate_iban("DE68 2105 0170 0012 3456 78") # => true
30
+ ```ruby
31
+ iban = Ibanizator.iban_form_string("DE68 2105 0170 0012 3456 78")
32
+ iban.valid? # => true
33
+ ```
32
34
 
33
- There is an alternate way to validate an IBAN as a result of the 0.0.1 Version:
35
+ ### Information provided by an IBAN
34
36
 
35
- ibanizator.validate_iban("DE68 2105 0170 0012 3456 78") # => true
37
+ The Ibanizator::Iban class provides some handy utility methods to query
38
+ information about an iban.
36
39
 
37
- The method returns true for valid ibans and false for invalid ibans. If the iban is too short or is using an unimplemented country code, the method throws an exception.
40
+ ```ruby
41
+ iban = Ibanizator.iban_form_string("DE68 2105 0170 0012 3456 78")
42
+ iban.country_code # => :DE
43
+
44
+ # there is extended data for german ibans
45
+ iban.extended_data.bank_code # => "21050170"
46
+ iban.extended_data.account_number # => "12345678"
47
+ iban.extended_data.bic # => "NOLADE21KIE"
48
+ ```
38
49
 
39
50
  ### Find bank infos
40
51
 
@@ -1,8 +1,8 @@
1
- require_relative 'lengths'
2
-
3
1
  module Iban
4
2
  class Validator
3
+ # <b>DEPRECATED:</b> Please use <tt>Ibanizator.iban_from_string(an_iban).valid?</tt> instead.
5
4
  def validate_iban(input)
5
+ warn "[DEPRECATION] `Iban#validate_iban` is deprecated. Please use `Ibanizator.iban_from_string(an_iban).valid?instead."
6
6
  iban = sanitize_input(input)
7
7
 
8
8
  valid_length?(iban) && valid_checksum?(iban)
@@ -18,7 +18,7 @@ module Iban
18
18
  def valid_length?(iban)
19
19
  return false if iban.length <= 4 # two digits for the country code and two for the checksum
20
20
  country_code = iban[0..1].upcase.to_sym
21
- iban.length == LENGTHS[country_code]
21
+ iban.length == Ibanizator::Iban::LENGTHS[country_code]
22
22
  end
23
23
 
24
24
  def valid_checksum?(iban)
@@ -1,5 +1,7 @@
1
1
  class Ibanizator
2
2
  class BankDb
3
+ class BankNotFoundError < StandardError ; end
4
+
3
5
  attr_reader :known_banks
4
6
 
5
7
  def initialize
@@ -0,0 +1,31 @@
1
+ class Ibanizator
2
+ class Iban
3
+ module ExtendedData
4
+ class DE
5
+ attr_reader :iban
6
+ include Equalizer.new(:iban)
7
+ include Adamantium
8
+
9
+ def initialize(iban)
10
+ raise Invalid, "can't compute extended data on invalid iban" unless iban.valid?
11
+ @iban = iban
12
+ end
13
+
14
+ def bank_code
15
+ iban.to_s[4..11]
16
+ end
17
+ memoize :bank_code
18
+
19
+ def account_number
20
+ iban.to_s[12..-1].gsub(/\A0+/,"")
21
+ end
22
+ memoize :account_number
23
+
24
+ def bic
25
+ Ibanizator.bank_db.bank_by_bank_code(bank_code).bic
26
+ end
27
+ memoize :bic
28
+ end
29
+ end # ExtendedData
30
+ end # Iban
31
+ end # Ibanizator
@@ -0,0 +1,10 @@
1
+ require_relative 'extended_data/de'
2
+ require_relative 'invalid'
3
+
4
+ class Ibanizator
5
+ class Iban
6
+ module ExtendedData
7
+
8
+ end
9
+ end
10
+ end
@@ -0,0 +1,6 @@
1
+ class Ibanizator
2
+ class Iban
3
+ class Invalid < ArgumentError ; end
4
+ end
5
+ end
6
+
@@ -0,0 +1,71 @@
1
+ class Ibanizator
2
+ class Iban
3
+ # according to wikipedia (http://en.wikipedia.org/wiki/IBAN)
4
+ LENGTHS = {
5
+ :AL => 28,
6
+ :AD => 24,
7
+ :AT => 20,
8
+ :AZ => 28,
9
+ :BH => 22,
10
+ :BE => 16,
11
+ :BA => 20,
12
+ :BR => 29,
13
+ :BG => 22,
14
+ :CR => 21,
15
+ :HR => 21,
16
+ :CY => 28,
17
+ :CZ => 24,
18
+ :DK => 18,
19
+ :DO => 28,
20
+ :EE => 20,
21
+ :FO => 18,
22
+ :FI => 18,
23
+ :FR => 27,
24
+ :GE => 22,
25
+ :DE => 22,
26
+ :GI => 23,
27
+ :GR => 27,
28
+ :GL => 18,
29
+ :GT => 28,
30
+ :HU => 28,
31
+ :IS => 26,
32
+ :IE => 22,
33
+ :IL => 23,
34
+ :IT => 27,
35
+ :KZ => 20,
36
+ :KW => 30,
37
+ :LV => 21,
38
+ :LB => 28,
39
+ :LI => 21,
40
+ :LT => 20,
41
+ :LU => 20,
42
+ :MK => 19,
43
+ :MT => 31,
44
+ :MR => 27,
45
+ :MU => 30,
46
+ :MC => 27,
47
+ :MD => 24,
48
+ :ME => 22,
49
+ :NL => 18,
50
+ :NO => 15,
51
+ :PK => 24,
52
+ :PS => 29,
53
+ :PL => 28,
54
+ :PT => 25,
55
+ :RO => 24,
56
+ :SM => 27,
57
+ :SA => 24,
58
+ :RS => 22,
59
+ :SK => 24,
60
+ :SI => 19,
61
+ :ES => 24,
62
+ :SE => 24,
63
+ :CH => 21,
64
+ :TN => 24,
65
+ :TR => 26,
66
+ :AE => 23,
67
+ :GB => 22,
68
+ :VG => 24
69
+ }.freeze
70
+ end
71
+ end
@@ -0,0 +1,37 @@
1
+ class Ibanizator
2
+ class Iban
3
+ class Validator
4
+ attr_reader :iban
5
+
6
+ def initialize(iban)
7
+ @iban = iban.to_s
8
+ end
9
+
10
+ def validate
11
+ valid_length? && valid_checksum?
12
+ end
13
+
14
+ private
15
+ def valid_length?
16
+ return false if iban.length <= 4 # two digits for the country code and two for the checksum
17
+ country_code = iban[0..1].upcase.to_sym
18
+ iban.length == LENGTHS[country_code]
19
+ end
20
+
21
+ def valid_checksum?
22
+ number_representation = integerize(reorder(iban))
23
+ number_representation % 97 == 1
24
+ end
25
+
26
+ def reorder(iban)
27
+ "#{iban[4..-1]}#{iban[0..3]}"
28
+ end
29
+
30
+ def integerize(iban)
31
+ iban.gsub(/[A-Z]/) do |match|
32
+ match.ord - 'A'.ord + 10
33
+ end.to_i
34
+ end
35
+ end
36
+ end # Iban
37
+ end # Ibanizator
@@ -0,0 +1,46 @@
1
+ require 'equalizer'
2
+ require 'adamantium'
3
+
4
+ require_relative 'iban/extended_data'
5
+ require_relative 'iban/lengths'
6
+ require_relative 'iban/validator'
7
+
8
+ class Ibanizator
9
+ class Iban
10
+ attr_reader :iban_string
11
+ alias_method :to_s, :iban_string
12
+
13
+ include Equalizer.new(:iban_string)
14
+ include Adamantium
15
+
16
+ def initialize(an_iban)
17
+ @iban_string = sanitize(an_iban)
18
+ end
19
+
20
+ def self.from_string(a_string)
21
+ new(a_string)
22
+ end
23
+
24
+ def country_code
25
+ cc = iban_string[0..1].to_sym
26
+ LENGTHS.keys.include?(cc) ? cc : :unknown
27
+ end
28
+ memoize :country_code
29
+
30
+ def extended_data
31
+ if country_code == :DE
32
+ ExtendedData::DE.new(self)
33
+ end
34
+ end
35
+ memoize :extended_data
36
+
37
+ def valid?
38
+ Validator.new(self).validate
39
+ end
40
+
41
+ private
42
+ def sanitize(input)
43
+ input.to_s.gsub(/\s+/,'').upcase
44
+ end
45
+ end
46
+ end
data/lib/ibanizator.rb CHANGED
@@ -1,21 +1,27 @@
1
1
  require_relative 'iban/validator'
2
2
  require_relative 'swift_bic/bank_db'
3
+
3
4
  require_relative 'ibanizator/bank_db'
4
5
  require_relative 'ibanizator/bank'
6
+ require_relative 'ibanizator/iban'
5
7
 
6
8
  class Ibanizator
9
+
7
10
  def self.bank_db
8
11
  @bank_db ||= BankDb.new
9
12
  end
10
13
 
14
+ def self.iban_from_string(a_string)
15
+ Iban.from_string(a_string)
16
+ end
17
+
11
18
  def calculate_iban options
12
19
  # Error handling
13
20
  # TODO
14
21
 
15
22
  # delete spaces
16
- validator = Iban::Validator.new
17
- options[:account_number] = validator.sanitize_input(options[:account_number])
18
- options[:bank_code] = validator.sanitize_input(options[:bank_code])
23
+ options[:account_number] = options[:account_number].to_s.gsub(/\s+/, '')
24
+ options[:bank_code] = options[:bank_code].to_s.gsub(/\s+/, '')
19
25
 
20
26
  # Fill account number to 10 digits
21
27
  while options[:account_number].size < 10 do
@@ -28,10 +34,11 @@ class Ibanizator
28
34
  options[:country_code].to_s.upcase + checksum + options[:bank_code] + options[:account_number]
29
35
  end
30
36
 
37
+ # <b>DEPRECATED:</b> Please use <tt>Ibanizator.iban_from_string(an_iban).valid?</tt> instead.
31
38
  def validate_iban iban
39
+ warn "[DEPRECATION] `Ibanizator#validate_iban` is deprecated. Please use `Ibanizator.iban_from_string(an_iban).valid?instead."
32
40
  # for the sake of compatibility
33
- validator = Iban::Validator.new
34
- validator.validate_iban(iban)
41
+ self.class.iban_from_string(iban).valid?
35
42
  end
36
43
 
37
44
  # <b>DEPRECATED:</b> Please use <tt>Ibanizator.bank_db.bank_by_bank_code</tt> instead.
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ibanizator
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.3
4
+ version: 0.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Christoph Stettner
@@ -106,11 +106,16 @@ files:
106
106
  - db/blz.txt
107
107
  - lib/errors/bank_not_found_error.rb
108
108
  - lib/errors/invalid_bank_code_error.rb
109
- - lib/iban/lengths.rb
110
109
  - lib/iban/validator.rb
111
110
  - lib/ibanizator.rb
112
111
  - lib/ibanizator/bank.rb
113
112
  - lib/ibanizator/bank_db.rb
113
+ - lib/ibanizator/iban.rb
114
+ - lib/ibanizator/iban/extended_data.rb
115
+ - lib/ibanizator/iban/extended_data/de.rb
116
+ - lib/ibanizator/iban/invalid.rb
117
+ - lib/ibanizator/iban/lengths.rb
118
+ - lib/ibanizator/iban/validator.rb
114
119
  - lib/swift_bic/bank_db.rb
115
120
  - license.md
116
121
  homepage: https://github.com/softwareinmotion/ibanizator
data/lib/iban/lengths.rb DELETED
@@ -1,69 +0,0 @@
1
- module Iban
2
- # according to wikipedia (http://en.wikipedia.org/wiki/IBAN)
3
- LENGTHS = {
4
- :AL => 28,
5
- :AD => 24,
6
- :AT => 20,
7
- :AZ => 28,
8
- :BH => 22,
9
- :BE => 16,
10
- :BA => 20,
11
- :BR => 29,
12
- :BG => 22,
13
- :CR => 21,
14
- :HR => 21,
15
- :CY => 28,
16
- :CZ => 24,
17
- :DK => 18,
18
- :DO => 28,
19
- :EE => 20,
20
- :FO => 18,
21
- :FI => 18,
22
- :FR => 27,
23
- :GE => 22,
24
- :DE => 22,
25
- :GI => 23,
26
- :GR => 27,
27
- :GL => 18,
28
- :GT => 28,
29
- :HU => 28,
30
- :IS => 26,
31
- :IE => 22,
32
- :IL => 23,
33
- :IT => 27,
34
- :KZ => 20,
35
- :KW => 30,
36
- :LV => 21,
37
- :LB => 28,
38
- :LI => 21,
39
- :LT => 20,
40
- :LU => 20,
41
- :MK => 19,
42
- :MT => 31,
43
- :MR => 27,
44
- :MU => 30,
45
- :MC => 27,
46
- :MD => 24,
47
- :ME => 22,
48
- :NL => 18,
49
- :NO => 15,
50
- :PK => 24,
51
- :PS => 29,
52
- :PL => 28,
53
- :PT => 25,
54
- :RO => 24,
55
- :SM => 27,
56
- :SA => 24,
57
- :RS => 22,
58
- :SK => 24,
59
- :SI => 19,
60
- :ES => 24,
61
- :SE => 24,
62
- :CH => 21,
63
- :TN => 24,
64
- :TR => 26,
65
- :AE => 23,
66
- :GB => 22,
67
- :VG => 24
68
- }.freeze
69
- end