validates_iban_format_of 1.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 ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: a7857aa63e60413b700f7e592b78e93cbfdc0830
4
+ data.tar.gz: 3e20eab0f8a9e4db63e766368c842ee121ebbcbc
5
+ SHA512:
6
+ metadata.gz: fc4aa352f55c15a156beaf6e1221d25d710104de24b7b1fd95a4bc88757020d41e2af697899764656b594c82662725755e3a4afb60b082c9b2ac3cdfda598100
7
+ data.tar.gz: 7c6fddd7ecdd3284dabddeff48da12fca3fece2b2fc6f80b3a0adcad55aedd088c7ec0a5a58f205a0bb19092218c08d3475265cfe9ab62c5f1241a21c96e05b9
data/.gitignore ADDED
@@ -0,0 +1,8 @@
1
+ pkg
2
+ test/debug.log
3
+ rdoc
4
+ Gemfile.lock
5
+ *.gem
6
+ *.sqlite3
7
+ *.swp
8
+ .ruby-version
data/.rspec ADDED
@@ -0,0 +1,2 @@
1
+ --color
2
+ --order random
data/Gemfile ADDED
@@ -0,0 +1,3 @@
1
+ source "https://rubygems.org"
2
+
3
+ gemspec
data/LICENSE ADDED
@@ -0,0 +1,20 @@
1
+ Copyright (c) 2017 Dimitar Kostov
2
+
3
+ Permission is hereby granted, free of charge, to any person obtaining
4
+ a copy of this software and associated documentation files (the
5
+ "Software"), to deal in the Software without restriction, including
6
+ without limitation the rights to use, copy, modify, merge, publish,
7
+ distribute, sublicense, and/or sell copies of the Software, and to
8
+ permit persons to whom the Software is furnished to do so, subject to
9
+ the following conditions:
10
+
11
+ The above copyright notice and this permission notice shall be
12
+ included in all copies or substantial portions of the Software.
13
+
14
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
17
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
18
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
19
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
20
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/README.md ADDED
@@ -0,0 +1,90 @@
1
+ # validates_iban_format_of
2
+
3
+ Rails IBAN validator based on [iban-tools gem](https://github.com/alphasights/iban-tools)
4
+
5
+ # Installation
6
+
7
+ Add it to your Gemfile:
8
+
9
+ ```ruby
10
+ gem 'validates_iban_format_of'
11
+ ```
12
+
13
+ # Usage
14
+
15
+ ## In ActiveRecord model
16
+
17
+ ```ruby
18
+ # I18n locales are loaded automatically.
19
+
20
+ class BankAccount < ActiveRecord::Base
21
+ validates_iban_format_of :iban, message_for_invalid: 'is not incorrect', message_for_missing: 'is blank'
22
+
23
+ # OR
24
+ # validates :iban, iban_format: { message_for_invalid: 'is not incorrect', message_for_missing: 'is blank' }
25
+ end
26
+ ```
27
+
28
+ ### In your model spec using RSpec:
29
+
30
+ ```ruby
31
+ require "validates_iban_format_of/rspec_matcher"
32
+
33
+ describe Person do
34
+ it { should validate_iban_format_of(:iban).with_message('is not looking good') }
35
+ end
36
+ ```
37
+
38
+ ### Options
39
+
40
+ ```rdoc
41
+ :message_for_invalid
42
+ String. A custom error message when the iban is invalid (default is: "is invalid")
43
+
44
+ :message_for_missing
45
+ String. A custom error message when the iban is missing (default is: "is missing")
46
+
47
+ :optional
48
+ Boolean. Flag to turn off valdiation for blank/nil case
49
+
50
+ :generate_message
51
+ Boolean. Return the I18n key of the error message instead of the error message itself (default is false)
52
+
53
+ :on, :if, :unless, :allow_nil, :allow_blank, :strict
54
+ Standard ActiveModel validation options. These work in the ActiveModel/ActiveRecord/Rails syntax only.
55
+ See http://api.rubyonrails.org/classes/ActiveModel/Validations/ClassMethods.html#method-i-validates for details.
56
+ ```
57
+
58
+ # Testing
59
+
60
+ To execute the unit tests run <tt>rspec</tt>.
61
+
62
+ # Credits
63
+
64
+ Written by [Dimitar Kostov](https://github.com/mytrile) [mitko.kostov@gmail.com](mailto:mitko.kostov@gmail.com)
65
+
66
+ Many thanks to the [iban-tools gem](https://github.com/alphasights/iban-tools) for the real validation
67
+
68
+
69
+ # LICENSE
70
+
71
+ Copyright (c) 2017 Dimitar Kostov
72
+
73
+ Permission is hereby granted, free of charge, to any person obtaining
74
+ a copy of this software and associated documentation files (the
75
+ "Software"), to deal in the Software without restriction, including
76
+ without limitation the rights to use, copy, modify, merge, publish,
77
+ distribute, sublicense, and/or sell copies of the Software, and to
78
+ permit persons to whom the Software is furnished to do so, subject to
79
+ the following conditions:
80
+
81
+ The above copyright notice and this permission notice shall be
82
+ included in all copies or substantial portions of the Software.
83
+
84
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
85
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
86
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
87
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
88
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
89
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
90
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/Rakefile ADDED
@@ -0,0 +1,6 @@
1
+ require 'bundler/gem_tasks'
2
+ require 'rspec/core/rake_task'
3
+
4
+ RSpec::Core::RakeTask.new(:spec)
5
+
6
+ task default: :spec
@@ -0,0 +1,8 @@
1
+ en:
2
+ activemodel: &errors
3
+ errors:
4
+ messages:
5
+ invalid_iban: 'is invalid'
6
+ missing_iban: 'is missing'
7
+ activerecord:
8
+ <<: *errors
@@ -0,0 +1,54 @@
1
+ require 'validates_iban_format_of/version'
2
+ require 'iban-tools'
3
+
4
+ module ValidatesIbanFormatOf
5
+ def self.load_i18n_locales
6
+ require 'i18n'
7
+ I18n.load_path += Dir.glob(File.expand_path(File.join(File.dirname(__FILE__), '..', 'config', 'locales', '*.yml')))
8
+ end
9
+
10
+ DEFAULT_MESSAGE_FOR_INVALID = 'is invalid'
11
+ DEFAULT_MESSAGE_FOR_MISSING = 'is missing'
12
+ ERROR_MESSAGE_INVALID_I18N_KEY = :invalid_iban
13
+ ERROR_MESSAGE_MISSING_I18N_KEY = :missing_iban
14
+
15
+ def self.default_message_for_invalid
16
+ defined?(I18n) ? I18n.t(ERROR_MESSAGE_INVALID_I18N_KEY, scope: %i(activemodel errors messages), default: DEFAULT_MESSAGE_FOR_INVALID) : DEFAULT_MESSAGE_FOR_INVALID
17
+ end
18
+
19
+ def self.default_message_for_missing
20
+ defined?(I18n) ? I18n.t(ERROR_MESSAGE_MISSING_I18N_KEY, scope: %i(activemodel errors messages), default: DEFAULT_MESSAGE_FOR_MISSING) : DEFAULT_MESSAGE_FOR_MISSING
21
+ end
22
+
23
+ # Validates whether the specified value is a valid IBAN. Returns nil if the value is valid, otherwise returns an array
24
+ # containing one or more validation error messages.
25
+ #
26
+ # Configuration options:
27
+ # * <tt>message_for_invalid</tt> - A custom error message for invalid (default is: 'is invalid')
28
+ # * <tt>message_for_missing</tt> - A custom error message for missing (default is: 'is missing')
29
+ # * <tt>optional</tt> - Flag to run valdiation ignoring blank/nil case
30
+ # * <tt>generate_message</tt> Return the I18n key of the error message instead of the error message itself (default is false)
31
+ def self.validate_iban_format(iban, options={})
32
+ default_options = {
33
+ message_for_invalid: options[:generate_message] ? ERROR_MESSAGE_INVALID_I18N_KEY : default_message_for_invalid,
34
+ message_for_missing: options[:generate_message] ? ERROR_MESSAGE_MISSING_I18N_KEY : default_message_for_missing,
35
+ generate_message: false,
36
+ optional: false
37
+ }
38
+
39
+ opts = options.merge(default_options) {|key, old, new| old} # merge the default options into the specified options, retaining all specified options
40
+
41
+ if opts[:optional]
42
+ return nil if iban.nil? || iban.empty?
43
+ end
44
+
45
+ return [ opts[:message_for_missing] ] if iban.nil? || iban.empty?
46
+
47
+ return [ opts[:message_for_invalid] ] unless IBANTools::IBAN.valid?(iban)
48
+
49
+ return nil
50
+ end
51
+ end
52
+
53
+ require 'validates_iban_format_of/active_model' if defined?(::ActiveModel) && !(ActiveModel::VERSION::MAJOR < 2 || (2 == ActiveModel::VERSION::MAJOR && ActiveModel::VERSION::MINOR < 1))
54
+ require 'validates_iban_format_of/railtie' if defined?(::Rails)
@@ -0,0 +1,20 @@
1
+ require 'validates_iban_format_of'
2
+ require 'active_model'
3
+
4
+ module ActiveModel
5
+ module Validations
6
+ class IbanFormatValidator < EachValidator
7
+ def validate_each(record, attribute, value)
8
+ (ValidatesIbanFormatOf::validate_iban_format(value, options.merge(generate_message: true)) || []).each do |error|
9
+ record.errors.add(attribute, error)
10
+ end
11
+ end
12
+ end
13
+
14
+ module HelperMethods
15
+ def validates_iban_format_of(*attr_names)
16
+ validates_with IbanFormatValidator, _merge_attributes(attr_names)
17
+ end
18
+ end
19
+ end
20
+ end
@@ -0,0 +1,7 @@
1
+ module ValidatesIbanFormatOf
2
+ class Railtie < Rails::Railtie
3
+ initializer 'validates_iban_format_of.load_i18n_locales' do |app|
4
+ ValidatesIbanFormatOf::load_i18n_locales
5
+ end
6
+ end
7
+ end
@@ -0,0 +1,15 @@
1
+ require 'validates_iban_format_of'
2
+
3
+ RSpec::Matchers.define :validate_iban_format_of do |attribute|
4
+ match do
5
+ actual_class_name = subject.is_a?(Class) ? subject : subject.class
6
+ actual = actual_class_name.new
7
+ actual.send(:"#{attribute}=", 'GB82 WEST 1234')
8
+ expect(actual).to be_invalid
9
+ @expected_message ||= ValidatesIbanFormatOf.default_message_for_invalid
10
+ actual.errors[attribute.to_sym].include?(@expected_message)
11
+ end
12
+ chain :with_message do |message|
13
+ @expected_message = message
14
+ end
15
+ end
@@ -0,0 +1,3 @@
1
+ module ValidatesIbanFormatOf
2
+ VERSION = '1.0.0'
3
+ end
@@ -0,0 +1,14 @@
1
+ require "#{File.expand_path(File.dirname(__FILE__))}/spec_helper"
2
+ if defined?(ActiveModel)
3
+ require "validates_iban_format_of/rspec_matcher"
4
+
5
+ class Person
6
+ attr_accessor :iban
7
+ include ::ActiveModel::Validations
8
+ validates_iban_format_of :iban
9
+ end
10
+
11
+ describe Person do
12
+ it { should validate_iban_format_of(:iban) }
13
+ end
14
+ end
@@ -0,0 +1,29 @@
1
+ require "active_model" if Gem.loaded_specs.keys.include?("activemodel")
2
+
3
+ RSpec::Matchers.define :have_errors_on_iban do
4
+ match do |actual|
5
+ expect(actual).not_to be_nil, "#{actual} should not be nil"
6
+ expect(actual).not_to be_empty, "#{actual} should not be empty"
7
+ expect(actual.size).to eq(@reasons.size), "#{actual} should have #{@reasons.size} elements"
8
+ @reasons.each do |reason|
9
+ reason = "#{"IBAN " if defined?(ActiveModel)}#{reason}"
10
+ expect(actual).to include(reason), "#{actual} should contain #{reason}"
11
+ end
12
+ end
13
+ chain :because do |reason|
14
+ (@reasons ||= []) << reason
15
+ end
16
+ chain :and_because do |reason|
17
+ (@reasons ||= []) << reason
18
+ end
19
+ match_when_negated do |actual|
20
+ expect(actual).to (defined?(ActiveModel) ? be_empty : be_nil)
21
+ end
22
+ end
23
+
24
+ RSpec.configure do |config|
25
+ config.before(:suite) do
26
+ ValidatesIbanFormatOf.load_i18n_locales
27
+ I18n.enforce_available_locales = false
28
+ end
29
+ end
@@ -0,0 +1,189 @@
1
+ require "#{File.expand_path(File.dirname(__FILE__))}/spec_helper"
2
+ require "validates_iban_format_of"
3
+
4
+ describe ValidatesIbanFormatOf do
5
+ subject do |example|
6
+ if defined?(ActiveModel)
7
+ user = Class.new do
8
+ def initialize(iban)
9
+ @iban = iban.freeze
10
+ end
11
+ attr_reader :iban
12
+ include ActiveModel::Validations
13
+ validates_iban_format_of :iban, example.example_group_instance.options
14
+ end
15
+ example.example_group_instance.class::User = user
16
+ user.new(example.example_group_instance.iban).tap(&:valid?).errors.full_messages
17
+ else
18
+ ValidatesIbanFormatOf::validate_iban_format(iban.freeze, options)
19
+ end
20
+ end
21
+ let(:options) { {} }
22
+ let(:iban) { |example| example.example_group.description }
23
+
24
+ shared_examples_for :all_specs do
25
+ # Taken directly from iban-tools gem
26
+ # Samples from http://www.tbg5-finance.org/?ibandocs.shtml/
27
+ [
28
+ "AD1200012030200359100100",
29
+ "AE070331234567890123456",
30
+ "AL47212110090000000235698741",
31
+ "AT611904300234573201",
32
+ "AZ21NABZ00000000137010001944",
33
+ "BA391290079401028494",
34
+ "BE68539007547034",
35
+ "BG80BNBG96611020345678",
36
+ "BH67BMAG00001299123456",
37
+ "BR9700360305000010009795493P1",
38
+ "CH9300762011623852957",
39
+ "CY17002001280000001200527600",
40
+ "CZ6508000000192000145399",
41
+ "DE89370400440532013000",
42
+ "DK5000400440116243",
43
+ "DO28BAGR00000001212453611324",
44
+ "EE382200221020145685",
45
+ "ES9121000418450200051332",
46
+ "FI2112345600000785",
47
+ "FO7630004440960235",
48
+ "FR1420041010050500013M02606",
49
+ "GB29NWBK60161331926819",
50
+ "GE29NB0000000101904917",
51
+ "GI75NWBK000000007099453",
52
+ "GL4330003330229543",
53
+ "GR1601101250000000012300695",
54
+ "HR1210010051863000160",
55
+ "HU42117730161111101800000000",
56
+ "IE29AIBK93115212345678",
57
+ "IL620108000000099999999",
58
+ "IS140159260076545510730339",
59
+ "IT60X0542811101000000123456",
60
+ "JO94CBJO0010000000000131000302",
61
+ "KW81CBKU0000000000001234560101",
62
+ "KZ86125KZT5004100100",
63
+ "LB62099900000001001901229114",
64
+ "LI21088100002324013AA",
65
+ "LT121000011101001000",
66
+ "LU280019400644750000",
67
+ "LV80BANK0000435195001",
68
+ "MC1112739000700011111000h79",
69
+ "MD24AG000225100013104168",
70
+ "ME25505000012345678951",
71
+ "MK07300000000042425",
72
+ "MR1300020001010000123456753",
73
+ "MT84MALT011000012345MTLCAST001S",
74
+ "MU17BOMM0101101030300200000MUR",
75
+ "NL91ABNA0417164300",
76
+ "NO9386011117947",
77
+ "PL27114020040000300201355387",
78
+ "PK36SCBL0000001123456702",
79
+ "PT50000201231234567890154",
80
+ "QA58DOHB00001234567890ABCDEFG",
81
+ "RO49AAAA1B31007593840000",
82
+ "RS35260005601001611379",
83
+ "SA0380000000608010167519",
84
+ "SE3550000000054910000003",
85
+ "SI56191000000123438",
86
+ "SK3112000000198742637541",
87
+ "SM86U0322509800000000270100",
88
+ "TN5914207207100707129648",
89
+ "TR330006100519786457841326",
90
+ "UA173052990006762462622943782"
91
+ ].each do |address|
92
+ describe address do
93
+ it { should_not have_errors_on_iban }
94
+ end
95
+ end
96
+
97
+ [
98
+ "random string",
99
+ 12345698765432,
100
+ "gb99 %BC",
101
+ "NOW9386011117947",
102
+ "GB69 7654 1234 5698 7654 32",
103
+ "GB99 WEST 1234 5698 7654 32",
104
+ "RO7999991B31007593840000"
105
+ ].each do |address|
106
+ describe address do
107
+ it { should have_errors_on_iban.because("is invalid") }
108
+ end
109
+ end
110
+
111
+ describe "" do
112
+ it { should have_errors_on_iban.because("is missing") }
113
+ end
114
+
115
+ describe nil do
116
+ it { should have_errors_on_iban.because("is missing") }
117
+ end
118
+
119
+ describe "with optional config" do
120
+ let(:options) { { optional: true } }
121
+ describe "" do
122
+ it { should_not have_errors_on_iban }
123
+ end
124
+
125
+ describe nil do
126
+ it { should_not have_errors_on_iban }
127
+ end
128
+ end
129
+
130
+ describe "custom error messages" do
131
+ describe "invalid example" do
132
+ let(:options) { { message_for_invalid: "just because it's invalid" } }
133
+ it { should have_errors_on_iban.because("just because it's invalid") }
134
+ end
135
+ describe "" do
136
+ let(:options) { { message_for_missing: "is blank" } }
137
+ it { should have_errors_on_iban.because("is blank") }
138
+ end
139
+ describe nil do
140
+ let(:options) { { message_for_missing: "is blank" } }
141
+ it { should have_errors_on_iban.because("is blank") }
142
+ end
143
+ end
144
+
145
+ describe "i18n" do
146
+ before(:each) do
147
+ allow(I18n.config).to receive(:locale).and_return(locale)
148
+ end
149
+
150
+ unless defined?(ActiveModel)
151
+ describe "missing locale" do
152
+ let(:locale) { :ir }
153
+ describe "invalid exmaple" do
154
+ it { should have_errors_on_iban.because("is invalid") }
155
+ end
156
+ end
157
+ end
158
+ end
159
+ unless defined?(ActiveModel)
160
+ describe "without i18n" do
161
+ before(:each) { hide_const("I18n") }
162
+ describe "invalid@exmaple." do
163
+ it { should have_errors_on_iban.because("is invalid") }
164
+ end
165
+ end
166
+ end
167
+ end
168
+
169
+ it_should_behave_like :all_specs
170
+
171
+ if defined?(ActiveModel)
172
+ describe "shorthand ActiveModel validation" do
173
+ subject do |example|
174
+ user = Class.new do
175
+ def initialize(iban)
176
+ @iban = iban.freeze
177
+ end
178
+ attr_reader :iban
179
+ include ActiveModel::Validations
180
+ validates :iban, iban_format: example.example_group_instance.options
181
+ end
182
+ example.example_group_instance.class::User = user
183
+ user.new(example.example_group_instance.iban).tap(&:valid?).errors.full_messages
184
+ end
185
+
186
+ it_should_behave_like :all_specs
187
+ end
188
+ end
189
+ end
@@ -0,0 +1,22 @@
1
+ $:.unshift File.expand_path('../lib', __FILE__)
2
+ require 'validates_iban_format_of/version'
3
+
4
+ spec = Gem::Specification.new do |s|
5
+ s.name = 'validates_iban_format_of'
6
+ s.version = ValidatesIbanFormatOf::VERSION
7
+ s.summary = 'Validate iban'
8
+ s.description = s.summary
9
+ s.authors = ['Dimitar Kostov']
10
+ s.email = ['mitko.kostov@gmail.com']
11
+ s.homepage = 'https://github.com/mytrile/validates_iban_format_of'
12
+ s.license = 'MIT'
13
+ s.test_files = s.files.grep(%r{^spec/})
14
+ s.files = `git ls-files`.split($/)
15
+ s.require_paths = ['lib']
16
+
17
+ s.add_dependency 'i18n', '~> 0.7'
18
+ s.add_dependency 'activesupport', '~> 4.2'
19
+ s.add_dependency 'iban-tools', '~> 1.1'
20
+ s.add_development_dependency 'bundler', '~> 1.13'
21
+ s.add_development_dependency 'rspec', '~> 3.6'
22
+ end
metadata ADDED
@@ -0,0 +1,130 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: validates_iban_format_of
3
+ version: !ruby/object:Gem::Version
4
+ version: 1.0.0
5
+ platform: ruby
6
+ authors:
7
+ - Dimitar Kostov
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2017-08-17 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: i18n
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '0.7'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '0.7'
27
+ - !ruby/object:Gem::Dependency
28
+ name: activesupport
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '4.2'
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '4.2'
41
+ - !ruby/object:Gem::Dependency
42
+ name: iban-tools
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: '1.1'
48
+ type: :runtime
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: '1.1'
55
+ - !ruby/object:Gem::Dependency
56
+ name: bundler
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - "~>"
60
+ - !ruby/object:Gem::Version
61
+ version: '1.13'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - "~>"
67
+ - !ruby/object:Gem::Version
68
+ version: '1.13'
69
+ - !ruby/object:Gem::Dependency
70
+ name: rspec
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - "~>"
74
+ - !ruby/object:Gem::Version
75
+ version: '3.6'
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - "~>"
81
+ - !ruby/object:Gem::Version
82
+ version: '3.6'
83
+ description: Validate iban
84
+ email:
85
+ - mitko.kostov@gmail.com
86
+ executables: []
87
+ extensions: []
88
+ extra_rdoc_files: []
89
+ files:
90
+ - ".gitignore"
91
+ - ".rspec"
92
+ - Gemfile
93
+ - LICENSE
94
+ - README.md
95
+ - Rakefile
96
+ - config/locales/en.yml
97
+ - lib/validates_iban_format_of.rb
98
+ - lib/validates_iban_format_of/active_model.rb
99
+ - lib/validates_iban_format_of/railtie.rb
100
+ - lib/validates_iban_format_of/rspec_matcher.rb
101
+ - lib/validates_iban_format_of/version.rb
102
+ - spec/rspec_matcher_spec.rb
103
+ - spec/spec_helper.rb
104
+ - spec/validates_iban_format_of_spec.rb
105
+ - validates_iban_format_of.gemspec
106
+ homepage: https://github.com/mytrile/validates_iban_format_of
107
+ licenses:
108
+ - MIT
109
+ metadata: {}
110
+ post_install_message:
111
+ rdoc_options: []
112
+ require_paths:
113
+ - lib
114
+ required_ruby_version: !ruby/object:Gem::Requirement
115
+ requirements:
116
+ - - ">="
117
+ - !ruby/object:Gem::Version
118
+ version: '0'
119
+ required_rubygems_version: !ruby/object:Gem::Requirement
120
+ requirements:
121
+ - - ">="
122
+ - !ruby/object:Gem::Version
123
+ version: '0'
124
+ requirements: []
125
+ rubyforge_project:
126
+ rubygems_version: 2.6.8
127
+ signing_key:
128
+ specification_version: 4
129
+ summary: Validate iban
130
+ test_files: []