iso-iban 0.0.1

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.
@@ -0,0 +1,18 @@
1
+ # encoding: utf-8
2
+
3
+ begin
4
+ require 'rubygems/version' # newer rubygems use this
5
+ rescue LoadError
6
+ require 'gem/version' # older rubygems use this
7
+ end
8
+
9
+ module ISO
10
+ class IBAN
11
+
12
+ # The version of the sorting gem.
13
+ # @note
14
+ # require 'iso/iban' loads the version.
15
+ #
16
+ Version = Gem::Version.new("0.0.1")
17
+ end
18
+ end
@@ -0,0 +1,23 @@
1
+ ---
2
+ AL:
3
+ - Albania
4
+ - AL
5
+ - AL2!n8!n16!c
6
+ - 28
7
+ - 8!n16!c
8
+ - 24
9
+ - 4
10
+ - 6
11
+ -
12
+ -
13
+ AD:
14
+ - Andorra
15
+ - AD
16
+ - AD2!n4!n4!n12!c
17
+ - 24
18
+ - 4!n4!n12!c
19
+ - 20
20
+ - 4
21
+ - 7
22
+ -
23
+ -
@@ -0,0 +1,86 @@
1
+ # encoding: utf-8
2
+
3
+ require 'stringio'
4
+ require 'yaml'
5
+ require 'test/unit/assertions'
6
+ require 'fileutils'
7
+
8
+ module Kernel
9
+ module_function
10
+ def reset_test_files
11
+ data_dir = "#{TEST_DIR}/data"
12
+ tmp_dir = "#{TEST_DIR}/tmp"
13
+ FileUtils.rm_r(tmp_dir) if File.directory?(tmp_dir)
14
+ FileUtils.cp_r(data_dir, tmp_dir)
15
+ end
16
+
17
+ def test_file(name)
18
+ "#{TEST_DIR}/tmp/#{name}"
19
+ end
20
+ end
21
+
22
+
23
+ module TestSuite
24
+ attr_accessor :name
25
+ end
26
+
27
+ module Kernel
28
+ def suite(name, &block)
29
+ klass = Class.new(Test::Unit::TestCase)
30
+ klass.extend TestSuite
31
+ klass.name = "Suite #{name}"
32
+ klass.class_eval(&block)
33
+
34
+ klass
35
+ end
36
+ module_function :suite
37
+ end
38
+
39
+ class Test::Unit::TestCase
40
+ def self.inherited(by)
41
+ by.init
42
+ super
43
+ end
44
+
45
+ def self.init
46
+ @setups = []
47
+ end
48
+
49
+ def self.setup(&block)
50
+ @setups ||= []
51
+ @setups << block
52
+ end
53
+
54
+ class << self
55
+ attr_reader :setups
56
+ end
57
+
58
+ def setup
59
+ self.class.setups.each do |setup|
60
+ instance_eval(&setup)
61
+ end
62
+ super
63
+ end
64
+
65
+ def self.suite(name, &block)
66
+ klass = Class.new(Test::Unit::TestCase)
67
+ klass.extend TestSuite
68
+ klass.name = "#{self.name} #{name}"
69
+ klass.class_eval(&block)
70
+
71
+ klass
72
+ end
73
+
74
+ def self.test(desc, &impl)
75
+ define_method("test #{desc}", &impl)
76
+ end
77
+
78
+ def capture_stdout
79
+ captured = StringIO.new
80
+ $stdout = captured
81
+ yield
82
+ captured.string
83
+ ensure
84
+ $stdout = STDOUT
85
+ end
86
+ end
data/test/runner.rb ADDED
@@ -0,0 +1,20 @@
1
+ # run with `ruby test/runner.rb`
2
+ # if you only want to run a single test-file: `ruby test/runner.rb testfile.rb`
3
+
4
+ if ENV['COVERAGE']
5
+ require 'simplecov'
6
+ SimpleCov.start
7
+ end
8
+
9
+ $LOAD_PATH << File.expand_path('../../lib', __FILE__)
10
+ $LOAD_PATH << File.expand_path('../../test/lib', __FILE__)
11
+ TEST_DIR = File.expand_path('../../test', __FILE__)
12
+
13
+ require 'test/unit'
14
+ require 'helper'
15
+
16
+ units = ARGV.empty? ? Dir["#{TEST_DIR}/unit/**/*.rb"] : ARGV
17
+
18
+ units.each do |unit|
19
+ load unit
20
+ end
@@ -0,0 +1,23 @@
1
+ ---
2
+ AL:
3
+ - Albania
4
+ - AL
5
+ - AL2!n8!n16!c
6
+ - 28
7
+ - 8!n16!c
8
+ - 24
9
+ - 4
10
+ - 6
11
+ -
12
+ -
13
+ AD:
14
+ - Andorra
15
+ - AD
16
+ - AD2!n4!n4!n12!c
17
+ - 24
18
+ - 4!n4!n12!c
19
+ - 20
20
+ - 4
21
+ - 7
22
+ -
23
+ -
@@ -0,0 +1,117 @@
1
+ # encoding: utf-8
2
+
3
+ require 'iso/iban'
4
+
5
+ suite "ISO::IBAN" do
6
+ setup do
7
+ ISO::IBAN.instance_variable_set(:@specifications, {'CH' => ISO::IBAN::Specification.new("Switzerland", "CH", "CH2!n5!n12!c", 21, "5!n12!c", 17, 4, 8, nil, nil)})
8
+ end
9
+
10
+ test 'ISO::IBAN::load_specifications' do
11
+ reset_test_files
12
+
13
+ ISO::IBAN.load_specifications(test_file('test_spec.yaml'))
14
+ specs = ISO::IBAN.specifications
15
+ assert_kind_of Hash, specs
16
+ specs.each do |key, value|
17
+ assert_kind_of String, key
18
+ assert_kind_of ISO::IBAN::Specification, value
19
+ assert_equal key, value.a2_country_code
20
+ end
21
+ assert_equal ["AL", "AD"], specs.keys
22
+ end
23
+
24
+ test 'ISO::IBAN::numerify' do
25
+ assert_equal 121735123459876543210910, ISO::IBAN.numerify('CH351234598765432109A')
26
+ assert_raise ArgumentError do
27
+ ISO::IBAN.numerify('CH99 1234 5987 6543 2109 A')
28
+ end
29
+ end
30
+
31
+ test 'ISO::IBAN::generate' do
32
+ assert_equal 'CH76 0012 3000 0000 9876 B', ISO::IBAN.generate('CH', '123', '9876B').formatted
33
+ end
34
+
35
+ test 'ISO::IBAN::valid?' do
36
+ assert ISO::IBAN.valid?('CH35 1234 5987 6543 2109 A')
37
+ assert !ISO::IBAN.valid?('CH99 1234 5987 6543 2109 A')
38
+ end
39
+
40
+ test 'ISO::IBAN::validate' do
41
+ assert_equal [], ISO::IBAN.validate('CH35 1234 5987 6543 2109 A')
42
+ assert_equal [:invalid_checksum], ISO::IBAN.validate('CH99 1234 5987 6543 2109 A')
43
+ assert_equal [:invalid_format], ISO::IBAN.validate('CH86 X234 5987 6543 2109 A')
44
+ assert_equal [:invalid_checksum, :invalid_format], ISO::IBAN.validate('CH99 X234 5987 6543 2109 A')
45
+ assert_equal [:invalid_length, :invalid_format], ISO::IBAN.validate('CH83 X234 5987 6543 2109 AB')
46
+ assert_equal [:invalid_checksum, :invalid_length, :invalid_format], ISO::IBAN.validate('CH99 X234 5987 6543 2109 AB')
47
+ assert_equal [:invalid_country, :invalid_checksum, :invalid_length, :invalid_format], ISO::IBAN.validate('XX35 1234 5987 6543 2109 A')
48
+ end
49
+
50
+ test "ISO::IBAN::new" do
51
+ assert_kind_of ISO::IBAN, ISO::IBAN.new('CH35 1234 5987 6543 2109 A')
52
+ assert_kind_of ISO::IBAN, ISO::IBAN.new('CH351234598765432109A')
53
+ end
54
+
55
+ test "ISO::IBAN#formatted" do
56
+ assert_equal 'CH35 1234 5987 6543 2109 A', ISO::IBAN.new('CH35 1234 5987 6543 2109 A').formatted
57
+ assert_equal 'CH35 1234 5987 6543 2109 A', ISO::IBAN.new('CH351234598765432109A').formatted
58
+ end
59
+
60
+ test "ISO::IBAN#compact" do
61
+ assert_equal 'CH351234598765432109A', ISO::IBAN.new('CH35 1234 5987 6543 2109 A').compact
62
+ assert_equal 'CH351234598765432109A', ISO::IBAN.new('CH351234598765432109A').compact
63
+ end
64
+
65
+ test "ISO::IBAN#to_s" do
66
+ assert_equal 'CH351234598765432109A', ISO::IBAN.new('CH35 1234 5987 6543 2109 A').to_s
67
+ assert_equal 'CH351234598765432109A', ISO::IBAN.new('CH351234598765432109A').to_s
68
+ end
69
+
70
+ test "ISO::IBAN#country" do
71
+ assert_equal 'CH', ISO::IBAN.new('CH35 1234 5987 6543 2109 A').country
72
+ end
73
+
74
+ test "ISO::IBAN#checksum_digits" do
75
+ assert_equal '35', ISO::IBAN.new('CH35 1234 5987 6543 2109 A').checksum_digits
76
+ end
77
+
78
+ test "ISO::IBAN#bban" do
79
+ assert_equal '1234598765432109A', ISO::IBAN.new('CH35 1234 5987 6543 2109 A').bban
80
+ end
81
+
82
+ test "ISO::IBAN#bank_code" do
83
+ assert_equal '12345', ISO::IBAN.new('CH35 1234 5987 6543 2109 A').bank_code
84
+ end
85
+
86
+ test "ISO::IBAN#branch_code" do
87
+ ISO::IBAN.instance_variable_set(:@specifications, {'BG' => ISO::IBAN::Specification.new("Bulgaria", "BG", "BG2!n4!a4!n2!n8!c", 22, "4!a4!n2!n8!c", 18, 4, 7, 8, 11)})
88
+ assert_equal "0002", ISO::IBAN.new('BG69 0001 0002 0300 0000 04').branch_code
89
+ end
90
+
91
+ test "ISO::IBAN#account_code" do
92
+ assert_equal '98765432109A', ISO::IBAN.new('CH35 1234 5987 6543 2109 A').account_code
93
+ end
94
+
95
+ test "ISO::IBAN#valid?" do
96
+ assert_equal true, ISO::IBAN.new('CH35 1234 5987 6543 2109 A').valid?
97
+ assert_equal false, ISO::IBAN.new('CH99 1234 5987 6543 2109 A').valid?
98
+ end
99
+
100
+ test "ISO::IBAN#validate" do
101
+ assert_equal [], ISO::IBAN.new('CH35 1234 5987 6543 2109 A').validate
102
+ end
103
+
104
+ test "ISO::IBAN#<=>" do
105
+ iban0 = ISO::IBAN.generate('CH', '0', '0')
106
+ iban1 = ISO::IBAN.generate('CH', '0', '97') # 97 to have the same checksum
107
+ assert_equal -1, iban0 <=> iban1
108
+ assert_equal 0, iban0 <=> iban0
109
+ assert_equal 1, iban1 <=> iban0
110
+ assert_equal nil, iban0 <=> "incomparable"
111
+ assert_equal nil, "incomparable" <=> iban0
112
+ end
113
+
114
+ test "ISO::IBAN#inspect" do
115
+ assert_equal "#<ISO::IBAN CH35 1234 5987 6543 2109 A>", ISO::IBAN.new('CH35 1234 5987 6543 2109 A').inspect
116
+ end
117
+ end
metadata ADDED
@@ -0,0 +1,61 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: iso-iban
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ platform: ruby
6
+ authors:
7
+ - Stefan Rusterholz
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2013-07-07 00:00:00.000000000 Z
12
+ dependencies: []
13
+ description: |-
14
+ ISO::IBAN implements IBAN (International Bank Account Number) specification as per ISO 13616-1.
15
+ It provides methods to generate valid IBAN numbers from components, or to validate a given IBAN.
16
+ email: stefan.rusterholz@gmail.com
17
+ executables: []
18
+ extensions: []
19
+ extra_rdoc_files: []
20
+ files:
21
+ - data/iso-iban/specs.yaml
22
+ - lib/iso/iban/autoload.rb
23
+ - lib/iso/iban/specification.rb
24
+ - lib/iso/iban/version.rb
25
+ - lib/iso/iban.rb
26
+ - test/data/test_spec.yaml
27
+ - test/lib/helper.rb
28
+ - test/runner.rb
29
+ - test/tmp/test_spec.yaml
30
+ - test/unit/lib/iso/iban.rb
31
+ - iso-iban.gemspec
32
+ - .yardopts
33
+ - LICENSE.txt
34
+ - Rakefile
35
+ - README.markdown
36
+ homepage: https://github.com/apeiros/iso-iban
37
+ licenses:
38
+ - BSD 2-Clause
39
+ metadata: {}
40
+ post_install_message:
41
+ rdoc_options: []
42
+ require_paths:
43
+ - lib
44
+ required_ruby_version: !ruby/object:Gem::Requirement
45
+ requirements:
46
+ - - '>='
47
+ - !ruby/object:Gem::Version
48
+ version: 1.9.2
49
+ required_rubygems_version: !ruby/object:Gem::Requirement
50
+ requirements:
51
+ - - '>'
52
+ - !ruby/object:Gem::Version
53
+ version: 1.3.1
54
+ requirements: []
55
+ rubyforge_project:
56
+ rubygems_version: 2.0.3
57
+ signing_key:
58
+ specification_version: 3
59
+ summary: Utilities for International Bank Account Numbers (IBAN) as per ISO 13616-1.
60
+ test_files: []
61
+ has_rdoc: