rieles 0.0.6 → 0.0.7
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 +4 -4
- data/.travis.yml +5 -0
- data/README.rdoc +2 -0
- data/lib/config/initializer/inflections.rb +49 -71
- data/lib/rieles.rb +3 -2
- data/lib/rieles/version.rb +1 -1
- data/lib/templates/erb/scaffold/index.html.erb +22 -22
- data/rieles.gemspec +2 -0
- data/spec/inflections_spec.rb +10 -10
- metadata +18 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 5d3bd4f1fc0de68403ccdb8ea36687580e7021df
|
4
|
+
data.tar.gz: d1b9112586f6cd1e8d2ae1ce0f5b4c3a8c3a8855
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 0798ce53a2a000fad0a0c46006b4742b125170db3418dfd104dfb38c6a45c9896e5b5bd77f9e1646eba0c2c4854f8626ed8318a89ef4df8e6753252f180e18b0
|
7
|
+
data.tar.gz: 84bcbeec0174b38552d73cad7d106a3056dcd97e3ca2c420f21b932d2da027fbf26499b3e33e5345b9f47aa18aabe1b46c2101756dc0dee657105e2675df0499
|
data/.travis.yml
ADDED
data/README.rdoc
CHANGED
@@ -1,3 +1,5 @@
|
|
1
|
+
{<img src="https://travis-ci.org/LogicalBricks/rieles.png" />}[https://travis-ci.org/LogicalBricks/rieles]
|
2
|
+
|
1
3
|
= Rieles
|
2
4
|
|
3
5
|
Incluye diversos archivos para trabajar en Español. Dentro de los recursos que se agregan está el archivo de inflections para pluralizar y singularizar en Español, el archivo de locale para traducir los mensajes, y los templates erb y haml para que el scaffold genere las vistas completamente en Español.
|
@@ -20,83 +20,57 @@ ActiveSupport::Inflector.inflections do |inflect|
|
|
20
20
|
# La regla básica en Español es similar al Inglés, el plural de las palabras
|
21
21
|
# terminadas en vocal se obtiene agregándole una 's' al final. Sin embargo,
|
22
22
|
# para formar correctamente el plural de palabras como doctor, camion,
|
23
|
-
# universidad o pastel, se aplica una regla distinta: las palabras que
|
24
|
-
# terminen con r, n, d, l se convierten a plural agregando la sílaba "es",
|
25
|
-
# de otra forma, el plural se obtendrían como doctors, camions, universidads
|
26
|
-
# y pastels.
|
27
|
-
# Para
|
28
|
-
# para almacenar parte de la misma. También nos servirá para no tener que
|
29
|
-
# repetir la mistra estructura.
|
30
|
-
|
31
|
-
final_singular_rndlj = /([rndlj])([A-Z]|_|$)/
|
32
|
-
final_singular_vocal = /([aeiou])([A-Z]|_|$)/
|
33
|
-
|
34
|
-
inflect.plural(/#{final_singular_rndlj}/, '\1es\2')
|
35
|
-
inflect.plural(/#{final_singular_vocal}/, '\1s\2')
|
36
|
-
|
37
|
-
# Las reglas anteriores funcionan incluso cuando son palabras compuestas por
|
38
|
-
# dos o más palabras, siempre y cuando, todas sean del mismo tipo, es decir,
|
39
|
-
# que ambas terminen con r, n, d o l, o bien, que ambas terminen en vocal;
|
40
|
-
# por ejemplo "doctor_operacion", o "libro_revista", serán pluralizadas
|
41
|
-
# correctamente a "doctores_operaciones" y "libros_revistas" respectivamente.
|
42
|
-
# Sin embargo, si las palabras no son del mismo tipo, la pluralización no
|
43
|
-
# ocurre correctamente. Por ejemplo, "autor_libro" es pluralizado como
|
44
|
-
# "autor_libros", y "paciente_doctor" es pluralizado como
|
45
|
-
# "paciente_doctores". Esto sucede porque al pluralizar, rails aplica sólo
|
46
|
-
# la última regla que coincida y omite las demás.
|
47
|
-
# Para soportar palabras compuestas, es necesario agregar otras reglas.
|
48
|
-
compuesta_singular_1 = /#{final_singular_vocal}([a-z]+)#{final_singular_rndlj}/
|
49
|
-
compuesta_singular_2 = /#{final_singular_rndlj}([a-z]+)#{final_singular_vocal}/
|
50
|
-
inflect.plural(compuesta_singular_1, '\1s\2\3\4es\5')
|
51
|
-
inflect.plural(compuesta_singular_2, '\1es\2\3\4s\5')
|
52
|
-
# Con estas reglas, ya se pueden traducir correctamente las palabras compuestas
|
53
|
-
# de dos palabras aunque no sean del mismo tipo.
|
54
|
-
# Se pueden agregar, de la misma manera, reglas para cuando se trate de tres
|
55
|
-
# palabras compuestas, pero esto significa tomar en cuenta más combinaciones.
|
56
|
-
# En la mayoría de los casos, creo que es suficiente con estas dos.
|
57
|
-
|
58
|
-
# Para obtener correctamente el plural de palablas como maiz => maices,
|
23
|
+
# universidad ley o pastel, se aplica una regla distinta: las palabras que
|
24
|
+
# terminen con r, y, n, d, l se convierten a plural agregando la sílaba "es",
|
25
|
+
# de otra forma, el plural se obtendrían como doctors, camions, universidads,
|
26
|
+
# leys y pastels.
|
27
|
+
# Para obtener correctamente el plural de palabras como maiz => maices,
|
59
28
|
# pez => peces, las palabras terminadas en z se cambian la z por c, y
|
60
|
-
# se agrega "es"
|
61
|
-
|
29
|
+
# se agrega "es".
|
30
|
+
# Por facilidad, haremos uso de la posibilidad que nos brinda `gsub` de pasar
|
31
|
+
# un hash para realizar los remplazos.
|
32
|
+
|
33
|
+
remplazos = {
|
34
|
+
'a' => 'as',
|
35
|
+
'e' => 'es',
|
36
|
+
'i' => 'is',
|
37
|
+
'o' => 'os',
|
38
|
+
'u' => 'us',
|
39
|
+
'd' => 'des',
|
40
|
+
'j' => 'jes',
|
41
|
+
'l' => 'les',
|
42
|
+
'n' => 'nes',
|
43
|
+
'r' => 'res',
|
44
|
+
'y' => 'yes',
|
45
|
+
'z' => 'ces',
|
46
|
+
}
|
47
|
+
|
48
|
+
inflect.plural(/(z|[aeiou]|[rndljy])(?=[A-Z]|_|$)/, remplazos)
|
62
49
|
|
63
50
|
#-----------------------------------------------------------------------------
|
64
51
|
|
65
52
|
# Para singularizar, generalmente basta con eliminar la 's' del final, pero
|
66
53
|
# palabras como doctores y universidades se convertirían erróneamente como
|
67
54
|
# doctore y universidade.
|
68
|
-
# Podemos agregar una nueva regla, cuando la palabra termina en "es",
|
69
|
-
# esa sílaba, pero esto tampoco es del todo cierto, ya que funciona
|
70
|
-
# palabras como "doctores" o "camiones", porque su singular son "doctor"
|
71
|
-
# "camion", respectivamente. Sin embargo, hay otras palabras que se
|
72
|
-
# convertirían erróneamente, como semestres, por ejemplo, que al eliminar
|
73
|
-
# sílaba "es" del final, se singularizaría como 'semestr'. Para evitar
|
74
|
-
# obliga que la palabra que termina en "es" y venga precedida de r,
|
75
|
-
# deba también ser precedida por una vocal.
|
76
|
-
|
77
|
-
#
|
78
|
-
#
|
79
|
-
|
80
|
-
#
|
81
|
-
#
|
82
|
-
#
|
83
|
-
|
84
|
-
#
|
85
|
-
|
86
|
-
|
87
|
-
compuesta_plural_1 = /#{final_plural_rndlj}([a-z]+)#{final_plural_vocal}/
|
88
|
-
compuesta_plural_2 = /#{final_plural_vocal}([a-z]+)#{final_plural_rndlj}/
|
89
|
-
|
90
|
-
# las palabras terminadas en ia ya están en singular
|
91
|
-
inflect.singular(/(ia)([A-Z]|_|$)$/i, '\1')
|
92
|
-
|
93
|
-
# Utilizando las variables creadas anteriormente, se generan las nuevas reglas
|
94
|
-
# para obtener el singular de las palabras sencillas y compuetas que terminen
|
95
|
-
# tanto en vocal, como en r, n, d, l, o j.
|
96
|
-
inflect.singular(final_plural_rndlj, '\1\2')
|
97
|
-
inflect.singular(final_plural_vocal, '\1\2')
|
98
|
-
inflect.singular(compuesta_plural_1, '\1\2\3\4\5')
|
99
|
-
inflect.singular(compuesta_plural_2, '\1\2\3\4\5')
|
55
|
+
# Podemos agregar una nueva regla, cuando la palabra termina en "es",
|
56
|
+
# eliminar esa sílaba, pero esto tampoco es del todo cierto, ya que funciona
|
57
|
+
# con palabras como "doctores" o "camiones", porque su singular son "doctor"
|
58
|
+
# y "camion", respectivamente. Sin embargo, hay otras palabras que se
|
59
|
+
# convertirían erróneamente, como semestres, por ejemplo, que al eliminar
|
60
|
+
# la sílaba "es" del final, se singularizaría como 'semestr'. Para evitar
|
61
|
+
# eso, se obliga que la palabra que termina en "es" y venga precedida de r,
|
62
|
+
# y, n, d o l, deba también ser precedida por una vocal.
|
63
|
+
# Primero, definimos las palabras que terminen en 'es', precedido de r, y, n,
|
64
|
+
# d, l o j, precedido de una vocal.
|
65
|
+
# Después, definimos las palabras que terminen en vocal seguida de una 's'. En
|
66
|
+
# caso de que esa vocal sea la e, entonces debe ser precedida de alguna
|
67
|
+
# combinación de las letras b, c, d, f, g, p, t seguida de las letras l o r.
|
68
|
+
# Nota: Por una regla que aplica en Inglés, las palabras terminadas en 'ia'
|
69
|
+
# son plurales de palabras terminadas en 'um', ejemplo 'medium' => 'media'.
|
70
|
+
# Como es Español esa regla no aplica, es necesario especificar que las
|
71
|
+
# palabras terminadas en ia ya están en singular.
|
72
|
+
|
73
|
+
inflect.singular(/((?<singular>ia)|(?<singular>[aeiou][rldyjn])es|(?<singular>[bcdfgpt][lr]e|[aeiou])s)(?=[A-Z]|_|$)/, '\\k<singular>')
|
100
74
|
|
101
75
|
# Para singularizar palabras con 'ces', como 'maices'
|
102
76
|
inflect.singular(/ces$/, 'z')
|
@@ -110,7 +84,11 @@ ActiveSupport::Inflector.inflections do |inflect|
|
|
110
84
|
inflect.irregular 'pais', 'paises'
|
111
85
|
# Pero es necesario agregar otra regla. Pais termina en s, pero ya está en
|
112
86
|
# singular, por lo que hay que indicarle a rails que no elimine la s final.
|
113
|
-
inflect.singular /(pais)([A-Z]|_|$)/, '\1
|
87
|
+
inflect.singular /(pais)(?=[A-Z]|_|$)/, '\1'
|
88
|
+
|
89
|
+
# el mismo caso aplica para 'mes'
|
90
|
+
inflect.irregular 'mes', 'meses'
|
91
|
+
inflect.singular /(mes)(?=[A-Z]|_|$)/, '\1'
|
114
92
|
|
115
93
|
# Ejemplos cuyo plural y singular sea el mismo
|
116
94
|
inflect.uncountable %w( campus lunes martes miercoles jueves viernes )
|
data/lib/rieles.rb
CHANGED
@@ -1,16 +1,17 @@
|
|
1
1
|
require 'rieles/version'
|
2
|
+
require 'rails'
|
2
3
|
require 'config/initializer/inflections.rb'
|
3
4
|
|
4
5
|
module Rieles
|
5
6
|
I18n.load_path += Dir.glob( File.dirname(__FILE__) + "/config/locales/*.{rb,yml}" )
|
6
7
|
|
7
|
-
class Railtie < Rails::Railtie
|
8
|
+
class Railtie < ::Rails::Railtie
|
8
9
|
config.app_generators do |g|
|
9
10
|
g.templates.unshift File::expand_path('../templates', __FILE__)
|
10
11
|
end
|
11
12
|
end
|
12
13
|
|
13
|
-
class Engine < Rails::Engine
|
14
|
+
class Engine < ::Rails::Engine
|
14
15
|
end
|
15
16
|
end
|
16
17
|
|
data/lib/rieles/version.rb
CHANGED
@@ -1,39 +1,39 @@
|
|
1
1
|
<h1>Listado de <%= plural_table_name.humanize %></h1>
|
2
2
|
|
3
3
|
<%% if @<%= plural_table_name %>.any? %>
|
4
|
-
<table>
|
5
|
-
|
6
|
-
|
4
|
+
<table>
|
5
|
+
<thead>
|
6
|
+
<tr>
|
7
7
|
<%- attributes.reject(&:password_digest?).each do |attribute| -%>
|
8
|
-
|
8
|
+
<th><%= attribute.human_name %></th>
|
9
9
|
<%- end -%>
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
10
|
+
<th></th>
|
11
|
+
<th></th>
|
12
|
+
<th></th>
|
13
|
+
</tr>
|
14
|
+
</thead>
|
15
15
|
|
16
|
-
|
16
|
+
<tbody>
|
17
17
|
<%% @<%= plural_table_name %>.each do |<%= singular_table_name %>| %>
|
18
|
-
|
18
|
+
<tr>
|
19
19
|
<%- attributes.reject(&:password_digest?).each do |attribute| -%>
|
20
20
|
<%- if attribute.type == :integer or attribute.type == :decimal -%>
|
21
|
-
|
21
|
+
<td><%%= number_with_delimiter <%= singular_table_name %>.<%= attribute.name %> %></td>
|
22
22
|
<%- else -%>
|
23
|
-
|
23
|
+
<td><%%= <%= singular_table_name %>.<%= attribute.name %> %></td>
|
24
24
|
<%- end -%>
|
25
25
|
<%- end -%>
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
26
|
+
<td><%%= link_to 'Mostrar', <%= singular_table_name %> %></td>
|
27
|
+
<td><%%= link_to 'Editar', edit_<%= singular_table_name %>_path(<%= singular_table_name %>) %></td>
|
28
|
+
<td><%%= link_to 'Eliminar', <%= singular_table_name %>, method: :delete, data: { confirm: '¿Estás seguro?' } %></td>
|
29
|
+
</tr>
|
30
30
|
<%% end %>
|
31
|
-
|
32
|
-
</table>
|
31
|
+
</tbody>
|
32
|
+
</table>
|
33
33
|
<%% else %>
|
34
|
-
<div>
|
35
|
-
|
36
|
-
</div>
|
34
|
+
<div>
|
35
|
+
<h3>No se encontraron <%= plural_table_name.humanize %></h3>
|
36
|
+
</div>
|
37
37
|
<%% end %>
|
38
38
|
|
39
39
|
<br />
|
data/rieles.gemspec
CHANGED
data/spec/inflections_spec.rb
CHANGED
@@ -1,21 +1,20 @@
|
|
1
1
|
# encoding: UTF-8
|
2
|
-
require 'rails'
|
3
2
|
require 'rieles'
|
4
3
|
|
5
4
|
describe 'Inflections' do
|
6
5
|
def singulares
|
7
|
-
%w
|
6
|
+
%w[riel camion hospital universidad reloj ley semestre mesa ave bola materia]
|
8
7
|
end
|
9
8
|
|
10
9
|
def plurales
|
11
|
-
%w
|
10
|
+
%w[rieles camiones hospitales universidades relojes leyes semestres mesas aves bolas materias]
|
12
11
|
end
|
13
12
|
|
14
13
|
#########################################################
|
15
14
|
# Sección que prueba las conversiones al plural
|
16
15
|
#########################################################
|
17
16
|
|
18
|
-
|
17
|
+
context 'Pluralizaciones' do
|
19
18
|
it 'debe pluralizar palabras sencillas' do
|
20
19
|
singulares.each_with_index do |s, i|
|
21
20
|
s.pluralize.should == plurales[i]
|
@@ -23,8 +22,8 @@ describe 'Inflections' do
|
|
23
22
|
end
|
24
23
|
|
25
24
|
it 'debe pluralizar palabras compuestas' do
|
26
|
-
singulares_compuestas = singulares.permutation(
|
27
|
-
plurales_compuestas = plurales.permutation(
|
25
|
+
singulares_compuestas = singulares.permutation(4).to_a.collect{ |e| e.join('_') }
|
26
|
+
plurales_compuestas = plurales.permutation(4).to_a.collect{ |e| e.join('_') }
|
28
27
|
singulares_compuestas.each_with_index do |s, i|
|
29
28
|
s.pluralize.should == plurales_compuestas[i]
|
30
29
|
end
|
@@ -41,6 +40,7 @@ describe 'Inflections' do
|
|
41
40
|
'camiones_grandes'.pluralize.should == 'camiones_grandes'
|
42
41
|
'universidades_hospitales_doctores'.pluralize.should == 'universidades_hospitales_doctores'
|
43
42
|
'paises'.pluralize.should == 'paises'
|
43
|
+
'meses'.pluralize.should == 'meses'
|
44
44
|
'lunes'.pluralize.should == 'lunes'
|
45
45
|
end
|
46
46
|
end
|
@@ -49,16 +49,16 @@ describe 'Inflections' do
|
|
49
49
|
# Sección que prueba las conversiones al singular
|
50
50
|
#########################################################
|
51
51
|
|
52
|
-
|
52
|
+
context 'Singularizaciones' do
|
53
53
|
it 'debe singularizar palabras sencillas' do
|
54
54
|
plurales.each_with_index do |p, i|
|
55
55
|
p.singularize.should == singulares[i]
|
56
56
|
end
|
57
57
|
end
|
58
58
|
|
59
|
-
it 'debe
|
60
|
-
singulares_compuestas = singulares.permutation(
|
61
|
-
plurales_compuestas = plurales.permutation(
|
59
|
+
it 'debe singularizar palabras compuestas' do
|
60
|
+
singulares_compuestas = singulares.permutation(4).to_a.collect{ |e| e.join('_') }
|
61
|
+
plurales_compuestas = plurales.permutation(4).to_a.collect{ |e| e.join('_') }
|
62
62
|
plurales_compuestas.each_with_index do |p, i|
|
63
63
|
p.singularize.should == singulares_compuestas[i]
|
64
64
|
end
|
metadata
CHANGED
@@ -1,15 +1,29 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rieles
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.7
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Azarel Doroteo Pacheco
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2013-
|
11
|
+
date: 2013-07-23 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: rails
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - ~>
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '3.0'
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - ~>
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '3.0'
|
13
27
|
- !ruby/object:Gem::Dependency
|
14
28
|
name: generator_spec
|
15
29
|
requirement: !ruby/object:Gem::Requirement
|
@@ -48,6 +62,7 @@ extensions: []
|
|
48
62
|
extra_rdoc_files: []
|
49
63
|
files:
|
50
64
|
- .gitignore
|
65
|
+
- .travis.yml
|
51
66
|
- Gemfile
|
52
67
|
- README.rdoc
|
53
68
|
- Rakefile
|
@@ -91,7 +106,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
91
106
|
version: '0'
|
92
107
|
requirements: []
|
93
108
|
rubyforge_project:
|
94
|
-
rubygems_version: 2.0.
|
109
|
+
rubygems_version: 2.0.3
|
95
110
|
signing_key:
|
96
111
|
specification_version: 4
|
97
112
|
summary: Instala inflections, locales y templates de scaffold para trabajar en Español.
|