iso-swift 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/.coveralls.yml +1 -0
- data/.gitignore +23 -0
- data/.rvmrc +62 -0
- data/.travis.yml +9 -0
- data/Gemfile +3 -0
- data/LICENSE.txt +22 -0
- data/README.md +67 -0
- data/Rakefile +11 -0
- data/iso.gemspec +27 -0
- data/lib/data/ad.yml +21 -0
- data/lib/data/ae.yml +1288 -0
- data/lib/data/af.yml +73 -0
- data/lib/data/ag.yml +69 -0
- data/lib/data/ai.yml +21 -0
- data/lib/data/al.yml +141 -0
- data/lib/data/am.yml +89 -0
- data/lib/data/ao.yml +113 -0
- data/lib/data/ar.yml +377 -0
- data/lib/data/as.yml +5 -0
- data/lib/data/at.yml +3783 -0
- data/lib/data/au.yml +1245 -0
- data/lib/data/aw.yml +25 -0
- data/lib/data/az.yml +197 -0
- data/lib/data/ba.yml +122 -0
- data/lib/data/bb.yml +13 -0
- data/lib/data/bd.yml +3405 -0
- data/lib/data/be.yml +1169 -0
- data/lib/data/bf.yml +62 -0
- data/lib/data/bg.yml +185 -0
- data/lib/data/bh.yml +525 -0
- data/lib/data/bi.yml +49 -0
- data/lib/data/bj.yml +58 -0
- data/lib/data/bm.yml +89 -0
- data/lib/data/bo.yml +145 -0
- data/lib/data/br.yml +949 -0
- data/lib/data/bs.yml +274 -0
- data/lib/data/bt.yml +29 -0
- data/lib/data/bw.yml +129 -0
- data/lib/data/by.yml +177 -0
- data/lib/data/bz.yml +49 -0
- data/lib/data/ca.yml +985 -0
- data/lib/data/cf.yml +21 -0
- data/lib/data/cg.yml +65 -0
- data/lib/data/ch.yml +5995 -0
- data/lib/data/ck.yml +17 -0
- data/lib/data/cl.yml +173 -0
- data/lib/data/cm.yml +157 -0
- data/lib/data/cn.yml +7512 -0
- data/lib/data/co.yml +441 -0
- data/lib/data/cr.yml +78 -0
- data/lib/data/cu.yml +57 -0
- data/lib/data/cv.yml +61 -0
- data/lib/data/cy.yml +409 -0
- data/lib/data/cz.yml +214 -0
- data/lib/data/de.yml +17583 -0
- data/lib/data/dj.yml +45 -0
- data/lib/data/dk.yml +793 -0
- data/lib/data/dm.yml +33 -0
- data/lib/data/do.yml +121 -0
- data/lib/data/dz.yml +729 -0
- data/lib/data/ec.yml +593 -0
- data/lib/data/ee.yml +57 -0
- data/lib/data/eg.yml +4145 -0
- data/lib/data/er.yml +13 -0
- data/lib/data/es.yml +1615 -0
- data/lib/data/et.yml +117 -0
- data/lib/data/fi.yml +213 -0
- data/lib/data/fj.yml +25 -0
- data/lib/data/fo.yml +9 -0
- data/lib/data/fr.yml +7318 -0
- data/lib/data/ga.yml +97 -0
- data/lib/data/gb.yml +8149 -0
- data/lib/data/gd.yml +25 -0
- data/lib/data/ge.yml +245 -0
- data/lib/data/gf.yml +5 -0
- data/lib/data/gg.yml +123 -0
- data/lib/data/gh.yml +213 -0
- data/lib/data/gi.yml +53 -0
- data/lib/data/gl.yml +5 -0
- data/lib/data/gm.yml +57 -0
- data/lib/data/gn.yml +61 -0
- data/lib/data/gp.yml +41 -0
- data/lib/data/gq.yml +41 -0
- data/lib/data/gr.yml +309 -0
- data/lib/data/gt.yml +85 -0
- data/lib/data/gu.yml +13 -0
- data/lib/data/gw.yml +17 -0
- data/lib/data/gy.yml +33 -0
- data/lib/data/hk.yml +1633 -0
- data/lib/data/hn.yml +93 -0
- data/lib/data/hr.yml +249 -0
- data/lib/data/ht.yml +29 -0
- data/lib/data/hu.yml +201 -0
- data/lib/data/id.yml +1821 -0
- data/lib/data/ie.yml +1775 -0
- data/lib/data/il.yml +201 -0
- data/lib/data/im.yml +94 -0
- data/lib/data/in.yml +14658 -0
- data/lib/data/iq.yml +229 -0
- data/lib/data/is.yml +29 -0
- data/lib/data/it.yml +3035 -0
- data/lib/data/je.yml +210 -0
- data/lib/data/jm.yml +29 -0
- data/lib/data/jo.yml +357 -0
- data/lib/data/jp.yml +1401 -0
- data/lib/data/ke.yml +441 -0
- data/lib/data/kg.yml +97 -0
- data/lib/data/kh.yml +133 -0
- data/lib/data/ki.yml +5 -0
- data/lib/data/km.yml +21 -0
- data/lib/data/kw.yml +498 -0
- data/lib/data/ky.yml +331 -0
- data/lib/data/kz.yml +205 -0
- data/lib/data/lb.yml +397 -0
- data/lib/data/li.yml +85 -0
- data/lib/data/lk.yml +225 -0
- data/lib/data/lr.yml +41 -0
- data/lib/data/ls.yml +21 -0
- data/lib/data/lt.yml +87 -0
- data/lib/data/lu.yml +1445 -0
- data/lib/data/lv.yml +121 -0
- data/lib/data/ly.yml +873 -0
- data/lib/data/ma.yml +289 -0
- data/lib/data/mc.yml +94 -0
- data/lib/data/me.yml +49 -0
- data/lib/data/mg.yml +49 -0
- data/lib/data/ml.yml +70 -0
- data/lib/data/mm.yml +73 -0
- data/lib/data/mn.yml +61 -0
- data/lib/data/mr.yml +73 -0
- data/lib/data/mt.yml +97 -0
- data/lib/data/mu.yml +133 -0
- data/lib/data/mv.yml +33 -0
- data/lib/data/mw.yml +85 -0
- data/lib/data/mx.yml +437 -0
- data/lib/data/my.yml +517 -0
- data/lib/data/mz.yml +73 -0
- data/lib/data/na.yml +53 -0
- data/lib/data/ne.yml +54 -0
- data/lib/data/ng.yml +613 -0
- data/lib/data/ni.yml +29 -0
- data/lib/data/nl.yml +2270 -0
- data/lib/data/no.yml +625 -0
- data/lib/data/np.yml +157 -0
- data/lib/data/nz.yml +226 -0
- data/lib/data/om.yml +121 -0
- data/lib/data/pa.yml +293 -0
- data/lib/data/pe.yml +77 -0
- data/lib/data/pf.yml +13 -0
- data/lib/data/pg.yml +25 -0
- data/lib/data/ph.yml +245 -0
- data/lib/data/pk.yml +2925 -0
- data/lib/data/pl.yml +722 -0
- data/lib/data/pr.yml +81 -0
- data/lib/data/pt.yml +424 -0
- data/lib/data/py.yml +98 -0
- data/lib/data/qa.yml +249 -0
- data/lib/data/ro.yml +585 -0
- data/lib/data/rs.yml +321 -0
- data/lib/data/rw.yml +73 -0
- data/lib/data/sa.yml +349 -0
- data/lib/data/sd.yml +298 -0
- data/lib/data/se.yml +421 -0
- data/lib/data/sg.yml +1071 -0
- data/lib/data/si.yml +141 -0
- data/lib/data/sk.yml +269 -0
- data/lib/data/sl.yml +65 -0
- data/lib/data/sm.yml +93 -0
- data/lib/data/sn.yml +98 -0
- data/lib/data/so.yml +5 -0
- data/lib/data/ss.yml +101 -0
- data/lib/data/sv.yml +57 -0
- data/lib/data/sz.yml +21 -0
- data/lib/data/td.yml +46 -0
- data/lib/data/tg.yml +102 -0
- data/lib/data/th.yml +271 -0
- data/lib/data/tj.yml +77 -0
- data/lib/data/tl.yml +13 -0
- data/lib/data/tm.yml +41 -0
- data/lib/data/tn.yml +289 -0
- data/lib/data/tr.yml +5446 -0
- data/lib/data/tt.yml +41 -0
- data/lib/data/ua.yml +1333 -0
- data/lib/data/ug.yml +129 -0
- data/lib/data/us.yml +9428 -0
- data/lib/data/uy.yml +142 -0
- data/lib/data/uz.yml +85 -0
- data/lib/data/vn.yml +2199 -0
- data/lib/data/vu.yml +29 -0
- data/lib/data/ye.yml +249 -0
- data/lib/data/za.yml +824 -0
- data/lib/data/zm.yml +94 -0
- data/lib/data/zw.yml +113 -0
- data/lib/iso.rb +2 -0
- data/lib/iso/swift.rb +225 -0
- data/lib/iso/version.rb +3 -0
- data/spec/iso_swift_spec.rb +192 -0
- data/spec/spec_helper.rb +3 -0
- metadata +314 -0
data/lib/data/zm.yml
ADDED
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
---
|
|
2
|
+
ABBAZMLU:
|
|
3
|
+
institution: AB BANK ZAMBIA LTD.
|
|
4
|
+
city: LUSAKA
|
|
5
|
+
branch: ''
|
|
6
|
+
AZAMZMLU:
|
|
7
|
+
institution: ACCESS BANK ZAMBIA LIMITED
|
|
8
|
+
city: LUSAKA
|
|
9
|
+
branch: ''
|
|
10
|
+
FMBZZMLX:
|
|
11
|
+
institution: AFRICAN BANKING CORPORATION ZAMBIA
|
|
12
|
+
city: LUSAKA
|
|
13
|
+
branch: ''
|
|
14
|
+
BKCHZMLU:
|
|
15
|
+
institution: BANK OF CHINA (ZAMBIA) LTD
|
|
16
|
+
city: LUSAKA
|
|
17
|
+
branch: ''
|
|
18
|
+
BAZAZMLU:
|
|
19
|
+
institution: BANK OF ZAMBIA
|
|
20
|
+
city: LUSAKA
|
|
21
|
+
branch: AUTHORISED SETTLEMENT AGENT
|
|
22
|
+
BAZAZMLUASA:
|
|
23
|
+
institution: BANK OF ZAMBIA
|
|
24
|
+
city: LUSAKA
|
|
25
|
+
branch: ''
|
|
26
|
+
BARCZMLXKPC:
|
|
27
|
+
institution: BARCLAYS BANK PLC ZAMBIA
|
|
28
|
+
city: KITWE
|
|
29
|
+
branch: KITWE PROCESSING CENTRE
|
|
30
|
+
BARCZMLX:
|
|
31
|
+
institution: BARCLAYS BANK PLC ZAMBIA
|
|
32
|
+
city: LUSAKA
|
|
33
|
+
branch: HEAD OFFICE
|
|
34
|
+
CVMTZMLU:
|
|
35
|
+
institution: CAVMONT MERCHANT BANK LIMITED
|
|
36
|
+
city: LUSAKA
|
|
37
|
+
branch: ''
|
|
38
|
+
CITIZMLU:
|
|
39
|
+
institution: CITIBANK ZAMBIA LTD
|
|
40
|
+
city: LUSAKA
|
|
41
|
+
branch: ''
|
|
42
|
+
ECOCZMLU:
|
|
43
|
+
institution: ECOBANK ZAMBIA
|
|
44
|
+
city: LUSAKA
|
|
45
|
+
branch: ''
|
|
46
|
+
ZFBAZMLU:
|
|
47
|
+
institution: FINANCE BANK ZAMBIA LIMITED.
|
|
48
|
+
city: LUSAKA
|
|
49
|
+
branch: ''
|
|
50
|
+
FALLZMLU:
|
|
51
|
+
institution: FIRST ALLIANCE BANK
|
|
52
|
+
city: LUSAKA
|
|
53
|
+
branch: ''
|
|
54
|
+
ICZAZMLU:
|
|
55
|
+
institution: FIRST CAPITAL BANK (Z) LTD (FORMERLY KNOWN AS INTERNATIONAL COMMERCIAL
|
|
56
|
+
BANK ZAMBIA LIMITED)
|
|
57
|
+
city: LUSAKA
|
|
58
|
+
branch: ''
|
|
59
|
+
FIRNZMLX:
|
|
60
|
+
institution: FIRST NATIONAL BANK ZAMBIA LIMITED
|
|
61
|
+
city: LUSAKA
|
|
62
|
+
branch: ''
|
|
63
|
+
INZAZMLX:
|
|
64
|
+
institution: INDO-ZAMBIA BANK
|
|
65
|
+
city: LUSAKA
|
|
66
|
+
branch: ''
|
|
67
|
+
IDHZZMLU:
|
|
68
|
+
institution: INTERMARKET BANKING CORPORATION LIMITED
|
|
69
|
+
city: LUSAKA
|
|
70
|
+
branch: ''
|
|
71
|
+
VSTRZMLU:
|
|
72
|
+
institution: INVESTRUST BANK LTD
|
|
73
|
+
city: LUSAKA
|
|
74
|
+
branch: ''
|
|
75
|
+
SBICZMLX:
|
|
76
|
+
institution: STANBIC BANK ZAMBIA LTD.
|
|
77
|
+
city: LUSAKA
|
|
78
|
+
branch: LUSAKA BRANCH
|
|
79
|
+
SCBLZMLX:
|
|
80
|
+
institution: STANDARD CHARTERED BANK ZAMBIA LTD
|
|
81
|
+
city: LUSAKA
|
|
82
|
+
branch: ''
|
|
83
|
+
SCBLZMLXSSU:
|
|
84
|
+
institution: STANDARD CHARTERED BANK ZAMBIA LTD
|
|
85
|
+
city: LUSAKA
|
|
86
|
+
branch: SECURITIES SERVICES UNIT
|
|
87
|
+
UNAFZMLU:
|
|
88
|
+
institution: UNITED BANK FOR AFRICA ZAMBIA LIMITED
|
|
89
|
+
city: LUSAKA
|
|
90
|
+
branch: ''
|
|
91
|
+
ZNCOZMLU:
|
|
92
|
+
institution: ZAMBIA NATIONAL COMMERCIAL
|
|
93
|
+
city: LUSAKA
|
|
94
|
+
branch: ''
|
data/lib/data/zw.yml
ADDED
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
---
|
|
2
|
+
FMBZZWHX:
|
|
3
|
+
institution: AFRICAN BANKING CORP.OF ZIMBABWE LTD.
|
|
4
|
+
city: HARARE
|
|
5
|
+
branch: ''
|
|
6
|
+
AGRZZWHA:
|
|
7
|
+
institution: AGRICULTURAL BANK OF ZIMBABWE LTD
|
|
8
|
+
city: HARARE
|
|
9
|
+
branch: ''
|
|
10
|
+
BARCZWHX:
|
|
11
|
+
institution: BARCLAYS BANK OF ZIMBABWE
|
|
12
|
+
city: HARARE
|
|
13
|
+
branch: ''
|
|
14
|
+
CBBLZWHX:
|
|
15
|
+
institution: CAPITAL BANK CORPORATION LTD
|
|
16
|
+
city: HARARE
|
|
17
|
+
branch: ''
|
|
18
|
+
CABSZWHA:
|
|
19
|
+
institution: CENTRAL AFRICA BUILDING SOCIETY
|
|
20
|
+
city: HARARE
|
|
21
|
+
branch: ''
|
|
22
|
+
COCUZWHA:
|
|
23
|
+
institution: COMESA CLEARING HOUSE
|
|
24
|
+
city: HARARE
|
|
25
|
+
branch: ''
|
|
26
|
+
COBZZWHA:
|
|
27
|
+
institution: COMMERCIAL BANK OF ZIMBABWE LIMITED
|
|
28
|
+
city: HARARE
|
|
29
|
+
branch: ''
|
|
30
|
+
ECOCZWHX:
|
|
31
|
+
institution: ECOBANK ZIMBABWE LIMITED
|
|
32
|
+
city: HARARE
|
|
33
|
+
branch: ''
|
|
34
|
+
FBCPZWHA:
|
|
35
|
+
institution: FBC BANK LTD
|
|
36
|
+
city: HARARE
|
|
37
|
+
branch: ''
|
|
38
|
+
ZDBLZWHA:
|
|
39
|
+
institution: INFRASTRUCTURE DEVELOPMENT BANK OF ZIMBABWE ED
|
|
40
|
+
city: HARARE
|
|
41
|
+
branch: ''
|
|
42
|
+
IFMBZWHA:
|
|
43
|
+
institution: INTERFINBANK
|
|
44
|
+
city: HARARE
|
|
45
|
+
branch: ''
|
|
46
|
+
KFISZWHA:
|
|
47
|
+
institution: KINGDOM BANK LIMITED (KBL)
|
|
48
|
+
city: HARARE
|
|
49
|
+
branch: ''
|
|
50
|
+
MBCAZWHX:
|
|
51
|
+
institution: MBCA BANK LIMITED
|
|
52
|
+
city: HARARE
|
|
53
|
+
branch: ''
|
|
54
|
+
MBOZZWHA:
|
|
55
|
+
institution: METROPOLITAN BANK OF ZIMBABWE LTD
|
|
56
|
+
city: HARARE
|
|
57
|
+
branch: ''
|
|
58
|
+
NMBLZWHXBYO:
|
|
59
|
+
institution: NMB BANK LIMITED
|
|
60
|
+
city: BULAWAYO
|
|
61
|
+
branch: BULAWAYO BRANCH
|
|
62
|
+
NMBLZWHX:
|
|
63
|
+
institution: NMB BANK LIMITED
|
|
64
|
+
city: HARARE
|
|
65
|
+
branch: ''
|
|
66
|
+
PWSBZWHX:
|
|
67
|
+
institution: PEOPLE’S OWN SAVINGS BANK
|
|
68
|
+
city: HARARE
|
|
69
|
+
branch: ''
|
|
70
|
+
REBZZWHQ:
|
|
71
|
+
institution: RESERVE BANK OF ZIMBABWE
|
|
72
|
+
city: HARARE
|
|
73
|
+
branch: ''
|
|
74
|
+
REBZZWHX:
|
|
75
|
+
institution: RESERVE BANK OF ZIMBABWE
|
|
76
|
+
city: HARARE
|
|
77
|
+
branch: ''
|
|
78
|
+
REBZZWHXPCH:
|
|
79
|
+
institution: RESERVE BANK OF ZIMBABWE
|
|
80
|
+
city: HARARE
|
|
81
|
+
branch: ''
|
|
82
|
+
SBICZWHX:
|
|
83
|
+
institution: STANBIC BANK ZIMBABWE LIMITED
|
|
84
|
+
city: HARARE
|
|
85
|
+
branch: ''
|
|
86
|
+
SCBLZWHXSSU:
|
|
87
|
+
institution: STANDARD CHARTERED BANK ZIMBABWE LIMITED
|
|
88
|
+
city: HARARE
|
|
89
|
+
branch: SECURITIES SERVICES UNIT
|
|
90
|
+
SCBLZWHX:
|
|
91
|
+
institution: STANDARD CHARTERED BANK ZIMBABWE LIMITED
|
|
92
|
+
city: HARARE
|
|
93
|
+
branch: ''
|
|
94
|
+
STBLZWHX:
|
|
95
|
+
institution: STEWARD BANK LIMITED
|
|
96
|
+
city: HARARE
|
|
97
|
+
branch: ''
|
|
98
|
+
TTSLZWHX:
|
|
99
|
+
institution: TETRAD INVESTMENT BANK LIMITED
|
|
100
|
+
city: HARARE
|
|
101
|
+
branch: ''
|
|
102
|
+
ZABCZWHA:
|
|
103
|
+
institution: ZIMBABWE ALLIED BANKING GROUP
|
|
104
|
+
city: HARARE
|
|
105
|
+
branch: ''
|
|
106
|
+
ZBCOZWHXBYO:
|
|
107
|
+
institution: ZIMBABWE BANKING CORPORATION LTD.
|
|
108
|
+
city: BULAWAYO
|
|
109
|
+
branch: ''
|
|
110
|
+
ZBCOZWHX:
|
|
111
|
+
institution: ZIMBABWE BANKING CORPORATION LTD.
|
|
112
|
+
city: HARARE
|
|
113
|
+
branch: ''
|
data/lib/iso.rb
ADDED
data/lib/iso/swift.rb
ADDED
|
@@ -0,0 +1,225 @@
|
|
|
1
|
+
require 'yaml'
|
|
2
|
+
require 'countries'
|
|
3
|
+
|
|
4
|
+
module ISO
|
|
5
|
+
|
|
6
|
+
# SWIFT
|
|
7
|
+
#
|
|
8
|
+
# Usage
|
|
9
|
+
# =====
|
|
10
|
+
#
|
|
11
|
+
# require 'iso/swift'
|
|
12
|
+
# ==== new instance - valid SWIFT code
|
|
13
|
+
# swift = ISO::SWIFT.new('PSST FR PP SCE') # => #<ISO::SWIFT:0x007fb4a393e220 @data={"formatted"=>"PSSTFRPPSCE", "bank_code"=>"PSST", "country_code"=>"FR", "country_name"=>"France", "location_code"=>"PP", "branch_code"=>"SCE", "bank_name"=>"LA BANQUE POSTALE", "location_name"=>"ORLEANS", "branch_name"=>"CENTRE FINANCIER DORLEANS LA SOURCE"}, @errors=[]>
|
|
14
|
+
# ==== validation
|
|
15
|
+
# swift.valid? # => true
|
|
16
|
+
# swift.errors # => []
|
|
17
|
+
# ==== attributes
|
|
18
|
+
# swift.original # => "PSST FR PP SCE"
|
|
19
|
+
# swift.formatted # => "PSSTFRPPSCE"
|
|
20
|
+
# swift.bank_code # => "PSST"
|
|
21
|
+
# swift.bank_name # => "LA BANQUE POSTALE"
|
|
22
|
+
# swift.country_code # => "FR"
|
|
23
|
+
# swift.country_name # => "France"
|
|
24
|
+
# swift.location_code # => "PP"
|
|
25
|
+
# swift.location_name # => "ORLEANS"
|
|
26
|
+
# swift.branch_code # => "SCE"
|
|
27
|
+
# swift.branch_name # => "CENTRE FINANCIER DORLEANS LA SOURCE"
|
|
28
|
+
#
|
|
29
|
+
# ==== new instance - invalid SWIFT code
|
|
30
|
+
# swift = ISO::SWIFT.new('PSSTFRCEE') # #<ISO::SWIFT:0x007f8abe708820 @data={}, @errors=[:bad_format]>
|
|
31
|
+
# ==== validation
|
|
32
|
+
# swift.valid? # => false
|
|
33
|
+
# swift.errors # => [:bad_format]
|
|
34
|
+
|
|
35
|
+
class SWIFT
|
|
36
|
+
|
|
37
|
+
# Swift regular expression
|
|
38
|
+
Regex = /^[A-Z]{4}[A-Z]{2}[A-Z0-9]{2}([A-Z0-9]{3})?$/
|
|
39
|
+
|
|
40
|
+
# Attributes
|
|
41
|
+
AttrReaders = [
|
|
42
|
+
:original,
|
|
43
|
+
:formatted,
|
|
44
|
+
:bank_code,
|
|
45
|
+
:bank_name,
|
|
46
|
+
:country_code,
|
|
47
|
+
:country_name,
|
|
48
|
+
:location_code,
|
|
49
|
+
:location_name,
|
|
50
|
+
:branch_code,
|
|
51
|
+
:branch_name
|
|
52
|
+
]
|
|
53
|
+
|
|
54
|
+
AttrReaders.each do |meth|
|
|
55
|
+
define_method meth do
|
|
56
|
+
@data[meth.to_s]
|
|
57
|
+
end
|
|
58
|
+
end
|
|
59
|
+
|
|
60
|
+
attr_reader :data
|
|
61
|
+
attr_reader :errors
|
|
62
|
+
|
|
63
|
+
# @param [String] swift
|
|
64
|
+
# The SWIFT in either compact or human readable form.
|
|
65
|
+
#
|
|
66
|
+
# @return [ISO::SWIFT]
|
|
67
|
+
# A new instance of ISO::SWIFT
|
|
68
|
+
def initialize(swift)
|
|
69
|
+
@data = {}
|
|
70
|
+
@errors = []
|
|
71
|
+
@data["original"] = swift
|
|
72
|
+
swift = parse(swift)
|
|
73
|
+
validate(swift)
|
|
74
|
+
if @errors.empty?
|
|
75
|
+
feed_codes(swift)
|
|
76
|
+
feed_lookup_info(swift)
|
|
77
|
+
end
|
|
78
|
+
end
|
|
79
|
+
|
|
80
|
+
# @param [String] swift
|
|
81
|
+
# The SWIFT in either compact or human readable form.
|
|
82
|
+
#
|
|
83
|
+
# Extracts bank, country, location and branch codes from the parameter
|
|
84
|
+
def feed_codes(swift)
|
|
85
|
+
if @errors.empty?
|
|
86
|
+
@data["formatted"] = swift
|
|
87
|
+
@data["bank_code"] = swift[0..3]
|
|
88
|
+
@data["country_code"] = swift[4..5]
|
|
89
|
+
country = ::Country.new(country_code)
|
|
90
|
+
if country
|
|
91
|
+
@data["country_name"] = country.name
|
|
92
|
+
else
|
|
93
|
+
@errors << :bad_country_code
|
|
94
|
+
end
|
|
95
|
+
@data["location_code"] = swift[6..7]
|
|
96
|
+
@data["branch_code"] = swift[8..10]
|
|
97
|
+
end
|
|
98
|
+
end
|
|
99
|
+
|
|
100
|
+
# @param [String] swift
|
|
101
|
+
# The SWIFT in either compact or human readable form.
|
|
102
|
+
#
|
|
103
|
+
# Lookup for the formatted swift in data/*country_code*.yml
|
|
104
|
+
# If found, extract the bank, location and branch names
|
|
105
|
+
def feed_lookup_info(swift)
|
|
106
|
+
cc = country_code.downcase
|
|
107
|
+
path = File.expand_path("../../data/#{cc}.yml", __FILE__)
|
|
108
|
+
if File.file?(path)
|
|
109
|
+
db = YAML.load_file(path) || nil
|
|
110
|
+
if db
|
|
111
|
+
lk = db[formatted]
|
|
112
|
+
if lk
|
|
113
|
+
@data["bank_name"] = lk["institution"]
|
|
114
|
+
@data["location_name"] = lk["city"]
|
|
115
|
+
@data["branch_name"] = lk["branch"]
|
|
116
|
+
end
|
|
117
|
+
end
|
|
118
|
+
end
|
|
119
|
+
end
|
|
120
|
+
|
|
121
|
+
# @return [String]
|
|
122
|
+
# Retuns the original swift from an ISO::SWIFT instance
|
|
123
|
+
def original
|
|
124
|
+
@data["original"]
|
|
125
|
+
end
|
|
126
|
+
|
|
127
|
+
# @return [String]
|
|
128
|
+
# Retuns the formatted swift from an ISO::SWIFT instance
|
|
129
|
+
def formatted
|
|
130
|
+
@data["formatted"]
|
|
131
|
+
end
|
|
132
|
+
|
|
133
|
+
# @return [String]
|
|
134
|
+
# Retuns the bank code from an ISO::SWIFT instance
|
|
135
|
+
def bank_code
|
|
136
|
+
@data["bank_code"]
|
|
137
|
+
end
|
|
138
|
+
|
|
139
|
+
# @return [String]
|
|
140
|
+
# Retuns the bank name from an ISO::SWIFT instance
|
|
141
|
+
def bank_name
|
|
142
|
+
@data["bank_name"]
|
|
143
|
+
end
|
|
144
|
+
|
|
145
|
+
# @return [String]
|
|
146
|
+
# Retuns the country code from an ISO::SWIFT instance
|
|
147
|
+
def country_code
|
|
148
|
+
@data["country_code"]
|
|
149
|
+
end
|
|
150
|
+
|
|
151
|
+
# @return [String]
|
|
152
|
+
# Retuns the country name from an ISO::SWIFT instance
|
|
153
|
+
# The country name was fetched using https://github.com/hexorx/countries
|
|
154
|
+
def country_name
|
|
155
|
+
@data["country_name"]
|
|
156
|
+
end
|
|
157
|
+
|
|
158
|
+
# @return [String]
|
|
159
|
+
# Retuns the location code from an ISO::SWIFT instance
|
|
160
|
+
def location_code
|
|
161
|
+
@data["location_code"]
|
|
162
|
+
end
|
|
163
|
+
|
|
164
|
+
# @return [String]
|
|
165
|
+
# Retuns the location name from an ISO::SWIFT instance
|
|
166
|
+
def location_name
|
|
167
|
+
@data["location_name"]
|
|
168
|
+
end
|
|
169
|
+
|
|
170
|
+
# @return [String]
|
|
171
|
+
# Retuns the branch code from an ISO::SWIFT instance
|
|
172
|
+
def branch_code
|
|
173
|
+
@data["branch_code"]
|
|
174
|
+
end
|
|
175
|
+
|
|
176
|
+
# @return [String]
|
|
177
|
+
# Retuns the branch name from an ISO::SWIFT instance
|
|
178
|
+
def branch_name
|
|
179
|
+
@data["branch_name"]
|
|
180
|
+
end
|
|
181
|
+
|
|
182
|
+
# @return [Array<Sym>]
|
|
183
|
+
# Retuns an array of errors in symbol format from validation step, if any
|
|
184
|
+
def errors
|
|
185
|
+
@errors.to_a
|
|
186
|
+
end
|
|
187
|
+
|
|
188
|
+
# @return [Boolean]
|
|
189
|
+
# Returns if the current ISO::SWIFT instance if valid
|
|
190
|
+
def valid?
|
|
191
|
+
@errors.empty?
|
|
192
|
+
end
|
|
193
|
+
|
|
194
|
+
private
|
|
195
|
+
|
|
196
|
+
# @param [String] swift
|
|
197
|
+
# The SWIFT in either compact or human readable form.
|
|
198
|
+
#
|
|
199
|
+
# Validation of the length and format of the formatted swift
|
|
200
|
+
def validate(swift)
|
|
201
|
+
@errors << :too_short if swift.size < 8
|
|
202
|
+
@errors << :too_long if swift.size > 11
|
|
203
|
+
@errors << :bad_chars unless swift =~ /^[A-Z0-9]+$/
|
|
204
|
+
@errors << :bad_format unless swift =~ Regex
|
|
205
|
+
end
|
|
206
|
+
|
|
207
|
+
# @param [String] swift
|
|
208
|
+
# The SWIFT in either compact or human readable form.
|
|
209
|
+
#
|
|
210
|
+
# @return [String]
|
|
211
|
+
# The SWIFT in compact form, all whitespace and dashes stripped.
|
|
212
|
+
def strip(swift)
|
|
213
|
+
swift.delete("\n\r\t -")
|
|
214
|
+
end
|
|
215
|
+
|
|
216
|
+
# @param [String, nil] swift
|
|
217
|
+
# The SWIFT in either compact or human readable form.
|
|
218
|
+
#
|
|
219
|
+
# @return [String]
|
|
220
|
+
# The SWIFT in either compact or human readable form.
|
|
221
|
+
def parse(swift)
|
|
222
|
+
strip(swift || "").upcase
|
|
223
|
+
end
|
|
224
|
+
end
|
|
225
|
+
end
|
data/lib/iso/version.rb
ADDED
|
@@ -0,0 +1,192 @@
|
|
|
1
|
+
# encoding: utf-8
|
|
2
|
+
|
|
3
|
+
require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
|
|
4
|
+
|
|
5
|
+
describe '[ISO::SWIFT]' do
|
|
6
|
+
|
|
7
|
+
context 'a new ISO::SWIFT instance' do
|
|
8
|
+
|
|
9
|
+
let(:swift) { ISO::SWIFT.new('PSSTFRPPSCE') }
|
|
10
|
+
|
|
11
|
+
it 'responds to :valid?' do
|
|
12
|
+
expect(swift).to respond_to(:valid?)
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
it 'responds to :errors' do
|
|
16
|
+
expect(swift).to respond_to(:errors)
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
it 'responds to :original' do
|
|
20
|
+
expect(swift).to respond_to(:original)
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
it 'responds to :formatted' do
|
|
24
|
+
expect(swift).to respond_to(:formatted)
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
it 'responds to :bank_code' do
|
|
28
|
+
expect(swift).to respond_to(:bank_code)
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
it 'responds to :bank_name' do
|
|
32
|
+
expect(swift).to respond_to(:bank_name)
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
it 'responds to :country_code' do
|
|
36
|
+
expect(swift).to respond_to(:country_code)
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
it 'responds to :country_name' do
|
|
40
|
+
expect(swift).to respond_to(:country_name)
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
it 'responds to :location_code' do
|
|
44
|
+
expect(swift).to respond_to(:location_code)
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
it 'responds to :location_name' do
|
|
48
|
+
expect(swift).to respond_to(:location_name)
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
it 'responds to :branch_code' do
|
|
52
|
+
expect(swift).to respond_to(:bank_code)
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
it 'responds to :branch_name' do
|
|
56
|
+
expect(swift).to respond_to(:branch_name)
|
|
57
|
+
end
|
|
58
|
+
end
|
|
59
|
+
|
|
60
|
+
context 'a new ISO::SWIFT instance with a valid SWIFT code' do
|
|
61
|
+
|
|
62
|
+
let(:swift) { ISO::SWIFT.new('PSST FR PP SCE') }
|
|
63
|
+
|
|
64
|
+
it 'is valid' do
|
|
65
|
+
expect(swift).to be_valid
|
|
66
|
+
expect(swift.valid?).to eq(true)
|
|
67
|
+
end
|
|
68
|
+
|
|
69
|
+
it 'has no error' do
|
|
70
|
+
expect(swift.errors).to be_empty
|
|
71
|
+
end
|
|
72
|
+
|
|
73
|
+
context '[attributes]' do
|
|
74
|
+
|
|
75
|
+
it '[:original] is OK' do
|
|
76
|
+
expect(swift.original).to eq('PSST FR PP SCE')
|
|
77
|
+
end
|
|
78
|
+
|
|
79
|
+
it '[:formatted] is OK' do
|
|
80
|
+
expect(swift.formatted).to eq('PSSTFRPPSCE')
|
|
81
|
+
end
|
|
82
|
+
|
|
83
|
+
it '[:bank_code] is OK' do
|
|
84
|
+
expect(swift.bank_code).to eq('PSST')
|
|
85
|
+
end
|
|
86
|
+
|
|
87
|
+
it '[:bank_name] is OK' do
|
|
88
|
+
expect(swift.bank_name).to eq('LA BANQUE POSTALE')
|
|
89
|
+
end
|
|
90
|
+
|
|
91
|
+
it '[:country_code] is OK' do
|
|
92
|
+
expect(swift.country_code).to eq('FR')
|
|
93
|
+
end
|
|
94
|
+
|
|
95
|
+
it '[:country_name] is OK' do
|
|
96
|
+
expect(swift.country_name).to eq('France')
|
|
97
|
+
end
|
|
98
|
+
|
|
99
|
+
it '[:location_code] is OK' do
|
|
100
|
+
expect(swift.location_code).to eq('PP')
|
|
101
|
+
end
|
|
102
|
+
|
|
103
|
+
it '[:location_name] is OK' do
|
|
104
|
+
expect(swift.location_name).to eq('ORLEANS')
|
|
105
|
+
end
|
|
106
|
+
|
|
107
|
+
it '[:branch_code] is OK' do
|
|
108
|
+
expect(swift.branch_code).to eq('SCE')
|
|
109
|
+
end
|
|
110
|
+
|
|
111
|
+
it '[:branch_name] is OK' do
|
|
112
|
+
expect(swift.branch_name).to eq('CENTRE FINANCIER DORLEANS LA SOURCE')
|
|
113
|
+
end
|
|
114
|
+
end
|
|
115
|
+
end
|
|
116
|
+
|
|
117
|
+
context 'a new ISO::SWIFT instance with ill-formed SWIFT code' do
|
|
118
|
+
|
|
119
|
+
let(:swift) { ISO::SWIFT.new('PSSTFRPPS') }
|
|
120
|
+
|
|
121
|
+
it 'is not valid' do
|
|
122
|
+
expect(swift).not_to be_valid
|
|
123
|
+
end
|
|
124
|
+
|
|
125
|
+
it 'has errors' do
|
|
126
|
+
expect(swift.errors).not_to be_empty
|
|
127
|
+
end
|
|
128
|
+
|
|
129
|
+
it 'has an error array including :bad_format' do
|
|
130
|
+
expect(swift.errors).to include(:bad_format)
|
|
131
|
+
end
|
|
132
|
+
|
|
133
|
+
context '[attributes]' do
|
|
134
|
+
|
|
135
|
+
it '[:original] is OK' do
|
|
136
|
+
expect(swift.original).to eq('PSSTFRPPS')
|
|
137
|
+
end
|
|
138
|
+
|
|
139
|
+
it 'all other attributes are nil' do
|
|
140
|
+
expect(swift.formatted).to be_nil
|
|
141
|
+
expect(swift.bank_code).to be_nil
|
|
142
|
+
expect(swift.bank_name).to be_nil
|
|
143
|
+
expect(swift.country_code).to be_nil
|
|
144
|
+
expect(swift.country_name).to be_nil
|
|
145
|
+
expect(swift.location_code).to be_nil
|
|
146
|
+
expect(swift.location_name).to be_nil
|
|
147
|
+
expect(swift.branch_code).to be_nil
|
|
148
|
+
expect(swift.branch_name).to be_nil
|
|
149
|
+
end
|
|
150
|
+
end
|
|
151
|
+
end
|
|
152
|
+
|
|
153
|
+
context 'a new ISO::SWIFT instance with an invalid country code' do
|
|
154
|
+
|
|
155
|
+
let(:swift) { ISO::SWIFT.new('PSSTFAPPSCE') }
|
|
156
|
+
|
|
157
|
+
it 'is not valid' do
|
|
158
|
+
expect(swift).not_to be_valid
|
|
159
|
+
end
|
|
160
|
+
|
|
161
|
+
it 'has errors' do
|
|
162
|
+
expect(swift.errors).not_to be_empty
|
|
163
|
+
end
|
|
164
|
+
|
|
165
|
+
it 'has an errors array including :bad_country_code' do
|
|
166
|
+
expect(swift.errors).to include(:bad_country_code)
|
|
167
|
+
end
|
|
168
|
+
|
|
169
|
+
it 'has no country name' do
|
|
170
|
+
expect(swift.country_name).to be_nil
|
|
171
|
+
end
|
|
172
|
+
end
|
|
173
|
+
|
|
174
|
+
context 'a new ISO::SWIFT instance with an unknown SWIFT code' do
|
|
175
|
+
|
|
176
|
+
let(:swift) { ISO::SWIFT.new('PSSTFIPPSCE') }
|
|
177
|
+
|
|
178
|
+
it 'is valid' do
|
|
179
|
+
expect(swift).to be_valid
|
|
180
|
+
end
|
|
181
|
+
|
|
182
|
+
it 'has no error' do
|
|
183
|
+
expect(swift.errors).to be_empty
|
|
184
|
+
end
|
|
185
|
+
|
|
186
|
+
it 'has no lookup info' do
|
|
187
|
+
expect(swift.bank_name).to be_nil
|
|
188
|
+
expect(swift.location_name).to be_nil
|
|
189
|
+
expect(swift.branch_name).to be_nil
|
|
190
|
+
end
|
|
191
|
+
end
|
|
192
|
+
end
|