provincias 0.0.4 → 0.1.0
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/README.md +10 -7
- data/lib/provincias.rb +20 -5
- data/lib/provincias/version.rb +1 -1
- data/test/test_api.rb +11 -0
- metadata +7 -10
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 8e0142d3ca78de4e327b1bf0ae09de7396486d9a
|
4
|
+
data.tar.gz: 95c4cae04e6ea67ec46b3ea41bedfecbf09f5dba
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 1699f369933d3984bf89f28368b39ccdd58e3e62222218827ab7a064963f612df1668b54312252621450bd0f459089efb671485a844b4da4387c8aa7daf1bb00
|
7
|
+
data.tar.gz: 3d96f844964fb65b4cb140bcdfe0ea77c30519126b2443090405b91c46636fdcb6c8299a06a760035b6e06efcc2580f4defc350b2fb33937fe6be67d6dbadcc5
|
data/README.md
CHANGED
@@ -20,20 +20,22 @@ O instálala ejecutando el siguiente comando:
|
|
20
20
|
|
21
21
|
## Usage
|
22
22
|
|
23
|
-
La interfaz es similar a la de ActiveRecord, salvando las distancias. La gema provee
|
23
|
+
La interfaz es similar a la de ActiveRecord, salvando las distancias. La gema provee códigos numéricos e identificadores de tipo string llamados slugs (Cuyo funcionamiento emula al de la gema friendlyId) y que puedes usar para enlazarlas con tus modelos. Es posible buscar tanto provincias como ciudades usando indiferentemente IDs o slugs. Los slugs se generan a partir de los nombres pasando todos los caracteres a minúscula, eliminando símbolos y caracteres no alfanuméricos y separando cada palabra con un guión. Por ejemplo: `"Iruña Oka/Iruña de Oca"` => `"iruna-oka-iruna-de-oca"`
|
24
24
|
|
25
25
|
Gestión de provincias:
|
26
26
|
|
27
|
-
Provincias.find(28) => #<Provincia: @id=28, @name="Madrid">
|
28
|
-
Provincias.
|
27
|
+
Provincias.find(28) => #<Provincia: @id=28, @name="Madrid", @slug="madrid">
|
28
|
+
Provincias.find("madrid") => #<Provincia: @id=28, @name="Madrid", @slug="madrid">
|
29
|
+
Provincias.find_by_name('Palmas, Las') => #<Provincia: @id=35, @name="Palmas, Las", @slug="palmas-las">
|
29
30
|
Provincias.find_by_name('wombat') => nil
|
30
31
|
Provincias.all => [...] # Un array de provincias
|
31
32
|
Provincias.all_for_select => [...] # Un array de la forma [name, id] para usarlo en los helpers de tipo select en Rails
|
32
33
|
|
33
34
|
Gestión de ciudades de forma absoluta:
|
34
35
|
|
35
|
-
Provincias::Ciudades.find(35017) => #<Ciudad: @id=35017, @name="Puerto del Rosario" ...>
|
36
|
-
Provincias::Ciudades.
|
36
|
+
Provincias::Ciudades.find(35017) => #<Ciudad: @id=35017, @name="Puerto del Rosario", @slug="puerto-del-rosario"...>
|
37
|
+
Provincias::Ciudades.find("puerto-del-rosario") => #<Ciudad: @id=35017, @name="Puerto del Rosario", @slug="puerto-del-rosario"...>
|
38
|
+
Provincias::Ciudades.find_by_name("Puerto del Rosario") => #<Ciudad: @id=35017, @name="Puerto del Rosario", @slug="puerto-del-rosario" ...>
|
37
39
|
Provincias::Ciudades.all => [...] # Un array de ciudades
|
38
40
|
Provincias::Ciudades.all_for_select => [...] # Un array de la forma [name, id] para usarlo en los helpers de tipo select en Rails
|
39
41
|
Provincias::Ciudades.find_by_name("Puerto del Rosario").provincia => #<Provincia: @id=35, @name="Palmas, Las">
|
@@ -42,7 +44,8 @@ Gestión de ciudades de forma relativa a una provincia (Esta es la parte que no
|
|
42
44
|
|
43
45
|
Provincias.find(28).ciudades => [...] # Un array con las ciudades de la provincia de Madrid
|
44
46
|
Provincias.find(28).ciudades_for_select => [...] # Un array con las ciudades de la provincia de Madrid de la forma [name, id] para usarlo en los helpers de tipo select en Rails
|
45
|
-
Provincias.find(28).find_ciudad(28006) => #<Ciudad: @id=28006, @name="Alcobendas" ...>
|
46
|
-
Provincias.find(28).
|
47
|
+
Provincias.find(28).find_ciudad(28006) => #<Ciudad: @id=28006, @name="Alcobendas", @slug="alcobendas" ...>
|
48
|
+
Provincias.find(28).find_ciudad("alcobendas") => #<Ciudad: @id=28006, @name="Alcobendas", @slug="alcobendas" ...>
|
49
|
+
Provincias.find(28).find_ciudad_by_name("Alcobendas") => #<Ciudad: @id=28006, @name="Alcobendas", @slug="alcobendas" ...>
|
47
50
|
|
48
51
|
Todas las búsquedas retornan nil si no encuentran coincidencias con lo que estás buscando.
|
data/lib/provincias.rb
CHANGED
@@ -1,11 +1,16 @@
|
|
1
1
|
# -*- encoding: utf-8 -*-
|
2
2
|
require "provincias/version"
|
3
3
|
require 'csv'
|
4
|
+
require 'i18n'
|
4
5
|
|
5
6
|
module Provincias
|
6
7
|
|
7
8
|
def self.find(id)
|
8
|
-
@@provincias[id]
|
9
|
+
@@provincias[id] || self.find_by_slug(id)
|
10
|
+
end
|
11
|
+
|
12
|
+
def self.find_by_slug(slug)
|
13
|
+
@@provincias.values.select { |p| p.slug == slug }.first
|
9
14
|
end
|
10
15
|
|
11
16
|
def self.find_by_name(name)
|
@@ -21,9 +26,10 @@ module Provincias
|
|
21
26
|
end
|
22
27
|
|
23
28
|
class Provincia
|
24
|
-
attr_reader :id, :name
|
29
|
+
attr_reader :id, :name, :slug
|
25
30
|
def initialize(row)
|
26
31
|
id, @name = row
|
32
|
+
@slug = I18n.transliterate(@name).downcase.scan(/\w+/).join('-')
|
27
33
|
@id = id.to_i
|
28
34
|
end
|
29
35
|
|
@@ -36,7 +42,11 @@ module Provincias
|
|
36
42
|
end
|
37
43
|
|
38
44
|
def find_ciudad(id)
|
39
|
-
ciudades.select { |c| c.id == id }.first
|
45
|
+
ciudades.select { |c| c.id == id }.first || self.find_ciudad_by_slug(id)
|
46
|
+
end
|
47
|
+
|
48
|
+
def find_ciudad_by_slug(slug)
|
49
|
+
ciudades.select { |c| c.slug == slug }.first
|
40
50
|
end
|
41
51
|
|
42
52
|
def find_ciudad_by_name(name)
|
@@ -55,7 +65,11 @@ module Provincias
|
|
55
65
|
module Ciudades
|
56
66
|
|
57
67
|
def self.find(id)
|
58
|
-
@@ciudades[id]
|
68
|
+
@@ciudades[id] || self.find_by_slug(id)
|
69
|
+
end
|
70
|
+
|
71
|
+
def self.find_by_slug(slug)
|
72
|
+
@@ciudades.values.select { |c| c.slug == slug }.first
|
59
73
|
end
|
60
74
|
|
61
75
|
def self.find_by_name(name)
|
@@ -75,9 +89,10 @@ module Provincias
|
|
75
89
|
end
|
76
90
|
|
77
91
|
class Ciudad
|
78
|
-
attr_reader :provincia_id, :id, :dc, :name
|
92
|
+
attr_reader :provincia_id, :id, :dc, :name, :slug
|
79
93
|
def initialize(row)
|
80
94
|
provincia_id, number, @dc, @name = row
|
95
|
+
@slug = I18n.transliterate(@name).downcase.scan(/\w+/).join('-')
|
81
96
|
@provincia_id = provincia_id.to_i
|
82
97
|
@id = (provincia_id+number).to_i
|
83
98
|
end
|
data/lib/provincias/version.rb
CHANGED
data/test/test_api.rb
CHANGED
@@ -10,8 +10,12 @@ class TestApi < Test::Unit::TestCase
|
|
10
10
|
assert_nil Provincias.find(100000)
|
11
11
|
assert_equal Provincias.find(28).id, 28
|
12
12
|
assert_equal Provincias.find(28).name, "Madrid"
|
13
|
+
assert_equal Provincias.find(28).slug, "madrid"
|
14
|
+
assert_equal Provincias.find('madrid').name, "Madrid"
|
15
|
+
assert_equal Provincias.find('palmas-las').name, "Palmas, Las"
|
13
16
|
assert_equal Provincias.find_by_name('Palmas, Las').id, 35
|
14
17
|
assert_equal Provincias.find_by_name('Palmas, Las').name, 'Palmas, Las'
|
18
|
+
assert_equal Provincias.find_by_name('Palmas, Las').slug, 'palmas-las'
|
15
19
|
assert_nil Provincias.find_by_name('wombat')
|
16
20
|
assert_instance_of Array, Provincias.all
|
17
21
|
assert_instance_of Provincias::Provincia, Provincias.all.first
|
@@ -27,10 +31,15 @@ class TestApi < Test::Unit::TestCase
|
|
27
31
|
assert_not_nil Provincias::Ciudades.find(35017)
|
28
32
|
assert_equal Provincias::Ciudades.find(35017).id, 35017
|
29
33
|
assert_equal Provincias::Ciudades.find(35017).name, 'Puerto del Rosario'
|
34
|
+
assert_equal Provincias::Ciudades.find(35017).slug, 'puerto-del-rosario'
|
35
|
+
assert_equal Provincias::Ciudades.find('puerto-del-rosario').id, 35017
|
36
|
+
assert_equal Provincias::Ciudades.find('puerto-del-rosario').name, 'Puerto del Rosario'
|
37
|
+
assert_equal Provincias::Ciudades.find('puerto-del-rosario').slug, 'puerto-del-rosario'
|
30
38
|
assert_nil Provincias::Ciudades.find_by_name('wombat')
|
31
39
|
assert_instance_of Provincias::Ciudades::Ciudad, Provincias::Ciudades.find_by_name('Palmas de Gran Canaria, Las')
|
32
40
|
assert_equal Provincias::Ciudades.find_by_name('Palmas de Gran Canaria, Las').id, 35016
|
33
41
|
assert_equal Provincias::Ciudades.find_by_name('Palmas de Gran Canaria, Las').name, 'Palmas de Gran Canaria, Las'
|
42
|
+
assert_equal Provincias::Ciudades.find_by_name('Palmas de Gran Canaria, Las').slug, 'palmas-de-gran-canaria-las'
|
34
43
|
assert_instance_of Array, Provincias.find(28).ciudades
|
35
44
|
assert_instance_of Provincias::Ciudades::Ciudad, Provincias.find(28).ciudades.first
|
36
45
|
assert Provincias.find(28).ciudades.map { |c| c.name }.include?("Madrid")
|
@@ -38,7 +47,9 @@ class TestApi < Test::Unit::TestCase
|
|
38
47
|
assert_nil Provincias.find(28).find_ciudad(999999999)
|
39
48
|
assert_instance_of Provincias::Ciudades::Ciudad, Provincias.find(28).find_ciudad(28001)
|
40
49
|
assert_equal "Acebeda, La", Provincias.find(28).find_ciudad(28001).name
|
50
|
+
assert_equal "Acebeda, La", Provincias.find(28).find_ciudad("acebeda-la").name
|
41
51
|
assert_equal 28001, Provincias.find(28).find_ciudad(28001).id
|
52
|
+
assert_equal 28001, Provincias.find(28).find_ciudad("acebeda-la").id
|
42
53
|
assert_instance_of Provincias::Ciudades::Ciudad, Provincias.find(28).find_ciudad_by_name("Alcobendas")
|
43
54
|
assert_nil Provincias.find(28).find_ciudad_by_name("wombat")
|
44
55
|
assert_equal "Alcobendas", Provincias.find(28).find_ciudad_by_name("Alcobendas").name
|
metadata
CHANGED
@@ -1,15 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: provincias
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0
|
5
|
-
prerelease:
|
4
|
+
version: 0.1.0
|
6
5
|
platform: ruby
|
7
6
|
authors:
|
8
7
|
- Javier Toledo
|
9
8
|
autorequire:
|
10
9
|
bindir: bin
|
11
10
|
cert_chain: []
|
12
|
-
date:
|
11
|
+
date: 2013-12-12 00:00:00.000000000 Z
|
13
12
|
dependencies: []
|
14
13
|
description: Provides a way to easily manage spanish provinces in your apps without
|
15
14
|
creating additional tables in your database.
|
@@ -33,29 +32,27 @@ files:
|
|
33
32
|
- test/test_api.rb
|
34
33
|
homepage: https://github.com/agilemonkeys/provincias
|
35
34
|
licenses: []
|
35
|
+
metadata: {}
|
36
36
|
post_install_message:
|
37
37
|
rdoc_options: []
|
38
38
|
require_paths:
|
39
39
|
- lib
|
40
40
|
required_ruby_version: !ruby/object:Gem::Requirement
|
41
|
-
none: false
|
42
41
|
requirements:
|
43
|
-
- -
|
42
|
+
- - '>='
|
44
43
|
- !ruby/object:Gem::Version
|
45
44
|
version: '0'
|
46
45
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
47
|
-
none: false
|
48
46
|
requirements:
|
49
|
-
- -
|
47
|
+
- - '>='
|
50
48
|
- !ruby/object:Gem::Version
|
51
49
|
version: '0'
|
52
50
|
requirements: []
|
53
51
|
rubyforge_project:
|
54
|
-
rubygems_version:
|
52
|
+
rubygems_version: 2.0.6
|
55
53
|
signing_key:
|
56
|
-
specification_version:
|
54
|
+
specification_version: 4
|
57
55
|
summary: Stop storing spanish provinces in a static table in your database. Use this
|
58
56
|
gem and reclaim a few bytes of your storage quota.
|
59
57
|
test_files:
|
60
58
|
- test/test_api.rb
|
61
|
-
has_rdoc:
|