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 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 con códigos numéricos de provincias y ciudades que puedes usar para enlazarlas con tus modelos.
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.find_by_name('Palmas, Las') => #<Provincia: @id=35, @name="Palmas, Las">
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.find_by_name("Puerto del Rosario") => #<Ciudad: @id=35017, @name="Puerto del Rosario" ...>
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).find_ciudad_by_name("Alcobendas") => #<Ciudad: @id=28006, @name="Alcobendas" ...>
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
@@ -1,4 +1,4 @@
1
1
  # -*- encoding: utf-8 -*-
2
2
  module Provincias
3
- VERSION = "0.0.4"
3
+ VERSION = "0.1.0"
4
4
  end
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.4
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: 2012-07-16 00:00:00.000000000 Z
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: 1.8.24
52
+ rubygems_version: 2.0.6
55
53
  signing_key:
56
- specification_version: 3
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: