itax_code 0.1.3 → 0.1.4

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,277 @@
1
+ "code","province","name"
2
+ "Z100","EE","ALBANIA"
3
+ "Z101","EE","ANDORRA"
4
+ "Z102","EE","AUSTRIA"
5
+ "Z103","EE","BELGIO"
6
+ "Z104","EE","BULGARIA"
7
+ "Z105","EE","CECOSLOVACCHIA"
8
+ "Z106","EE","CITTA DEL VATICANO / VATICANO"
9
+ "Z107","EE","DANIMARCA"
10
+ "Z108","EE","FAER OER"
11
+ "Z109","EE","FINLANDIA"
12
+ "Z110","EE","FRANCIA"
13
+ "Z111","EE","GERMANIA REP. DEMOCRATICA"
14
+ "Z112","EE","GERMANIA REP. FEDERALE / GERMANIA"
15
+ "Z113","EE","GIBILTERRA"
16
+ "Z114","EE","GRAN BRETAGNA"
17
+ "Z115","EE","GRECIA"
18
+ "Z116","EE","IRLANDA"
19
+ "Z117","EE","ISLANDA"
20
+ "Z118","EE","IUGOSLAVIA"
21
+ "Z119","EE","LIECHTENSTEIN"
22
+ "Z120","EE","LUSSEMBURGO"
23
+ "Z121","EE","MALTA"
24
+ "Z122","EE","MAN"
25
+ "Z123","EE","MONACO"
26
+ "Z124","EE","NORMANNE"
27
+ "Z125","EE","NORVEGIA"
28
+ "Z126","EE","PAESI BASSI"
29
+ "Z127","EE","POLONIA"
30
+ "Z128","EE","PORTOGALLO"
31
+ "Z129","EE","ROMANIA"
32
+ "Z130","EE","SAN MARINO"
33
+ "Z131","EE","SPAGNA"
34
+ "Z132","EE","SVEZIA"
35
+ "Z133","EE","SVIZZERA"
36
+ "Z134","EE","UNGHERIA"
37
+ "Z135","EE","URSS"
38
+ "Z136","EE","GEORGIA"
39
+ "Z137","EE","ARMENIA"
40
+ "Z138","EE","UCRAINA"
41
+ "Z139","EE","BIELORUSSIA"
42
+ "Z140","EE","MOLDAVIA"
43
+ "Z141","EE","AZERBAIDJAN"
44
+ "Z142","EE","KIRGHIZISTAN"
45
+ "Z143","EE","UZBEKISTAN"
46
+ "Z144","EE","ESTONIA"
47
+ "Z145","EE","LETTONIA"
48
+ "Z146","EE","LITUANIA"
49
+ "Z147","EE","TAGIKISTAN"
50
+ "Z148","EE","MACEDONIA"
51
+ "Z149","EE","CROAZIA"
52
+ "Z150","EE","SLOVENIA"
53
+ "Z151","EE","TURKEMENISTAN"
54
+ "Z152","EE","KAZAKISTAN"
55
+ "Z153","EE","BOSNIA ED ERZEGOVINA / BOSNIA ERZEGOVINA"
56
+ "Z154","EE","RUSSIA / FEDERAZIONE RUSSA"
57
+ "Z155","EE","REPUBBLICA SLOVACCA"
58
+ "Z156","EE","REPUBBLICA CECA"
59
+ "Z200","EE","AFGHANISTAN"
60
+ "Z201","EE","ARABIA MERIDIONALE"
61
+ "Z202","EE","PROTETTORATO DELLA ARABIA MERIDIONALE"
62
+ "Z203","EE","ARABIA SAUDITA"
63
+ "Z204","EE","BAHREIN"
64
+ "Z205","EE","BHUTAN"
65
+ "Z206","EE","BIRMANIA"
66
+ "Z207","EE","BRUNEI"
67
+ "Z208","EE","CAMBOGIA"
68
+ "Z209","EE","SRI LANKA"
69
+ "Z210","EE","CINA REPUBBLICA POPOLARE / CINA / CHINA"
70
+ "Z211","EE","CIPRO"
71
+ "Z212","EE","COCOS"
72
+ "Z213","EE","REPUBBLICA DI COREA"
73
+ "Z214","EE","COREA REPUBBLICA POPOLARE"
74
+ "Z215","EE","EMIRATI ARABI UNITI"
75
+ "Z216","EE","FILIPPINE"
76
+ "Z217","EE","CINA REPUBBLICA NAZIONALE"
77
+ "Z218","EE","TERRITORIO DI GAZA"
78
+ "Z219","EE","GIAPPONE"
79
+ "Z220","EE","GIORDANIA"
80
+ "Z221","EE","HONG KONG"
81
+ "Z222","EE","INDIA"
82
+ "Z223","EE","INDONESIA"
83
+ "Z224","EE","IRAN"
84
+ "Z225","EE","IRAQ"
85
+ "Z226","EE","ISRAELE"
86
+ "Z227","EE","KUWAIT"
87
+ "Z228","EE","LAOS"
88
+ "Z229","EE","LIBANO"
89
+ "Z230","EE","MALESIA"
90
+ "Z231","EE","MACAO"
91
+ "Z232","EE","MALDIVE"
92
+ "Z233","EE","MONGOLIA REP. POPOLARE"
93
+ "Z234","EE","NEPAL"
94
+ "Z235","EE","OMAN"
95
+ "Z236","EE","PAKISTAN"
96
+ "Z237","EE","QATAR"
97
+ "Z238","EE","RYUKYU"
98
+ "Z239","EE","SIKKIM"
99
+ "Z240","EE","SIRIA"
100
+ "Z241","EE","THAILANDIA"
101
+ "Z242","EE","TIMOR"
102
+ "Z243","EE","TURCHIA"
103
+ "Z244","EE","VIETNAM DEL SUD"
104
+ "Z245","EE","VIETNAM DEL NORD"
105
+ "Z246","EE","YEMEN"
106
+ "Z247","EE","MALAYSIA"
107
+ "Z248","EE","SINGAPORE"
108
+ "Z249","EE","BANGLADESH"
109
+ "Z250","EE","YEMEN REP. DEM. POPOLARE"
110
+ "Z251","EE","VIETNAM"
111
+ "Z300","EE","NAMIBIA"
112
+ "Z301","EE","ALGERIA"
113
+ "Z302","EE","ANGOLA"
114
+ "Z303","EE","BASUTOLAND SUD AFRICA BRITANNICO"
115
+ "Z304","EE","BECIUANIA SUD AFRICA BRITANNICO"
116
+ "Z305","EE","BURUNDI"
117
+ "Z306","EE","CAMERUN"
118
+ "Z307","EE","CAPO VERDE"
119
+ "Z308","EE","IMPERO CENTROAFRICANO"
120
+ "Z309","EE","CIAD"
121
+ "Z310","EE","COMORE"
122
+ "Z311","EE","CONGO REPUBBLICA POPOLARE"
123
+ "Z312","EE","ZAIRE"
124
+ "Z313","EE","COSTA D'AVORIO"
125
+ "Z314","EE","BENIN"
126
+ "Z315","EE","ETIOPIA"
127
+ "Z316","EE","GABON"
128
+ "Z317","EE","GAMBIA"
129
+ "Z318","EE","GHANA"
130
+ "Z319","EE","GUINEA"
131
+ "Z320","EE","GUINEA BISSAU"
132
+ "Z321","EE","GUINEA EQUATORIALE"
133
+ "Z322","EE","KENYA"
134
+ "Z323","EE","IFNI"
135
+ "Z324","EE","LA REUNION"
136
+ "Z325","EE","LIBERIA"
137
+ "Z326","EE","LIBIA"
138
+ "Z327","EE","MADAGASCAR"
139
+ "Z328","EE","MALAWI"
140
+ "Z329","EE","MALI"
141
+ "Z330","EE","MAROCCO"
142
+ "Z331","EE","MAURITANIA"
143
+ "Z332","EE","MAURIZIO"
144
+ "Z333","EE","MOZAMBICO"
145
+ "Z334","EE","NIGER"
146
+ "Z335","EE","NIGERIA"
147
+ "Z336","EE","EGITTO"
148
+ "Z337","EE","ZIMBABWE"
149
+ "Z338","EE","RUANDA"
150
+ "Z339","EE","SAHARA SPAGNOLO"
151
+ "Z340","EE","SANT ELENA"
152
+ "Z341","EE","PRINCIPE"
153
+ "Z342","EE","SEICELLE"
154
+ "Z343","EE","SENEGAL"
155
+ "Z344","EE","SIERRA LEONE"
156
+ "Z345","EE","SOMALIA"
157
+ "Z346","EE","SOMALIA FRANCESE"
158
+ "Z347","EE","REPUBBLICA SUDAFRICANA"
159
+ "Z348","EE","SUDAN"
160
+ "Z349","EE","SWAZILAND"
161
+ "Z350","EE","TANGANICA"
162
+ "Z351","EE","TOGO"
163
+ "Z352","EE","TUNISIA"
164
+ "Z353","EE","UGANDA"
165
+ "Z354","EE","BURKINA FASO"
166
+ "Z355","EE","ZAMBIA"
167
+ "Z356","EE","ZANZIBAR"
168
+ "Z357","EE","TANZANIA"
169
+ "Z358","EE","BOTSWANA"
170
+ "Z359","EE","LESOTHO"
171
+ "Z360","EE","MAYOTTE"
172
+ "Z361","EE","GIBUTI"
173
+ "Z362","EE","SAHARA MERIDIONALE"
174
+ "Z363","EE","SAHARA SETTENTRIONALE"
175
+ "Z364","EE","BOPHUTHATSWANA"
176
+ "Z365","EE","TRANSKEI"
177
+ "Z366","EE","VENDA"
178
+ "Z367","EE","CISKEI"
179
+ "Z368","EE","ERITREA"
180
+ "Z400","EE","BERMUDE"
181
+ "Z401","EE","CANADA"
182
+ "Z402","EE","GROENLANDIA"
183
+ "Z403","EE","SAINT PIERRE ET MIQUELON"
184
+ "Z404","EE","STATI UNITI D'AMERICA"
185
+ "Z500","EE","ANTILLE BRITANNICHE"
186
+ "Z501","EE","ANTILLE OLANDESI"
187
+ "Z502","EE","BAHAMA"
188
+ "Z503","EE","COSTA RICA"
189
+ "Z504","EE","CUBA"
190
+ "Z505","EE","REPUBBLICA DOMINICANA"
191
+ "Z506","EE","EL SALVADOR"
192
+ "Z507","EE","GIAMAICA"
193
+ "Z508","EE","GUADALUPA"
194
+ "Z509","EE","GUATEMALA"
195
+ "Z510","EE","HAITI"
196
+ "Z511","EE","HONDURAS"
197
+ "Z512","EE","BELIZE"
198
+ "Z513","EE","MARTINICA"
199
+ "Z514","EE","MESSICO"
200
+ "Z515","EE","NICARAGUA"
201
+ "Z516","EE","PANAMA"
202
+ "Z517","EE","PANAMA ZONA DEL CANALE"
203
+ "Z518","EE","PUERTO RICO"
204
+ "Z519","EE","TURKS"
205
+ "Z520","EE","ISOLE VERGINI"
206
+ "Z522","EE","BARBADOS"
207
+ "Z523","EE","ANTILLE BRITANNICHE"
208
+ "Z524","EE","GRENADA"
209
+ "Z525","EE","ISOLE VERGINI BRITANNICHE "
210
+ "Z526","EE","DOMINICA"
211
+ "Z527","EE","SAINT LUCIA"
212
+ "Z528","EE","SAINT VINCENT E GRENADINE"
213
+ "Z529","EE","ISOLA ANGUILLA"
214
+ "Z530","EE","ISOLE CAYMAN"
215
+ "Z531","EE","MONTSERRAT"
216
+ "Z532","EE","ANTIGUE E BARBUDA"
217
+ "Z533","EE","SAINT KITTS E NEVIS"
218
+ "Z600","EE","ARGENTINA"
219
+ "Z601","EE","BOLIVIA"
220
+ "Z602","EE","BRASILE"
221
+ "Z603","EE","CILE"
222
+ "Z604","EE","COLOMBIA"
223
+ "Z605","EE","ECUADOR"
224
+ "Z606","EE","REPUBBLICA DELLA GUAYANA"
225
+ "Z607","EE","GUAYANA FRANCESE"
226
+ "Z608","EE","SURINAME"
227
+ "Z609","EE","MALVINE"
228
+ "Z610","EE","PARAGUAY"
229
+ "Z611","EE","PERU"
230
+ "Z612","EE","TRINIDAD E TOBAGO"
231
+ "Z613","EE","URUGUAY"
232
+ "Z614","EE","VENEZUELA"
233
+ "Z700","EE","AUSTRALIA"
234
+ "Z701","EE","CAROLINE"
235
+ "Z702","EE","CHRISTMAS"
236
+ "Z703","EE","COOK"
237
+ "Z704","EE","FIGI O VITI"
238
+ "Z705","EE","ELLICE"
239
+ "Z706","EE","GUAM"
240
+ "Z707","EE","IRIAN OCCIDENTALE"
241
+ "Z708","EE","MACQUARIE"
242
+ "Z709","EE","MARCUS"
243
+ "Z710","EE","MARIANNE"
244
+ "Z711","EE","MARSHALL"
245
+ "Z712","EE","MIDWAY"
246
+ "Z713","EE","NAURU"
247
+ "Z714","EE","SAVAGE"
248
+ "Z715","EE","NORFOLK"
249
+ "Z716","EE","NUOVA CALEDONIA"
250
+ "Z717","EE","NUOVE EBRIDI"
251
+ "Z718","EE","NUOVA GUINEA"
252
+ "Z719","EE","NUOVA ZELANDA"
253
+ "Z720","EE","PAPUASIA"
254
+ "Z721","EE","PASQUA"
255
+ "Z722","EE","PITCAIRN"
256
+ "Z723","EE","POLINESIA"
257
+ "Z724","EE","SALOMONE"
258
+ "Z725","EE","SAMOA AMERICANE"
259
+ "Z726","EE","SAMOA OCCIDENTALI"
260
+ "Z727","EE","TOKELAU"
261
+ "Z728","EE","TONGA O DEGLI AMICI"
262
+ "Z729","EE","WALLIS"
263
+ "Z730","EE","PAPUA NUOVA GUINEA"
264
+ "Z731","EE","KIRIBATI"
265
+ "Z732","EE","TUVALU"
266
+ "Z733","EE","VANUATU"
267
+ "Z734","EE","PALAU REPUBBLICA"
268
+ "Z735","EE","MICRONESIA STATI FEDERALI / MICRONESIA"
269
+ "Z800","EE","DIPENDENZE CANADESI"
270
+ "Z801","EE","DIPENDENZE NORVEGESI"
271
+ "Z802","EE","DIPENDENZE SOVIETICHE"
272
+ "Z900","EE","DIPENDENZE AUSTRALIANE"
273
+ "Z901","EE","DIPENDENZE BRITANNICHE"
274
+ "Z902","EE","DIPENDENZE FRANCESI"
275
+ "Z903","EE","DIPENDENZE NEOZELANDESI"
276
+ "Z905","EE","DIPENDENZE NORVEGESI"
277
+ "Z906","EE","DIPENDENZE SUDAFRICANE"
@@ -1,6 +1,5 @@
1
1
  module ItaxCode
2
- ##
3
- # This class handles the tax code generation logic.
2
+ # Handles the tax code generation logic.
4
3
  #
5
4
  # @param [String] surname The user first name
6
5
  # @param [String] name The user last name
@@ -9,7 +8,6 @@ module ItaxCode
9
8
  # @param [String] birthplace The user birthplace
10
9
  #
11
10
  # @example
12
- #
13
11
  # ItaxCode::Encoder.new(
14
12
  # surname: "Rossi",
15
13
  # name: "Matteo",
@@ -19,33 +17,29 @@ module ItaxCode
19
17
  # ).encode
20
18
  #
21
19
  # @return [String] The encoded tax code
22
-
23
20
  class Encoder
24
21
  class MissingDataError < StandardError; end
25
22
 
26
23
  def initialize(data = {}, utils = Utils.new)
27
24
  @surname = data[:surname]
28
25
  @name = data[:name]
29
- @gender = data[:gender].try :upcase
30
- @birthdate = parsed_date data[:birthdate]
26
+ @gender = data[:gender]&.upcase
27
+ @birthdate = Date.parse(data[:birthdate].to_s)
31
28
  @birthplace = data[:birthplace]
29
+ @utils = utils
32
30
 
33
31
  instance_variables.each do |ivar|
34
32
  next if instance_variable_get(ivar).present?
35
33
 
36
34
  raise MissingDataError, "missing #{ivar} value"
37
35
  end
38
-
39
- @utils = utils
40
36
  end
41
37
 
42
- ##
43
- # This method calculates the tax code.
38
+ # Computes the tax code from its components.
44
39
  #
45
40
  # @return [String] The calculated tax code
46
-
47
41
  def encode
48
- code = encode_surname
42
+ code = encode_surname
49
43
  code += encode_name
50
44
  code += encode_birthdate
51
45
  code += encode_birthplace
@@ -55,29 +49,23 @@ module ItaxCode
55
49
 
56
50
  private
57
51
 
58
- attr_accessor :surname,
59
- :name,
60
- :gender,
61
- :birthdate,
62
- :birthplace,
63
- :utils
52
+ attr_accessor :surname, :name, :gender, :birthdate, :birthplace, :utils
64
53
 
65
54
  def encode_surname
66
- str = utils.slugged(surname).chars
67
- consonants = utils.extract_consonants str
68
- vowels = utils.extract_vowels str
55
+ chars = utils.slugged(surname).chars
56
+ consonants = utils.extract_consonants chars
57
+ vowels = utils.extract_vowels chars
69
58
  "#{consonants[0..2]}#{vowels[0..2]}XXX"[0..2].upcase
70
59
  end
71
60
 
72
61
  def encode_name
73
- str = utils.slugged(name).chars
74
- consonants = utils.extract_consonants str
75
- vowels = utils.extract_vowels str
62
+ chars = utils.slugged(name).chars
63
+ consonants = utils.extract_consonants chars
64
+ vowels = utils.extract_vowels chars
76
65
 
77
66
  if consonants.length > 3
78
- arr = consonants.dup.chars
79
- arr.delete_at 1
80
- consonants = arr.join
67
+ consonants =
68
+ consonants.chars.values_at(0, 2..consonants.chars.size).join
81
69
  end
82
70
 
83
71
  "#{consonants[0..2]}#{vowels[0..2]}XXX"[0..2].upcase
@@ -90,23 +78,15 @@ module ItaxCode
90
78
  "#{year}#{month}#{day}"
91
79
  end
92
80
 
93
- def encode_birthplace(src = utils.municipalities, exit: false)
94
- place = src.find do |m|
95
- utils.slugged(m["name"]) == utils.slugged(birthplace)
81
+ def encode_birthplace(src = utils.cities, exit: false)
82
+ place = src.find do |item|
83
+ utils.slugged(birthplace) == utils.slugged(item["name"])
96
84
  end
97
85
 
98
86
  code = place.try(:[], "code")
99
87
  return code if code.present?
100
- return if exit
101
88
 
102
- encode_birthplace utils.countries, exit: true
103
- end
104
-
105
- def parsed_date(date)
106
- case date.class.name
107
- when "Date", "Time", "DateTime" then date
108
- else Date.parse(date)
109
- end
89
+ exit || encode_birthplace(utils.countries, exit: true)
110
90
  end
111
91
  end
112
92
  end
@@ -0,0 +1,36 @@
1
+ module ItaxCode
2
+ class Omocode
3
+ attr_reader :tax_code, :utils
4
+
5
+ # Creates a new instance for a given tax_code.
6
+ #
7
+ # @param [String] tax_code
8
+ # @param [Utils] utils
9
+ def initialize(tax_code, utils = Utils.new)
10
+ @tax_code = tax_code
11
+ @utils = utils
12
+ end
13
+
14
+ # Computes the omocodes from a given tax_code.
15
+ #
16
+ # @return [Array]
17
+ def list
18
+ chars = tax_code[0..14].chars
19
+ (omocodes(:decode, chars) + omocodes(:encode, chars)).uniq
20
+ end
21
+
22
+ private
23
+
24
+ def omocodes(action, chars)
25
+ utils.omocodia_subs_indexes.reverse.map do |i|
26
+ chars[i] = utils.public_send("omocodia_#{action}".to_sym, chars[i])
27
+ omocode(chars)
28
+ end
29
+ end
30
+
31
+ def omocode(chars)
32
+ code = chars.join
33
+ code + utils.encode_cin(code)
34
+ end
35
+ end
36
+ end
@@ -1,6 +1,7 @@
1
+ require "itax_code/omocode"
2
+
1
3
  module ItaxCode
2
- ##
3
- # This class handles the parsing logic.
4
+ # Handles the parsing logic.
4
5
  #
5
6
  # @param [String] tax_code
6
7
  #
@@ -9,23 +10,20 @@ module ItaxCode
9
10
  # ItaxCode::Parser.new("RSSMRA70A01L726S").decode
10
11
  #
11
12
  # @return [Hash]
12
-
13
13
  class Parser
14
14
  class NoTaxCodeError < StandardError; end
15
15
  class InvalidTaxCodeError < StandardError; end
16
16
 
17
17
  def initialize(tax_code, utils = Utils.new)
18
+ @tax_code = tax_code&.upcase
18
19
  @utils = utils
19
- @tax_code = (tax_code || "").upcase
20
20
  raise NoTaxCodeError if @tax_code.blank?
21
21
  raise InvalidTaxCodeError unless Validator.standard_length?(@tax_code)
22
22
  end
23
23
 
24
- ##
25
- # This method decodes the tax code.
24
+ # Decodes the tax code into its components.
26
25
  #
27
26
  # @return [Hash]
28
-
29
27
  def decode
30
28
  year = decode_year
31
29
  month = utils.months.find_index(raw[:birthdate_month]) + 1
@@ -37,7 +35,7 @@ module ItaxCode
37
35
  gender: gender,
38
36
  birthdate: [year, month, day].join("-"),
39
37
  birthplace: birthplace,
40
- omocodes: omocodes,
38
+ omocodes: Omocode.new(tax_code).list,
41
39
  raw: raw
42
40
  }
43
41
  end
@@ -79,50 +77,21 @@ module ItaxCode
79
77
  end
80
78
  end
81
79
 
82
- def decode_birthplace(src = utils.municipalities, exit: false)
83
- places = src.select do |m|
84
- m["code"] == municipality_code
80
+ def decode_birthplace(src = utils.cities, exit: false)
81
+ place = src.find do |item|
82
+ item["code"] == city_code && !item["name"].include?("soppresso")
85
83
  end
86
84
 
87
- place = places.find { |m| !m["name"].include? "soppresso" }
88
- place = place.presence || places.last
89
-
90
85
  if place.nil?
91
- return if exit
92
-
93
- decode_birthplace utils.countries, exit: true
86
+ exit ? return : decode_birthplace(utils.countries, exit: true)
94
87
  else
95
88
  place["name"] = place["name"].gsub(" (soppresso)", "")
96
- place.deep_symbolize_keys
89
+ place.to_h.deep_symbolize_keys
97
90
  end
98
91
  end
99
92
 
100
- def municipality_code
93
+ def city_code
101
94
  raw[:birthplace][0] + utils.omocodia_decode(raw[:birthplace][1..-1])
102
95
  end
103
-
104
- def omocodes
105
- code_chars = tax_code[0..14].chars
106
- codes = []
107
-
108
- utils.omocodia_subs_indexes.reverse_each do |i|
109
- code_chars[i] = utils.omocodia_decode(code_chars[i])
110
- end
111
-
112
- code = code_chars.join
113
- code_cin = utils.encode_cin(code)
114
- code += code_cin
115
- codes.push(code)
116
-
117
- utils.omocodia_subs_indexes.reverse_each do |i|
118
- code_chars[i] = utils.omocodia_encode(code_chars[i])
119
- code = code_chars.join
120
- code_cin = utils.encode_cin(code)
121
- code += code_cin
122
- codes.push(code)
123
- end
124
-
125
- codes
126
- end
127
96
  end
128
97
  end
@@ -1,3 +1,5 @@
1
+ require "csv"
2
+
1
3
  module ItaxCode
2
4
  class Utils
3
5
  def regex
@@ -97,16 +99,12 @@ module ItaxCode
97
99
  cin_remainders[tot % 26]
98
100
  end
99
101
 
100
- def municipalities
101
- @municipalities ||= JSON.parse(
102
- File.read("#{__dir__}/data/municipalities.json")
103
- )
102
+ def cities
103
+ CSV.foreach("#{__dir__}/data/cities.csv", headers: true)
104
104
  end
105
105
 
106
106
  def countries
107
- @countries ||= JSON.parse(
108
- File.read("#{__dir__}/data/countries.json")
109
- )
107
+ CSV.foreach("#{__dir__}/data/countries.csv", headers: true)
110
108
  end
111
109
  end
112
110
  end
@@ -1,9 +1,7 @@
1
1
  module ItaxCode
2
- ##
3
- # This class holds the validation logic.
2
+ # Handles the validation logic.
4
3
  #
5
4
  # @param [Hash] data The user input data
6
-
7
5
  class Validator
8
6
  LENGTH = 16
9
7
 
@@ -12,27 +10,22 @@ module ItaxCode
12
10
  end
13
11
 
14
12
  class << self
15
- ##
16
- # This method checks tax code standard length
17
- # against user and business fical code standards.
13
+ # Checks the tax code standard length against user
14
+ # and business fical code standards.
18
15
  #
19
16
  # @param [String] code The tax code
20
17
  #
21
18
  # @return [true, false]
22
-
23
19
  def standard_length?(code)
24
20
  code.length == LENGTH
25
21
  end
26
22
  end
27
23
 
28
- ##
29
- # This method check pre calculated tax code validity
30
- # against newly encoded tax code.
24
+ # Checks pre computed tax code validity against newly encoded tax code.
31
25
  #
32
- # @param [String] tax_code The pre calculated tax code
26
+ # @param [String] tax_code The pre computed tax code
33
27
  #
34
28
  # @return [true, false]
35
-
36
29
  def valid?(tax_code)
37
30
  encoded[0..10] == tax_code[0..10]
38
31
  end
@@ -1,3 +1,3 @@
1
1
  module ItaxCode
2
- VERSION = "0.1.3".freeze
2
+ VERSION = "0.1.4".freeze
3
3
  end