spain_zip_codes 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,53 @@
1
+ provinces:
2
+ '01': Álava
3
+ '02': Albacete
4
+ '03': Alicante
5
+ '04': Almería
6
+ '05': Ávila
7
+ '06': Badajoz
8
+ '07': Baleares (Palma de Mallorca)
9
+ '08': Barcelona
10
+ '09': Burgos
11
+ '10': Cáceres
12
+ '11': Cádiz
13
+ '12': Castellón
14
+ '13': Ciudad Real
15
+ '14': Córdoba
16
+ '15': Coruña
17
+ '16': Cuenca
18
+ '17': Gerona
19
+ '18': Granada
20
+ '19': Guadalajara
21
+ '20': Guipúzcoa (San Sebastián)
22
+ '21': Huelva
23
+ '22': Huesca
24
+ '23': Jaén
25
+ '24': León
26
+ '25': Lérida
27
+ '26': La Rioja (Logroño)
28
+ '27': Lugo
29
+ '28': Madrid
30
+ '29': Málaga
31
+ '30': Murcia
32
+ '31': Navarra (Pamplona)
33
+ '32': Orense
34
+ '33': Asturias
35
+ '34': Palencia
36
+ '35': Las Palmas
37
+ '36': Pontevedra
38
+ '37': Salamanca
39
+ '38': Santa Cruz de Tenerife
40
+ '39': Cantabria
41
+ '40': Segovia
42
+ '41': Sevilla
43
+ '42': Soria
44
+ '43': Tarragona
45
+ '44': Teruel
46
+ '45': Toledo
47
+ '46': Valencia
48
+ '47': Valladolid
49
+ '48': Vizcaya
50
+ '49': Zamora
51
+ '50': Zaragoza
52
+ '51': Ceuta
53
+ '52': Melilla
@@ -0,0 +1,47 @@
1
+ require 'yaml'
2
+
3
+ # This class has duplicated code some way, but I prefer to keep the methods
4
+ # separated even if they are the same so they are easier to change in the future
5
+
6
+ module SpainZipCodes
7
+ class Locationer
8
+ SOURCE_YAML = %w(lib spain_zip_codes data zip_locations_es.yml).join('/')
9
+ LOCATIONS = YAML.load_file(SOURCE_YAML)['locations']
10
+ SLUGS_YAML = %w(lib spain_zip_codes data slug_locations_es.yml).join('/')
11
+ SLUGS_LOCS = YAML.load_file(SLUGS_YAML)['locations']
12
+
13
+ def self.to_location(zip)
14
+ location = false
15
+
16
+ LOCATIONS.keys.each do |key|
17
+ if LOCATIONS[key].include?(zip)
18
+ location = key
19
+ break
20
+ end
21
+ end
22
+
23
+ location
24
+ end
25
+
26
+ def self.to_zip(location)
27
+ LOCATIONS[location] || []
28
+ end
29
+
30
+ def self.slug_to_zip(location_slug)
31
+ SLUGS_LOCS[location_slug] || []
32
+ end
33
+
34
+ def self.zip_to_slug(zip)
35
+ slug = false
36
+
37
+ SLUGS_LOCS.keys.each do |key|
38
+ if SLUGS_LOCS[key].include?(zip)
39
+ slug = key
40
+ break
41
+ end
42
+ end
43
+
44
+ slug
45
+ end
46
+ end
47
+ end
@@ -0,0 +1,21 @@
1
+ require 'yaml'
2
+
3
+ module SpainZipCodes
4
+ class Provincer
5
+ SOURCE_YAML = %w(lib spain_zip_codes data zip_provinces_es.yml).join('/')
6
+ PROVINCES = YAML.load_file(SOURCE_YAML).fetch('provinces')
7
+
8
+ def self.to_province(zip)
9
+ return false unless zip.is_a?(String) && zip.length == 5
10
+
11
+ truncated_zip = zip[0, 2]
12
+ PROVINCES[truncated_zip]
13
+ end
14
+
15
+ def self.to_zip(province)
16
+ zip_prefix = PROVINCES.key(province)
17
+ return false unless province.length > 0
18
+ zip_prefix
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,3 @@
1
+ module SpainZipCodes
2
+ VERSION = '0.0.1'
3
+ end
@@ -0,0 +1,22 @@
1
+ # coding: utf-8
2
+ require File.expand_path('../lib/spain_zip_codes/version', __FILE__)
3
+
4
+ Gem::Specification.new do |spec|
5
+ spec.name = 'spain_zip_codes'
6
+ spec.version = SpainZipCodes::VERSION
7
+ spec.authors = ['Luismi Ramírez', 'Gustavo Caso']
8
+ spec.email = ['luismir89@gmail.com', 'gustavocaso@gmail.com']
9
+ spec.summary = %q{Obtain provinces and locations based on zip code}
10
+ spec.homepage = 'https://github.com/luismiramirez/spain_zip_codes'
11
+ spec.license = 'MIT'
12
+
13
+ spec.files = `git ls-files -z`.gsub(/\x00/, ',').split(',')
14
+ spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
15
+ spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
16
+ spec.require_paths = ['lib']
17
+
18
+ spec.add_development_dependency 'rspec'
19
+ spec.add_development_dependency 'bundler', '~> 1.6'
20
+ spec.add_development_dependency 'rake'
21
+ spec.add_development_dependency 'simplecov'
22
+ end
@@ -0,0 +1,79 @@
1
+ require 'spec_helper'
2
+
3
+ describe 'Locationer' do
4
+ before(:each) do
5
+ @locationer = SpainZipCodes::Locationer
6
+ end
7
+
8
+ describe '#to_location' do
9
+ context 'with existing zip code' do
10
+ it 'returns the correct location' do
11
+ expect(@locationer.to_location('28922')).to eq('Alcorcón')
12
+ end
13
+ end
14
+
15
+ context 'with integer zip code' do
16
+ it 'returns false' do
17
+ expect(@locationer.to_location(22244)).to be false
18
+ end
19
+ end
20
+
21
+ context 'with unexisting zip code' do
22
+ it 'returns false' do
23
+ expect(@locationer.to_location(222999)).to be false
24
+ end
25
+ end
26
+ end
27
+
28
+ describe '#to_zip' do
29
+ context 'with existing location' do
30
+ it 'returns an array of zip codes' do
31
+ expected_result = %w(28920 28921 28922 28923 28924 28925)
32
+
33
+ expect(@locationer.to_zip('Alcorcón')).to eq(expected_result)
34
+ end
35
+ end
36
+
37
+ context 'with unexisting location' do
38
+ it 'returns an empty array' do
39
+ expect(@locationer.to_zip('Jamón Serrano')).to eq([])
40
+ end
41
+ end
42
+ end
43
+
44
+ describe '#slug_to_zip' do
45
+ context 'with existing slug' do
46
+ it 'returns an array of zip codes' do
47
+ expected_result = %w(28920 28921 28922 28923 28924 28925)
48
+
49
+ expect(@locationer.slug_to_zip('alcorcon')).to eq(expected_result)
50
+ end
51
+ end
52
+
53
+ context 'with unexisting slug' do
54
+ it 'returns an empty array' do
55
+ expect(@locationer.slug_to_zip('el-tiroriro')).to eq([])
56
+ end
57
+ end
58
+ end
59
+
60
+ describe '#zip_to_slug' do
61
+ context 'with existing zip code' do
62
+ it 'returns the correct slug' do
63
+ expect(@locationer.zip_to_slug('28922')).to eq('alcorcon')
64
+ end
65
+ end
66
+
67
+ context 'with integer zip code' do
68
+ it 'returns false' do
69
+ expect(@locationer.zip_to_slug(66998)).to be false
70
+ end
71
+ end
72
+
73
+ context 'with unexisting zip code' do
74
+ it 'returns false' do
75
+ expect(@locationer.zip_to_slug('6969699')).to be false
76
+ end
77
+ end
78
+ end
79
+ end
@@ -0,0 +1,42 @@
1
+ require 'spec_helper'
2
+
3
+ describe 'Provincer' do
4
+ before(:each) do
5
+ @provincer = SpainZipCodes::Provincer
6
+ end
7
+
8
+ describe '#to_province' do
9
+ context 'with existing zip code' do
10
+ it 'returns the correct province' do
11
+ expect(@provincer.to_province('28047')).to eq('Madrid')
12
+ expect(@provincer.to_province('08033')).to eq('Barcelona')
13
+ end
14
+ end
15
+
16
+ context 'with integer zip code' do
17
+ it 'returns false' do
18
+ expect(@provincer.to_province(28047)).to be false
19
+ end
20
+ end
21
+
22
+ context 'with unexisting string zip code' do
23
+ it 'returns false' do
24
+ expect(@provincer.to_province(975890)).to be false
25
+ end
26
+ end
27
+ end
28
+
29
+ describe '#to_zip' do
30
+ context 'with existing province' do
31
+ it 'returns the correct zip prefix' do
32
+ expect(@provincer.to_zip('Madrid')).to eq('28')
33
+ end
34
+ end
35
+
36
+ context 'with unexisting province' do
37
+ it 'returns false' do
38
+ expect(@provincer.to_province('Gallifrey')).to be false
39
+ end
40
+ end
41
+ end
42
+ end
@@ -0,0 +1,68 @@
1
+ require 'spec_helper'
2
+
3
+ describe 'SpainZipCodes' do
4
+ before(:each) do
5
+ @provincer = SpainZipCodes::Provincer
6
+ @locationer = SpainZipCodes::Locationer
7
+ end
8
+
9
+ describe '#zip_to_province' do
10
+ it 'calls Provincer#to_province with params' do
11
+ zip = '28047'
12
+
13
+ expect(@provincer).to receive(:to_province).with(zip)
14
+
15
+ SpainZipCodes.zip_to_province(zip)
16
+ end
17
+ end
18
+
19
+ describe '#province_to_zip' do
20
+ it 'calls Provincer#to_zip with params' do
21
+ province = 'Madrid'
22
+
23
+ expect(@provincer).to receive(:to_zip).with(province)
24
+
25
+ SpainZipCodes.province_to_zip(province)
26
+ end
27
+ end
28
+
29
+ describe '#zip_to_location' do
30
+ it 'calls Locationer#to_zip with params' do
31
+ zip = '28047'
32
+
33
+ expect(@locationer).to receive(:to_location).with(zip)
34
+
35
+ SpainZipCodes.zip_to_location(zip)
36
+ end
37
+ end
38
+
39
+ describe '#location_to_zip' do
40
+ it 'calls Locationer#to_zip with params' do
41
+ location = 'Fuenlabrada'
42
+
43
+ expect(@locationer).to receive(:to_zip).with(location)
44
+
45
+ SpainZipCodes.location_to_zip(location)
46
+ end
47
+ end
48
+
49
+ describe '#location_slug_to_zip' do
50
+ it 'calls Locationer#slug_to_zip with params' do
51
+ location_slug = 'alcorcon'
52
+
53
+ expect(@locationer).to receive(:slug_to_zip).with(location_slug)
54
+
55
+ SpainZipCodes.location_slug_to_zip(location_slug)
56
+ end
57
+ end
58
+
59
+ describe '#zip_to_location_slug' do
60
+ it 'calls Locationer#zip_to_slug with params' do
61
+ zip = '28922'
62
+
63
+ expect(@locationer).to receive(:zip_to_slug).with(zip)
64
+
65
+ SpainZipCodes.zip_to_location_slug(zip)
66
+ end
67
+ end
68
+ end
@@ -0,0 +1,4 @@
1
+ require 'simplecov'
2
+ SimpleCov.start
3
+
4
+ require 'spain_zip_codes'
metadata ADDED
@@ -0,0 +1,124 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: spain_zip_codes
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ platform: ruby
6
+ authors:
7
+ - Luismi Ramírez
8
+ - Gustavo Caso
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2014-10-16 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: rspec
16
+ requirement: !ruby/object:Gem::Requirement
17
+ requirements:
18
+ - - '>='
19
+ - !ruby/object:Gem::Version
20
+ version: '0'
21
+ type: :development
22
+ prerelease: false
23
+ version_requirements: !ruby/object:Gem::Requirement
24
+ requirements:
25
+ - - '>='
26
+ - !ruby/object:Gem::Version
27
+ version: '0'
28
+ - !ruby/object:Gem::Dependency
29
+ name: bundler
30
+ requirement: !ruby/object:Gem::Requirement
31
+ requirements:
32
+ - - ~>
33
+ - !ruby/object:Gem::Version
34
+ version: '1.6'
35
+ type: :development
36
+ prerelease: false
37
+ version_requirements: !ruby/object:Gem::Requirement
38
+ requirements:
39
+ - - ~>
40
+ - !ruby/object:Gem::Version
41
+ version: '1.6'
42
+ - !ruby/object:Gem::Dependency
43
+ name: rake
44
+ requirement: !ruby/object:Gem::Requirement
45
+ requirements:
46
+ - - '>='
47
+ - !ruby/object:Gem::Version
48
+ version: '0'
49
+ type: :development
50
+ prerelease: false
51
+ version_requirements: !ruby/object:Gem::Requirement
52
+ requirements:
53
+ - - '>='
54
+ - !ruby/object:Gem::Version
55
+ version: '0'
56
+ - !ruby/object:Gem::Dependency
57
+ name: simplecov
58
+ requirement: !ruby/object:Gem::Requirement
59
+ requirements:
60
+ - - '>='
61
+ - !ruby/object:Gem::Version
62
+ version: '0'
63
+ type: :development
64
+ prerelease: false
65
+ version_requirements: !ruby/object:Gem::Requirement
66
+ requirements:
67
+ - - '>='
68
+ - !ruby/object:Gem::Version
69
+ version: '0'
70
+ description:
71
+ email:
72
+ - luismir89@gmail.com
73
+ - gustavocaso@gmail.com
74
+ executables: []
75
+ extensions: []
76
+ extra_rdoc_files: []
77
+ files:
78
+ - .gitignore
79
+ - .travis.yml
80
+ - Gemfile
81
+ - LICENSE.txt
82
+ - README.md
83
+ - Rakefile
84
+ - lib/spain_zip_codes.rb
85
+ - lib/spain_zip_codes/data/slug_locations_es.yml
86
+ - lib/spain_zip_codes/data/zip_locations_es.yml
87
+ - lib/spain_zip_codes/data/zip_provinces_es.yml
88
+ - lib/spain_zip_codes/locationer.rb
89
+ - lib/spain_zip_codes/provincer.rb
90
+ - lib/spain_zip_codes/version.rb
91
+ - spain_zip_codes.gemspec
92
+ - spec/locationer_spec.rb
93
+ - spec/provincer_spec.rb
94
+ - spec/spain_zip_codes_spec.rb
95
+ - spec/spec_helper.rb
96
+ homepage: https://github.com/luismiramirez/spain_zip_codes
97
+ licenses:
98
+ - MIT
99
+ metadata: {}
100
+ post_install_message:
101
+ rdoc_options: []
102
+ require_paths:
103
+ - lib
104
+ required_ruby_version: !ruby/object:Gem::Requirement
105
+ requirements:
106
+ - - '>='
107
+ - !ruby/object:Gem::Version
108
+ version: '0'
109
+ required_rubygems_version: !ruby/object:Gem::Requirement
110
+ requirements:
111
+ - - '>='
112
+ - !ruby/object:Gem::Version
113
+ version: '0'
114
+ requirements: []
115
+ rubyforge_project:
116
+ rubygems_version: 2.2.2
117
+ signing_key:
118
+ specification_version: 4
119
+ summary: Obtain provinces and locations based on zip code
120
+ test_files:
121
+ - spec/locationer_spec.rb
122
+ - spec/provincer_spec.rb
123
+ - spec/spain_zip_codes_spec.rb
124
+ - spec/spec_helper.rb