provincias 0.0.4 → 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
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: