codice-fiscale 0.0.9 → 1.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.
@@ -1 +1,216 @@
1
- CONTIN,SIGLA,DENOMINAZ,CODICE,DATAIST,DATASOP,CODRIF,DATAVARIAZ
1
+ Albania,Albania,Z100
2
+ Andorra,Andorra,Z101
3
+ Austria,Austria,Z102
4
+ Belgio,Belgium,Z103
5
+ Bulgaria,Bulgaria,Z104
6
+ Danimarca,Denmark,Z107
7
+ Finlandia,Finland,Z109
8
+ Francia,France,Z110
9
+ Germania,Germany,Z112
10
+ Regno Unito,United Kingdom,Z114
11
+ Grecia,Greece,Z115
12
+ Irlanda,Ireland,Z116
13
+ Islanda,Iceland,Z117
14
+ Liechtenstein,Liechtenstein,Z119
15
+ Lussemburgo,Luxembourg,Z120
16
+ Malta,Malta,Z121
17
+ Monaco,Monaco,Z123
18
+ Norvegia,Norway,Z125
19
+ Paesi Bassi,Netherlands,Z126
20
+ Polonia,Poland,Z127
21
+ Portogallo,Portugal,Z128
22
+ Romania,Romania,Z129
23
+ San Marino,San Marino,Z130
24
+ Spagna,Spain,Z131
25
+ Svezia,Sweden,Z132
26
+ Svizzera,Switzerland,Z133
27
+ Ucraina,Ukraine,Z138
28
+ Ungheria,Hungary,Z134
29
+ Federazione russa,Russian Federation,Z154
30
+ Stato della Città del Vaticano,Vatican City State,Z106
31
+ Estonia,Estonia,Z144
32
+ Lettonia,Latvia,Z145
33
+ Lituania,Lithuania,Z146
34
+ Croazia,Croatia,Z149
35
+ Slovenia,Slovenia,Z150
36
+ Bosnia-Erzegovina,Bosnia and Herzegovina,Z153
37
+ Ex Repubblica Jugoslava di Macedonia,The former Yugoslav Republic of Macedonia,Z148
38
+ Moldova,Moldova,Z140
39
+ Slovacchia,Slovakia,Z155
40
+ Bielorussia,Belarus,Z139
41
+ Repubblica ceca,Czech Republic,Z156
42
+ Montenegro,Montenegro,Z159
43
+ Serbia,Serbia,Z158
44
+ Kosovo,Kosovo,Z160
45
+ Afghanistan,Afghanistan,Z200
46
+ Arabia Saudita,Saudi Arabia,Z203
47
+ Bahrein,Bahrain,Z204
48
+ Bangladesh,Bangladesh,Z249
49
+ Bhutan,Bhutan,Z205
50
+ Myanmar/Birmania,Myanmar/Burma,Z206
51
+ Brunei Darussalam,Brunei Darussalam,Z207
52
+ Cambogia,Cambodia,Z208
53
+ Sri Lanka,Sri Lanka,Z209
54
+ Cina,China,Z210
55
+ Cipro,Cyprus,Z211
56
+ Corea del Nord,North Korea,Z214
57
+ Corea del Sud,South Korea,Z213
58
+ Emirati Arabi Uniti,United Arab Emirates,Z215
59
+ Filippine,Philippines,Z216
60
+ Palestina,Palestine,Z161
61
+ Giappone,Japan,Z219
62
+ Giordania,Jordan,Z220
63
+ India,India,Z222
64
+ Indonesia,Indonesia,Z223
65
+ Iran,Iran,Z224
66
+ Iraq,Iraq,Z225
67
+ Israele,Israel,Z226
68
+ Kuwait,Kuwait,Z227
69
+ Laos,Laos,Z228
70
+ Libano,Lebanon,Z229
71
+ Timor Leste,Timor Leste,Z242
72
+ Maldive,Maldives,Z232
73
+ Malaysia,Malaysia,Z247
74
+ Mongolia,Mongolia,Z233
75
+ Nepal,Nepal,Z234
76
+ Oman,Oman,Z235
77
+ Pakistan,Pakistan,Z236
78
+ Qatar,Qatar,Z237
79
+ Singapore,Singapore,Z248
80
+ Siria,Syria,Z240
81
+ Thailandia,Thailand,Z241
82
+ Turchia,Turkey,Z243
83
+ Vietnam,Vietnam,Z251
84
+ Yemen,Yemen,Z246
85
+ Kazakhstan,Kazakhstan,Z255
86
+ Uzbekistan,Uzbekistan,Z259
87
+ Armenia,Armenia,Z252
88
+ Azerbaigian,Azerbaijan,Z253
89
+ Georgia,Georgia,Z254
90
+ Kirghizistan,Kyrgyzstan,Z256
91
+ Tagikistan,Tajikistan,Z257
92
+ Taiwan,Taiwan,Z217
93
+ Turkmenistan,Turkmenistan,Z258
94
+ Algeria,Algeria,Z301
95
+ Angola,Angola,Z302
96
+ Costa d'Avorio,Côte d'Ivoire,Z313
97
+ Benin,Benin,Z314
98
+ Botswana,Botswana,Z358
99
+ Burkina Faso,Burkina Faso,Z354
100
+ Burundi,Burundi,Z305
101
+ Camerun,Cameroon,Z306
102
+ Capo Verde,Cape Verde,Z307
103
+ Repubblica Centrafricana,Central African Republic,Z308
104
+ Ciad,Chad,Z309
105
+ Comore,Comoros,Z310
106
+ Congo,Congo,Z311
107
+ Egitto,Egypt,Z336
108
+ Etiopia,Ethiopia,Z315
109
+ Gabon,Gabon,Z316
110
+ Gambia,Gambia,Z317
111
+ Ghana,Ghana,Z318
112
+ Gibuti,Djibouti,Z361
113
+ Guinea,Guinea,Z319
114
+ Guinea-Bissau,Guinea-Bissau,Z320
115
+ Guinea equatoriale,Equatorial Guinea,Z321
116
+ Kenya,Kenya,Z322
117
+ Lesotho,Lesotho,Z359
118
+ Liberia,Liberia,Z325
119
+ Libia,Libya,Z326
120
+ Madagascar,Madagascar,Z327
121
+ Malawi,Malawi,Z328
122
+ Mali,Mali,Z329
123
+ Marocco,Morocco,Z330
124
+ Mauritania,Mauritania,Z331
125
+ Maurizio,Mauritius,Z332
126
+ Mozambico,Mozambique,Z333
127
+ Namibia,Namibia,Z300
128
+ Niger,Niger,Z334
129
+ Nigeria,Nigeria,Z335
130
+ Ruanda,Rwanda,Z338
131
+ Sao Tomé e Principe,Sao Tome and Principe,Z341
132
+ Seychelles,Seychelles,Z342
133
+ Senegal,Senegal,Z343
134
+ Sierra Leone,Sierra Leone,Z344
135
+ Somalia,Somalia,Z345
136
+ Sudafrica,South Africa,Z347
137
+ Sudan,Sudan,Z348
138
+ Eswatini,Eswatini,Z349
139
+ Tanzania,Tanzania,Z357
140
+ Togo,Togo,Z351
141
+ Tunisia,Tunisia,Z352
142
+ Uganda,Uganda,Z353
143
+ Repubblica Democratica del Congo,Democratic Republic of the Congo,Z312
144
+ Zambia,Zambia,Z355
145
+ Zimbabwe,Zimbabwe,Z337
146
+ Eritrea,Eritrea,Z368
147
+ Sud Sudan,South Sudan,Z907
148
+ Antigua e Barbuda,Antigua and Barbuda,Z532
149
+ Bahamas,Bahamas,Z502
150
+ Barbados,Barbados,Z522
151
+ Belize,Belize,Z512
152
+ Canada,Canada,Z401
153
+ Costa Rica,Costa Rica,Z503
154
+ Cuba,Cuba,Z504
155
+ Dominica,Dominica,Z526
156
+ Repubblica Dominicana,Dominican Republic,Z505
157
+ El Salvador,El Salvador,Z506
158
+ Giamaica,Jamaica,Z507
159
+ Grenada,Grenada,Z524
160
+ Guatemala,Guatemala,Z509
161
+ Haiti,Haiti,Z510
162
+ Honduras,Honduras,Z511
163
+ Messico,Mexico,Z514
164
+ Nicaragua,Nicaragua,Z515
165
+ Panama,Panama,Z516
166
+ Santa Lucia,Saint Lucia,Z527
167
+ Saint Vincent e Grenadine,Saint Vincent and the Grenadines,Z528
168
+ Saint Kitts e Nevis,Saint Kitts and Nevis,Z533
169
+ Stati Uniti d'America,United States of America,Z404
170
+ Argentina,Argentina,Z600
171
+ Bolivia,Bolivia,Z601
172
+ Brasile,Brazil,Z602
173
+ Cile,Chile,Z603
174
+ Colombia,Colombia,Z604
175
+ Ecuador,Ecuador,Z605
176
+ Guyana,Guyana,Z606
177
+ Paraguay,Paraguay,Z610
178
+ Perù,Peru,Z611
179
+ Suriname,Suriname,Z608
180
+ Trinidad e Tobago,Trinidad and Tobago,Z612
181
+ Uruguay,Uruguay,Z613
182
+ Venezuela,Venezuela,Z614
183
+ Australia,Australia,Z700
184
+ Figi,Fiji,Z704
185
+ Kiribati,Kiribati,Z731
186
+ Isole Marshall,Marshall Islands,Z711
187
+ Stati Federati di Micronesia,Federated States of Micronesia,Z735
188
+ Nauru,Nauru,Z713
189
+ Nuova Zelanda,New Zealand,Z719
190
+ Palau,Palau,Z734
191
+ Papua Nuova Guinea,Papua New Guinea,Z730
192
+ Isole Salomone,Solomon Islands,Z724
193
+ Samoa,Samoa,Z726
194
+ Tonga,Tonga,Z728
195
+ Tuvalu,Tuvalu,Z732
196
+ Vanuatu,Vanuatu,Z733
197
+ Nuova Caledonia,New Caledonia,Z716
198
+ Sahara occidentale,Western Sahara,Z339
199
+ Bermuda,Bermuda,Z400
200
+ Isole Cook (NZ),Cook Islands (NZ),Z703
201
+ Gibilterra,Gibraltar,Z113
202
+ Isole Cayman,Cayman Islands,Z530
203
+ Anguilla,Anguilla,Z529
204
+ Polinesia francese,French Polynesia,Z723
205
+ Isole Fær Øer,Faroe Islands,Z108
206
+ Aruba,Aruba,Z501
207
+ Groenlandia,Greenland,Z402
208
+ Isole Falkland (Malvine),Falkland Islands (Malvinas),Z609
209
+ Isola di Man,Isle of Man,Z122
210
+ Montserrat,Montserrat,Z531
211
+ Isole Pitcairn,Pitcairn,Z722
212
+ Saint Pierre e Miquelon,Saint Pierre and Miquelon,Z403
213
+ Sant'Elena,Saint Helena,Z340
214
+ Isole Turks e Caicos,Turks and Caicos Islands,Z519
215
+ Isole Vergini britanniche,British Virgin Islands,Z525
216
+ Wallis e Futuna,Wallis and Futuna Islands,Z729
@@ -24,8 +24,8 @@ module CodiceFiscale
24
24
  def city city_name, province_code
25
25
  return config.city_code.call(city_name, province_code) if config.city_code
26
26
  CSV.foreach config.city_codes_csv_path do |row|
27
- if city_name.casecmp(row[3].strip).zero? and province_code.casecmp(row[2].strip).zero?
28
- return row[0].strip.upcase
27
+ if city_name.casecmp(row[0]).zero? and province_code.casecmp(row[1]).zero?
28
+ return row[2].upcase
29
29
  end
30
30
  end
31
31
  nil
@@ -34,7 +34,7 @@ module CodiceFiscale
34
34
  def country country_name
35
35
  return config.country_code.call(country_name) if config.country_code
36
36
  CSV.foreach config.country_codes_csv_path do |row|
37
- return row[3].strip.upcase if country_name.casecmp(row[2].strip).zero?
37
+ return row[2].upcase if country_name.casecmp(row[0]).zero? or country_name.casecmp(row[1]).zero?
38
38
  end
39
39
  nil
40
40
  end
@@ -1,3 +1,3 @@
1
1
  module CodiceFiscale
2
- VERSION = "0.0.9"
2
+ VERSION = "1.0.1"
3
3
  end
@@ -21,4 +21,83 @@ module CodiceFiscale
21
21
  raise ArgumentError.new(citizen.errors.full_messages.join(', ')) unless citizen.valid?
22
22
  citizen.fiscal_code
23
23
  end
24
+
25
+ # This method is used by me to update the csv and repack the gem
26
+ def self.update_csv_files(are_you_sure = false)
27
+ unless are_you_sure
28
+ warn("Nothing was done, call me with are_you_sure = true")
29
+ return
30
+ end
31
+
32
+ require "net/http"
33
+ require "tmpdir"
34
+ require "tmpdir"
35
+ require "fileutils"
36
+
37
+ # download the CSV with all the city codes
38
+ # @see https://www.istat.it/it/archivio/6789 for more info
39
+ url = "https://www.istat.it/storage/codici-unita-amministrative/Elenco-comuni-italiani.csv"
40
+ res = Net::HTTP.get_response(URI(url))
41
+ raise("Failed to GET #{url}") unless res.is_a?(Net::HTTPSuccess)
42
+ data = res.body
43
+
44
+ # Covert to utf-8
45
+ data.force_encoding("iso-8859-1")
46
+ data.encode!("utf-8")
47
+ raise("Failed to convert to utf-8") unless data.valid_encoding?
48
+
49
+ # parse it and rebuild a new CSV selecting only the columns I need
50
+ CSV.open(config.city_codes_csv_path, "wb") do |csv|
51
+ CSV.parse(data, :col_sep => ";", :row_sep => "\r\n").each_with_index do |r, index|
52
+ next if index == 0
53
+
54
+ c, p, x = *[r[5], r[13], r[18]].map(&:strip)
55
+
56
+ raise("Check the number of columns: #{r}") if r.size != 23
57
+ raise("Invalid city name: #{c}") if c.include?(',') or c.blank?
58
+ raise("Invalid province code: #{p}") if p !~ /^[A-Z]{2}$/
59
+ raise("Invalid city code: #{x}") if x !~ /^[A-Z]{1}[0-9]{3}$/
60
+
61
+ csv << [c, p, x]
62
+ end
63
+ end
64
+
65
+ # checkout the CSV with all the country codes
66
+ # @see https://www.istat.it/it/archivio/6747
67
+ url = "https://www.istat.it/it/files//2011/01/Elenco-codici-e-denominazioni-unita-territoriali-estere.zip"
68
+ res = Net::HTTP.get_response(URI(url))
69
+ raise("Failed to GET #{url}") unless res.is_a?(Net::HTTPSuccess)
70
+
71
+ # store the zip in temporary folder and extract it
72
+ tmpdir = Dir.mktmpdir
73
+ filename = "Elenco-codici-e-denominazioni-unita-territoriali-estere"
74
+ system("cd #{tmpdir} && unzip -q -o #{tmpdir}/#{filename}.zip")
75
+ data = File.open(Dir["#{tmpdir}/**/*.csv"][0], "rb", &:read)
76
+
77
+ # Covert the csv to utf-8
78
+ data.force_encoding("iso-8859-1")
79
+ data.encode!("utf-8")
80
+ raise("Failed to convert to utf-8") unless data.valid_encoding?
81
+
82
+ # parse it and rebuild a new CSV selecting only the columns I need
83
+ CSV.open(config.country_codes_csv_path, "wb") do |csv|
84
+ CSV.parse(data, :col_sep => ";", :row_sep => "\r\n").each_with_index do |r, index|
85
+ next if index == 0
86
+ next if r.compact.empty?
87
+
88
+ c1, c2, x = *[r[6], r[7], r[9]].map(&:strip)
89
+
90
+ next if x.casecmp('n.d.').zero?
91
+
92
+ raise("Check the number of columns: #{r}") if r.size != 15
93
+ raise("Invalid country name: #{c1}") if c1.include?(',') or c1.blank?
94
+ raise("Invalid country name: #{c2}") if c2.include?(',') or c2.blank?
95
+ raise("Invalid country code: #{x}") if x !~ /^[A-Z]{1}[0-9]{3}$/
96
+
97
+ csv << [c1, c2, x]
98
+ end
99
+ end
100
+ ensure
101
+ FileUtils.rm_rf(tmpdir) if tmpdir and Dir.exists?(tmpdir)
102
+ end
24
103
  end
@@ -3,23 +3,31 @@ require 'spec_helper'
3
3
  describe CodiceFiscale::Alphabet do
4
4
  describe '#letters' do
5
5
  it 'is 26 long' do
6
- subject.letters.size.should == 26
6
+ expect(subject.letters.size).to eq 26
7
7
  end
8
8
 
9
- it 'return only upcased letters' do
10
- subject.letters.each { |letter| letter.upcase.should == letter }
9
+ it 'consists only of upcased letters' do
10
+ expect(subject.letters.join).to match /^[A-Z]{1,}$/
11
11
  end
12
12
  end
13
13
 
14
14
  describe '#consonants' do
15
15
  it 'is 21 long' do
16
- subject.consonants.size.should == 21
16
+ expect(subject.consonants.size).to eq 21
17
+ end
18
+
19
+ it 'consists only of upcased letters' do
20
+ expect(subject.vowels.join).to match /^[A-Z]{1,}$/
17
21
  end
18
22
  end
19
23
 
20
- describe '#vocals' do
21
- it 'return only upcased letters' do
22
- subject.letters.each { |letter| letter.upcase.should == letter }
24
+ describe '#vowels' do
25
+ it 'is 5 long' do
26
+ expect(subject.vowels.size).to eq 5
27
+ end
28
+
29
+ it 'consists only of upcased letters' do
30
+ expect(subject.vowels.join).to match /^[A-Z]{1,}$/
23
31
  end
24
32
  end
25
- end
33
+ end
@@ -4,19 +4,23 @@ describe CodiceFiscale::Codes do
4
4
  describe '#month_letter' do
5
5
  context 'the given number is greater than 0 and less than 12' do
6
6
  it 'return a letter' do
7
- subject.month_letter(1).should == 'A'
7
+ 1.upto(12).each do |n|
8
+ expect(subject.month_letter(1)).to match /^[A-Z]{1,}$/
9
+ end
8
10
  end
9
11
  end
10
12
 
11
13
  context 'the given number is greater than 12' do
12
14
  it 'return nil' do
13
- subject.month_letter(13).should be_nil
15
+ expect(subject.month_letter(13)).to be_nil
14
16
  end
15
17
  end
16
18
 
17
19
  context 'the given number is less than 1' do
18
20
  it 'return nil' do
19
- subject.month_letter(0).should be_nil
21
+ -1.upto(0).each do |n|
22
+ expect(subject.month_letter(n)).to be_nil
23
+ end
20
24
  end
21
25
  end
22
26
  end
@@ -1,23 +1,33 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  describe CodiceFiscale::FiscalCode do
4
- let(:citizen_marco_galli) { CodiceFiscale::ItalianCitizen.new :name => 'Marco', :surname => 'Galli', :gender => :male, :birthdate => Date.new(1983, 5, 3), :city_name => 'Oggiono', :province_code => 'LC' }
4
+ let(:citizen_marco_galli) do
5
+ CodiceFiscale::ItalianCitizen.new(
6
+ :name => 'Marco',
7
+ :surname => 'Galli',
8
+ :gender => :male,
9
+ :birthdate => Date.new(1983, 5, 3),
10
+ :city_name => 'Oggiono',
11
+ :province_code => 'LC'
12
+ )
13
+ end
14
+
5
15
  let(:fiscal_code) { described_class.new citizen_marco_galli }
6
16
 
7
17
  describe '#surname_part' do
8
18
  it 'takes the first 3 consonants' do
9
- fiscal_code.surname_part.should == 'GLL'
19
+ expect(fiscal_code.surname_part).to eq 'GLL'
10
20
  end
11
21
 
12
22
  it 'is 3 chrs long' do
13
- fiscal_code.surname_part.size.should == 3
23
+ expect(fiscal_code.surname_part.size).to eq 3
14
24
  end
15
25
 
16
26
  context 'when surname has only 1 consonant' do
17
27
  before { fiscal_code.citizen.surname = 'oof' }
18
28
 
19
29
  it 'puts the vowels after the consonants' do
20
- fiscal_code.surname_part.should == 'FOO'
30
+ expect(fiscal_code.surname_part).to eq 'FOO'
21
31
  end
22
32
  end
23
33
 
@@ -25,21 +35,21 @@ describe CodiceFiscale::FiscalCode do
25
35
  before { fiscal_code.citizen.surname = 'm' }
26
36
 
27
37
  it 'pads with the "X" character' do
28
- fiscal_code.surname_part.should == 'MXX'
38
+ expect(fiscal_code.surname_part).to eq 'MXX'
29
39
  end
30
40
  end
31
41
  end
32
42
 
33
43
  describe '#name_part' do
34
44
  it 'is 3 chrs long' do
35
- fiscal_code.name_part.size.should == 3
45
+ expect(fiscal_code.name_part.size).to eq 3
36
46
  end
37
47
 
38
48
  context 'when name has 4 or more consonants' do
39
49
  before { fiscal_code.citizen.name = 'danielino' }
40
50
 
41
51
  it 'takes the 1st the 3rd and the 4th' do
42
- fiscal_code.name_part.should == 'DLN'
52
+ expect(fiscal_code.name_part).to eq 'DLN'
43
53
  end
44
54
  end
45
55
 
@@ -47,7 +57,7 @@ describe CodiceFiscale::FiscalCode do
47
57
  before { fiscal_code.citizen.name = 'daniele' }
48
58
 
49
59
  it 'takes the first 3 consonants' do
50
- fiscal_code.name_part.should == 'DNL'
60
+ expect(fiscal_code.name_part).to eq 'DNL'
51
61
  end
52
62
  end
53
63
 
@@ -55,7 +65,7 @@ describe CodiceFiscale::FiscalCode do
55
65
  before { fiscal_code.citizen.name = 'bar' }
56
66
 
57
67
  it 'puts the vowels after the consonants' do
58
- fiscal_code.name_part.should == 'BRA'
68
+ expect(fiscal_code.name_part).to eq 'BRA'
59
69
  end
60
70
  end
61
71
 
@@ -63,7 +73,7 @@ describe CodiceFiscale::FiscalCode do
63
73
  before { fiscal_code.citizen.name = 'd' }
64
74
 
65
75
  it 'pad with the "X" character' do
66
- fiscal_code.name_part.should == 'DXX'
76
+ expect(fiscal_code.name_part).to eq 'DXX'
67
77
  end
68
78
  end
69
79
  end
@@ -71,14 +81,16 @@ describe CodiceFiscale::FiscalCode do
71
81
 
72
82
  describe '#birthdate_part' do
73
83
  it 'start with the last 2 digit of the year' do
74
- fiscal_code.birthdate_part.should start_with '83'
84
+ expect(fiscal_code.birthdate_part).to start_with '83'
75
85
  end
76
86
 
77
87
  describe 'the 3rd character' do
78
- before { CodiceFiscale::Codes.stub(:month_letter).and_return('X') }
88
+ before do
89
+ allow(CodiceFiscale::Codes).to receive(:month_letter).and_return('X')
90
+ end
79
91
 
80
92
  it 'is the month code' do
81
- fiscal_code.birthdate_part[2].should == 'X'
93
+ expect(fiscal_code.birthdate_part[2]).to eq 'X'
82
94
  end
83
95
  end
84
96
 
@@ -86,13 +98,13 @@ describe CodiceFiscale::FiscalCode do
86
98
  context 'gender is male' do
87
99
  before { fiscal_code.citizen.gender = :male }
88
100
 
89
- it('is the birth day') { fiscal_code.birthdate_part[3..5].should == '03' }
101
+ it('is the birth day') { expect(fiscal_code.birthdate_part[3..5]).to eq '03' }
90
102
  end
91
103
 
92
104
  context 'gender is female' do
93
105
  before { fiscal_code.citizen.gender = :female }
94
106
 
95
- it('is the birth day + 40') { fiscal_code.birthdate_part[3..5].should == '43' }
107
+ it('is the birth day + 40') { expect(fiscal_code.birthdate_part[3..5]).to eq '43' }
96
108
  end
97
109
  end
98
110
  end
@@ -105,15 +117,17 @@ describe CodiceFiscale::FiscalCode do
105
117
  before { fiscal_code.config.city_code { 'Winterfell' } }
106
118
 
107
119
  it 'returns the result of the city-block execution' do
108
- fiscal_code.birthplace_part.should == 'Winterfell'
120
+ expect(fiscal_code.birthplace_part). to eq 'Winterfell'
109
121
  end
110
122
  end
111
123
 
112
124
  context 'when codes are fetched using csv' do
113
- before { CodiceFiscale::Codes.stub(:city).and_return('hello') }
125
+ before do
126
+ allow(CodiceFiscale::Codes).to receive(:city).and_return('hello')
127
+ end
114
128
 
115
129
  it 'returns the city code' do
116
- fiscal_code.birthplace_part.should == 'hello'
130
+ expect(fiscal_code.birthplace_part).to eq 'hello'
117
131
  end
118
132
  end
119
133
  end
@@ -125,15 +139,17 @@ describe CodiceFiscale::FiscalCode do
125
139
  before { fiscal_code.config.country_code { 'The North' } }
126
140
 
127
141
  it 'returns the result of the country-block execution' do
128
- fiscal_code.birthplace_part.should == 'The North'
142
+ expect(fiscal_code.birthplace_part).to eq 'The North'
129
143
  end
130
144
  end
131
145
 
132
146
  context 'when codes are fetched using csv' do
133
- before { CodiceFiscale::Codes.stub(:country).and_return('Middle-Earth') }
147
+ before do
148
+ allow(CodiceFiscale::Codes).to receive(:country).and_return('Middle-Earth')
149
+ end
134
150
 
135
151
  it 'returns the country code' do
136
- fiscal_code.birthplace_part.should == 'Middle-Earth'
152
+ expect(fiscal_code.birthplace_part).to eq 'Middle-Earth'
137
153
  end
138
154
  end
139
155
  end
@@ -141,7 +157,7 @@ describe CodiceFiscale::FiscalCode do
141
157
 
142
158
  describe '#control_character' do
143
159
  it 'returns the expected letter' do
144
- fiscal_code.control_character('RSSMRA87A01A005').should == 'V'
160
+ expect(fiscal_code.control_character('RSSMRA87A01A005')).to eq 'V'
145
161
  end
146
162
  end
147
- end
163
+ end
@@ -9,11 +9,11 @@ describe CodiceFiscale::ItalianCitizen do
9
9
 
10
10
  describe '#initialize' do
11
11
  it 'accepts 1 attribute' do
12
- lambda { marco }.should_not raise_error
12
+ expect { marco }.not_to raise_error
13
13
  end
14
14
 
15
15
  it 'do not accepts 0 attribute' do
16
- lambda { described_class.new }.should raise_error(ArgumentError)
16
+ expect { described_class.new }.to raise_error(ArgumentError)
17
17
  end
18
18
  end
19
19
 
@@ -21,8 +21,8 @@ describe CodiceFiscale::ItalianCitizen do
21
21
  describe '#validations' do
22
22
  describe 'when all attributes are valid' do
23
23
  it 'is valid' do
24
- marco.should be_valid
25
- john.should be_valid
24
+ expect(marco).to be_valid
25
+ expect(john).to be_valid
26
26
  end
27
27
  end
28
28
 
@@ -31,7 +31,7 @@ describe CodiceFiscale::ItalianCitizen do
31
31
 
32
32
  it 'is not valid' do
33
33
  citizen_without_name.valid?
34
- citizen_without_name.errors[:name].should_not be_empty
34
+ expect(citizen_without_name.errors[:name]).not_to be_empty
35
35
  end
36
36
  end
37
37
 
@@ -40,7 +40,7 @@ describe CodiceFiscale::ItalianCitizen do
40
40
 
41
41
  it 'is not valid' do
42
42
  citizen_with_strange_gender.valid?
43
- citizen_with_strange_gender.errors[:gender].should_not be_empty
43
+ expect(citizen_with_strange_gender.errors[:gender]).not_to be_empty
44
44
  end
45
45
  end
46
46
 
@@ -49,7 +49,7 @@ describe CodiceFiscale::ItalianCitizen do
49
49
 
50
50
  it 'is not valid' do
51
51
  citizen_with_invalid_province.valid?
52
- citizen_with_invalid_province.errors[:province_code].should_not be_empty
52
+ expect(citizen_with_invalid_province.errors[:province_code]).not_to be_empty
53
53
  end
54
54
  end
55
55
 
@@ -58,7 +58,7 @@ describe CodiceFiscale::ItalianCitizen do
58
58
 
59
59
  it 'is not valid' do
60
60
  citizen_with_invalid_date.valid?
61
- citizen_with_invalid_date.errors[:birthdate].should_not be_empty
61
+ expect(citizen_with_invalid_date.errors[:birthdate]).not_to be_empty
62
62
  end
63
63
  end
64
64
  end
@@ -1,25 +1,34 @@
1
+ # -*- encoding: utf-8 -*-
1
2
  require 'spec_helper'
2
3
 
3
4
  describe CodiceFiscale do
4
5
  describe '#calculate' do
5
- let(:mario_attributes) { {:name => 'mario', :surname => 'rossi', :gender => :male, :birthdate => Date.new(1987, 1, 1),
6
- :province_code => 'lc', :city_name => 'Abbadia Lariana'} }
7
-
8
6
  before do
9
7
  subject.config.city_code = nil
10
8
  subject.config.country_code = nil
11
9
  end
12
10
 
13
11
  it 'returns the expected code' do
14
- subject.calculate(mario_attributes).should == 'RSSMRA87A01A005V'
12
+ # Please note that the following are completely made-up data
13
+ [
14
+ [{:name => 'mario', :surname => 'rossi', :gender => :male, :birthdate => Date.new(1987, 1, 1), :province_code => 'lc', :city_name => 'Abbadia Lariana'}, "RSSMRA87A01A005V"],
15
+ [{:name => "Marco", :surname => "Rossi", :gender => :male, :birthdate => Date.new(1983, 5, 3), :city_name => "Oggiono", :province_code => "LC"}, "RSSMRC83E03G009W"],
16
+ [{:name => "John", :surname => "Smith", :gender => :male, :birthdate => Date.new(1988, 5, 3), :country_name => "Francia"}, "SMTJHN88E03Z110R"],
17
+ [{:name => "John", :surname => "Smith", :gender => :male, :birthdate => Date.new(1988, 5, 3), :country_name => "France"}, "SMTJHN88E03Z110R"],
18
+ [{:name => "John", :surname => "Smith", :gender => :male, :birthdate => Date.new(1988, 5, 3), :country_name => "Sao Tomé e Principe"}, "SMTJHN88E03Z341A"],
19
+ [{:name => "Marco", :surname => "Rossi", :gender => :male, :birthdate => Date.new(1983, 5, 3), :city_name => "Forlì", :province_code =>"FC"}, "RSSMRC83E03D704X"],
20
+ ].each do |row|
21
+ params, expected_code = row[0], row[1]
22
+ expect(subject.calculate(params)).to eq expected_code
23
+ end
15
24
  end
16
25
 
17
26
  context 'when params are not valid' do
18
- let(:invalid_attributes) { mario_attributes.merge(:name => '') }
27
+ let(:invalid_attributes) { {:name => ''} }
19
28
 
20
29
  it 'raises an error' do
21
- lambda { subject.calculate(invalid_attributes) }.should raise_error(ArgumentError)
30
+ expect { subject.calculate(invalid_attributes) }.to raise_error(ArgumentError)
22
31
  end
23
32
  end
24
33
  end
25
- end
34
+ end
data/spec/spec_helper.rb CHANGED
@@ -3,5 +3,3 @@ def fixtures_path
3
3
  end
4
4
 
5
5
  require File.expand_path '../../lib/codice_fiscale', __FILE__
6
-
7
-