ifsc 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.
- checksums.yaml +7 -0
- data/CONTRIBUTING.md +23 -0
- data/Gemfile +4 -0
- data/README.md +198 -0
- data/ifsc.gemspec +24 -0
- data/src/IFSC.json +1 -0
- data/src/banknames.json +1349 -0
- data/src/ruby/ifsc.rb +108 -0
- data/src/sublet.json +1109 -0
- data/tests/ruby/ifsc_spec.rb +113 -0
- data/tests/ruby/validate_spec.rb +13 -0
- data/tests/validator_asserts.json +26 -0
- metadata +101 -0
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
require 'ifsc'
|
|
2
|
+
|
|
3
|
+
describe Razorpay::IFSC::IFSC do
|
|
4
|
+
let(:mocked_response) do
|
|
5
|
+
{
|
|
6
|
+
'BANK' => 'Kotak Mahindra Bank',
|
|
7
|
+
'IFSC' => 'KKBK0000261',
|
|
8
|
+
'BRANCH' => 'GURGAON',
|
|
9
|
+
'ADDRESS' => 'JMD REGENT SQUARE,MEHRAULI GURGAON ROAD,OPPOSITE BRISTOL HOTEL,',
|
|
10
|
+
'CONTACT' => '4131000',
|
|
11
|
+
'CITY' => 'GURGAON',
|
|
12
|
+
'DISTRICT' => 'GURGAON',
|
|
13
|
+
'STATE' => 'HARYAN'
|
|
14
|
+
}
|
|
15
|
+
end
|
|
16
|
+
let(:dummy_code) { 'foo' }
|
|
17
|
+
let(:code_double) { double('code double') }
|
|
18
|
+
let(:code) { described_class.new(mocked_response['IFSC']) }
|
|
19
|
+
|
|
20
|
+
describe '.get' do
|
|
21
|
+
before do
|
|
22
|
+
allow(code).to receive(:api_data).and_return(mocked_response)
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
it 'should parse the IFSC details correctly from the server' do
|
|
26
|
+
fetched_code = code.get
|
|
27
|
+
|
|
28
|
+
expect(fetched_code.bank).to eq mocked_response['BANK']
|
|
29
|
+
expect(fetched_code.ifsc).to eq mocked_response['IFSC']
|
|
30
|
+
expect(fetched_code.branch).to eq mocked_response['BRANCH']
|
|
31
|
+
expect(fetched_code.address).to eq mocked_response['ADDRESS']
|
|
32
|
+
expect(fetched_code.contact).to eq mocked_response['CONTACT']
|
|
33
|
+
expect(fetched_code.city).to eq mocked_response['CITY']
|
|
34
|
+
expect(fetched_code.district).to eq mocked_response['DISTRICT']
|
|
35
|
+
expect(fetched_code.state).to eq mocked_response['STATE']
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
it 'should set @valid to true and skip local validation' do
|
|
39
|
+
fetched_code = code.get
|
|
40
|
+
|
|
41
|
+
expect(fetched_code.instance_variable_get(:@valid)).to eq true
|
|
42
|
+
expect(fetched_code.valid?).to eq true
|
|
43
|
+
end
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
describe '.get_bank_name' do
|
|
47
|
+
before do
|
|
48
|
+
allow(code).to receive(:api_data).and_return(mocked_response)
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
it 'should load the bank name into the object' do
|
|
52
|
+
expect(code.bank).to be_nil
|
|
53
|
+
code.get
|
|
54
|
+
expect(code.bank).to eq mocked_response['BANK']
|
|
55
|
+
end
|
|
56
|
+
end
|
|
57
|
+
|
|
58
|
+
describe '.class' do
|
|
59
|
+
describe '.find' do
|
|
60
|
+
it 'should validate and return the fetched object' do
|
|
61
|
+
expect(described_class).to receive(:new).with(dummy_code).and_return(code_double)
|
|
62
|
+
expect(code_double).to receive(:get)
|
|
63
|
+
described_class.find(dummy_code)
|
|
64
|
+
end
|
|
65
|
+
end
|
|
66
|
+
|
|
67
|
+
describe '#bank_name_for(code)' do
|
|
68
|
+
it 'should return the correct bank name' do
|
|
69
|
+
expect(described_class.bank_name_for(mocked_response['IFSC'])).to eq mocked_response['BANK']
|
|
70
|
+
end
|
|
71
|
+
|
|
72
|
+
it 'should return the correct sublet bank name' do
|
|
73
|
+
expect(described_class.bank_name_for('ALLA0AU1002')).to eq 'Allahabad Up Gramin Bank'
|
|
74
|
+
end
|
|
75
|
+
end
|
|
76
|
+
|
|
77
|
+
describe '#valid?' do
|
|
78
|
+
it 'should validate regular numeric branch codes' do
|
|
79
|
+
expect(described_class.valid?('KKBK0000261')).to eq true
|
|
80
|
+
expect(described_class.valid?('HDFC0002854')).to eq true
|
|
81
|
+
expect(described_class.valid?('KARB0000001')).to eq true
|
|
82
|
+
end
|
|
83
|
+
|
|
84
|
+
it 'should validate range branch codes' do
|
|
85
|
+
expect(described_class.valid?('DLXB0000097')).to eq true
|
|
86
|
+
end
|
|
87
|
+
|
|
88
|
+
it 'should validate string branch codes' do
|
|
89
|
+
expect(described_class.valid?('BOTM0NEEMRA')).to eq true
|
|
90
|
+
expect(described_class.valid?('BARB0ZOOTIN')).to eq true
|
|
91
|
+
end
|
|
92
|
+
|
|
93
|
+
it 'should not validate invalid codes' do
|
|
94
|
+
expect(described_class.valid?('BOTM0XEEMRA')).to eq false
|
|
95
|
+
expect(described_class.valid?('BOTX0000000')).to eq false
|
|
96
|
+
expect(described_class.valid?('BOTX0000500')).to eq false
|
|
97
|
+
expect(described_class.valid?('BOTM0000500')).to eq false
|
|
98
|
+
expect(described_class.valid?('DLXB0000500')).to eq false
|
|
99
|
+
end
|
|
100
|
+
end
|
|
101
|
+
|
|
102
|
+
describe '#validate!' do
|
|
103
|
+
context 'when valid? returns false' do
|
|
104
|
+
before do
|
|
105
|
+
allow(described_class).to receive(:valid?).with(dummy_code).and_return(false)
|
|
106
|
+
end
|
|
107
|
+
it 'should raise an error when validations fail' do
|
|
108
|
+
expect { described_class.validate!(dummy_code) }.to raise_error(Razorpay::IFSC::InvalidCodeError)
|
|
109
|
+
end
|
|
110
|
+
end
|
|
111
|
+
end
|
|
112
|
+
end
|
|
113
|
+
end
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
require 'ifsc'
|
|
2
|
+
|
|
3
|
+
describe Razorpay::IFSC::IFSC do
|
|
4
|
+
tests = JSON.parse File.read 'tests/validator_asserts.json'
|
|
5
|
+
|
|
6
|
+
tests.each do |test_name, test_cases|
|
|
7
|
+
it "should #{test_name}" do
|
|
8
|
+
test_cases.each do |ifsc, expected_value|
|
|
9
|
+
expect(Razorpay::IFSC::IFSC.valid? ifsc).to eq expected_value
|
|
10
|
+
end
|
|
11
|
+
end
|
|
12
|
+
end
|
|
13
|
+
end
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
{
|
|
2
|
+
"testBasicValidator": {
|
|
3
|
+
"KKBK0000261": true,
|
|
4
|
+
"HDFC0002854": true,
|
|
5
|
+
"KARB0000001": true
|
|
6
|
+
},
|
|
7
|
+
"testValidateInsideRange": {
|
|
8
|
+
"DLXB0000097": true
|
|
9
|
+
},
|
|
10
|
+
"testValidateStringLookup": {
|
|
11
|
+
"BOTM0NEEMRA": true,
|
|
12
|
+
"BARB0ZOOTIN": true
|
|
13
|
+
},
|
|
14
|
+
"testValidateInvalidCode": {
|
|
15
|
+
"BOTM0XEEMRA": false,
|
|
16
|
+
"BOTX0XEEMRA": false,
|
|
17
|
+
"BOTX0000000": false,
|
|
18
|
+
"BOTX0000500": false,
|
|
19
|
+
"BOTM0000500": false,
|
|
20
|
+
"DLXB0000500": false
|
|
21
|
+
},
|
|
22
|
+
"testHPSC": {
|
|
23
|
+
"HPSC0000406": true,
|
|
24
|
+
"HPSC0000300": false
|
|
25
|
+
}
|
|
26
|
+
}
|
metadata
ADDED
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
|
2
|
+
name: ifsc
|
|
3
|
+
version: !ruby/object:Gem::Version
|
|
4
|
+
version: 0.0.1
|
|
5
|
+
platform: ruby
|
|
6
|
+
authors:
|
|
7
|
+
- Abhay Rana
|
|
8
|
+
autorequire:
|
|
9
|
+
bindir: bin
|
|
10
|
+
cert_chain: []
|
|
11
|
+
date: 2017-08-03 00:00:00.000000000 Z
|
|
12
|
+
dependencies:
|
|
13
|
+
- !ruby/object:Gem::Dependency
|
|
14
|
+
name: httparty
|
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
|
16
|
+
requirements:
|
|
17
|
+
- - "~>"
|
|
18
|
+
- !ruby/object:Gem::Version
|
|
19
|
+
version: '0.15'
|
|
20
|
+
type: :runtime
|
|
21
|
+
prerelease: false
|
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
23
|
+
requirements:
|
|
24
|
+
- - "~>"
|
|
25
|
+
- !ruby/object:Gem::Version
|
|
26
|
+
version: '0.15'
|
|
27
|
+
- !ruby/object:Gem::Dependency
|
|
28
|
+
name: rake
|
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
|
30
|
+
requirements:
|
|
31
|
+
- - "~>"
|
|
32
|
+
- !ruby/object:Gem::Version
|
|
33
|
+
version: '10.5'
|
|
34
|
+
type: :development
|
|
35
|
+
prerelease: false
|
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
37
|
+
requirements:
|
|
38
|
+
- - "~>"
|
|
39
|
+
- !ruby/object:Gem::Version
|
|
40
|
+
version: '10.5'
|
|
41
|
+
- !ruby/object:Gem::Dependency
|
|
42
|
+
name: rspec
|
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
|
44
|
+
requirements:
|
|
45
|
+
- - "~>"
|
|
46
|
+
- !ruby/object:Gem::Version
|
|
47
|
+
version: '3.6'
|
|
48
|
+
type: :development
|
|
49
|
+
prerelease: false
|
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
51
|
+
requirements:
|
|
52
|
+
- - "~>"
|
|
53
|
+
- !ruby/object:Gem::Version
|
|
54
|
+
version: '3.6'
|
|
55
|
+
description: A simple gem by @razorpay to help you validate your IFSC codes. IFSC
|
|
56
|
+
codes are bank codes within India
|
|
57
|
+
email:
|
|
58
|
+
- nemo@razorpay.com
|
|
59
|
+
executables: []
|
|
60
|
+
extensions: []
|
|
61
|
+
extra_rdoc_files: []
|
|
62
|
+
files:
|
|
63
|
+
- CONTRIBUTING.md
|
|
64
|
+
- Gemfile
|
|
65
|
+
- README.md
|
|
66
|
+
- ifsc.gemspec
|
|
67
|
+
- src/IFSC.json
|
|
68
|
+
- src/banknames.json
|
|
69
|
+
- src/ruby/ifsc.rb
|
|
70
|
+
- src/sublet.json
|
|
71
|
+
- tests/ruby/ifsc_spec.rb
|
|
72
|
+
- tests/ruby/validate_spec.rb
|
|
73
|
+
- tests/validator_asserts.json
|
|
74
|
+
homepage: https://ifsc.razorpay.com
|
|
75
|
+
licenses:
|
|
76
|
+
- MIT
|
|
77
|
+
metadata: {}
|
|
78
|
+
post_install_message:
|
|
79
|
+
rdoc_options: []
|
|
80
|
+
require_paths:
|
|
81
|
+
- src/ruby
|
|
82
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
|
83
|
+
requirements:
|
|
84
|
+
- - ">="
|
|
85
|
+
- !ruby/object:Gem::Version
|
|
86
|
+
version: '0'
|
|
87
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
|
88
|
+
requirements:
|
|
89
|
+
- - ">="
|
|
90
|
+
- !ruby/object:Gem::Version
|
|
91
|
+
version: '0'
|
|
92
|
+
requirements: []
|
|
93
|
+
rubyforge_project:
|
|
94
|
+
rubygems_version: 2.6.12
|
|
95
|
+
signing_key:
|
|
96
|
+
specification_version: 4
|
|
97
|
+
summary: IFSC code database to help you validate IFSC codes
|
|
98
|
+
test_files:
|
|
99
|
+
- tests/ruby/ifsc_spec.rb
|
|
100
|
+
- tests/ruby/validate_spec.rb
|
|
101
|
+
- tests/validator_asserts.json
|