Skip to content

Commit e686eb9

Browse files
author
Azarel Doroteo Pacheco
committed
Se actualizan las gemas y se elimina el archivo de respaldo de inflections.
1 parent 349bf87 commit e686eb9

File tree

6 files changed

+141
-164
lines changed

6 files changed

+141
-164
lines changed

Gemfile

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ gem 'rails', '3.2.2'
66
# gem 'rails', :git => 'git://github.com/rails/rails.git'
77

88
gem 'sqlite3'
9-
gem 'rieles'
9+
gem 'rieles', :git => 'git://github.com/LogicalBricks/rieles.git'
1010

1111
#gem 'json'
1212

Gemfile.lock

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,9 @@
1+
GIT
2+
remote: git://github.com/LogicalBricks/rieles.git
3+
revision: 804c72b13b7a511d16e7f8265fb0afad17915b32
4+
specs:
5+
rieles (0.0.4)
6+
17
GEM
28
remote: http://rubygems.org/
39
specs:
@@ -34,13 +40,13 @@ GEM
3440
hike (1.2.1)
3541
i18n (0.6.0)
3642
journey (1.0.3)
37-
json (1.6.6)
43+
json (1.7.0)
3844
mail (2.4.4)
3945
i18n (>= 0.4.0)
4046
mime-types (~> 1.16)
4147
treetop (~> 1.4.8)
4248
mime-types (1.18)
43-
multi_json (1.3.2)
49+
multi_json (1.3.4)
4450
polyglot (0.3.3)
4551
rack (1.4.1)
4652
rack-cache (1.2)
@@ -67,8 +73,7 @@ GEM
6773
rake (0.9.2.2)
6874
rdoc (3.12)
6975
json (~> 1.4)
70-
rieles (0.0.2)
71-
sprockets (2.1.2)
76+
sprockets (2.1.3)
7277
hike (~> 1.2)
7378
rack (~> 1.0)
7479
tilt (~> 1.1, != 1.3.0)
@@ -85,5 +90,5 @@ PLATFORMS
8590

8691
DEPENDENCIES
8792
rails (= 3.2.2)
88-
rieles
93+
rieles!
8994
sqlite3

config/initializers/inflections.bk.rb

Lines changed: 0 additions & 144 deletions
This file was deleted.

config/initializers/inflections.rb

Lines changed: 127 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,28 +1,144 @@
1+
# encoding: UTF-8
12
# Be sure to restart your server when you modify this file.
23

4+
##############################################################################
5+
# Inflections para trabajar en Español.
6+
# Por omisión, rails obtiene el singular y el plural según las reglas en
7+
# Inglés. La regla más básica consiste en agregar una 's' al final de la
8+
# palabra al obtener su plural, y eliminar la 's' al final para obtener el
9+
# singular. En español, esta regla se cumple la mayoría de las veces, pero no
10+
# siempre, por lo que es necesario especificar algunas más para las
11+
# excepciones.
12+
#
13+
# Las reglas para la formación del plural en Español son muy completas (y
14+
# complejas), en algunas ocasiones dependen de la acentuación. No se pretende
15+
# contemplar todas las posibilidades, sólo las más comunes.
16+
##############################################################################
17+
318
ActiveSupport::Inflector.inflections do |inflect|
4-
inflect.plural(/([rndl])([A-Z]|_|$)/, '\1es\2')
19+
20+
# La regla básica en Español es similar al Inglés, el plural de las palabras
21+
# terminadas en vocal se obtiene agregándole una 's' al final. Sin embargo,
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+
inflect.plural(/([rndlj])([A-Z]|_|$)/, '\1es\2')
528
inflect.plural(/([aeiou])([A-Z]|_|$)/, '\1s\2')
6-
inflect.plural(/([aeiou])([A-Z]|_)([a-z]+)([rndl])([A-Z]|_|$)/,
29+
30+
# Las reglas anteriores funcionan incluso cuando son palabras compuestas por
31+
# dos o más palabras, siempre y cuando, todas sean del mismo tipo, es decir,
32+
# que ambas terminen con r, n, d o l, o bien, que ambas terminen en vocal;
33+
# por ejemplo "doctor_operacion", o "libro_revista", serán pluralizadas
34+
# correctamente a "doctores_operaciones" y "libros_revistas" respectivamente.
35+
# Sin embargo, si las palabras no son del mismo tipo, la pluralización no
36+
# ocurre correctamente. Por ejemplo, "autor_libro" es pluralizado como
37+
# "autor_libros", y "paciente_doctor" es pluralizado como
38+
# "paciente_doctores". Esto sucede porque al pluralizar, rails aplica sólo
39+
# la última regla que coincida y omite las demás.
40+
# Para soportar palabras compuestas, es necesario agregar otras reglas.
41+
inflect.plural(/([aeiou])([A-Z]|_)([a-z]+)([rndlj])([A-Z]|_|$)/,
742
'\1s\2\3\4es\5')
8-
inflect.plural(/([rndl])([A-Z]|_)([a-z]+)([aeiou])([A-Z]|_|$)/,
43+
inflect.plural(/([rndlj])([A-Z]|_)([a-z]+)([aeiou])([A-Z]|_|$)/,
944
'\1es\2\3\4s\5')
10-
inflect.plural(/(z)$/i, 'ces')
45+
# Con estas reglas, ya se pueden traducir correctamente las palabras compuestas
46+
# de dos palabras aunque no sean del mismo tipo.
47+
# Se pueden agregar, de la misma manera, reglas para cuando se trate de tres
48+
# palabras compuestas, pero esto significa tomar en cuenta más combinaciones.
49+
# En la mayoría de los casos, creo que es suficiente con estas dos.
50+
51+
# Para obtener correctamente el plural de palablas como maiz => maices,
52+
# pez => peces, las palabras terminadas en z se cambian la z por c, y
53+
# se agrega "es"
54+
inflect.plural(/z([A-Z]|_|$)$/i, 'ces\1')
55+
56+
#-----------------------------------------------------------------------------
1157

12-
final_plural_rndl = /([aeiou][rndl])es([A-Z]|_|$)/
13-
final_plural_vocal = /((?<![aeiou][nrdl])[aeiou])s([A-Z]|_|$)/
14-
palabra_compuesta_1 = /#{final_plural_rndl}([a-z]+)#{final_plural_vocal}/
15-
palabra_compuesta_2 = /#{final_plural_vocal}([a-z]+)#{final_plural_rndl}/
58+
# Para singularizar, generalmente basta con eliminar la 's' del final, pero
59+
# palabras como doctores y universidades se convertirían erróneamente como
60+
# doctore y universidade.
61+
# Podemos agregar una nueva regla, cuando la palabra termina en "es", eliminar
62+
# esa sílaba, pero esto tampoco es del todo cierto, ya que funciona con
63+
# palabras como "doctores" o "camiones", porque su singular son "doctor" y
64+
# "camion", respectivamente. Sin embargo, hay otras palabras que se
65+
# convertirían erróneamente, como semestres, por ejemplo, que al eliminar la
66+
# sílaba "es" del final, se singularizaría como 'semestr'. Para evitar eso, se
67+
# obliga que la palabra que termina en "es" y venga precedida de r, n, d o l,
68+
# deba también ser precedida por una vocal.
69+
# Para que la epresión no quede tan extensa, vamos a utilizar unas variables
70+
# para almacenar parte de la misma. También nos servirá para no tener que
71+
# repetir la mistra estructura.
1672

17-
inflect.singular(/(ia)$/i, '\1')
18-
inflect.singular(final_plural_rndl, '\1\2')
73+
# Primero, definimos las palabras que terminen en 'es', precedido de r, n, d,
74+
# l o j, precedido de una vocal.
75+
final_plural_rndlj = /([aeiou][rndlj])es([A-Z]|_|$)/
76+
# Después, definimos las palabras que terminen en vocal seguida de una 's'. En
77+
# caso de que esa vocal sea la e, entonces no debe ser precedida de alguna
78+
# combinación de vocal + r, n, d, l o j.
79+
final_plural_vocal = /((?<![aeiou][rndlj])e|a|i|o|u)s([A-Z]|_|$)/
80+
# Lsas palabras compuestas serán las siguientes: la primera palabra es con r,
81+
# n, d, l o j, seguida de una palabra terminada en vocal. La segunda palabra
82+
# compuesta, será al revés.
83+
palabra_compuesta_1 = /#{final_plural_rndlj}([a-z]+)#{final_plural_vocal}/
84+
palabra_compuesta_2 = /#{final_plural_vocal}([a-z]+)#{final_plural_rndlj}/
85+
86+
# las palabras terminadas en ia ya están en singular
87+
inflect.singular(/(ia)([A-Z]|_|$)$/i, '\1')
88+
89+
# Utilizando las variables creadas anteriormente, se generan las nuevas reglas
90+
# para obtener el singular de las palabras sencillas y compuetas que terminen
91+
# tanto en vocal, como en r, n, d, l, o j.
92+
inflect.singular(final_plural_rndlj, '\1\2')
1993
inflect.singular(final_plural_vocal, '\1\2')
2094
inflect.singular(palabra_compuesta_1, '\1\2\3\4\5')
2195
inflect.singular(palabra_compuesta_2, '\1\2\3\4\5')
96+
97+
# Para singularizar palabras con 'ces', como 'maices'
2298
inflect.singular(/ces$/, 'z')
23-
99+
100+
#-----------------------------------------------------------------------------
101+
102+
# Las palabras en singular que terminan con s son un caso especial, ya que
103+
# rails infiere que ya están en plural, lo cual es falso. Por ejemplo, pais.
104+
# Es necesario indicar que el plural de pais es paises y viceversa. Esto se
105+
# puede hacer declarándolo como irregular:
24106
inflect.irregular 'pais', 'paises'
107+
# Pero es necesario agregar otra regla. Pais termina en s, pero ya está en
108+
# singular, por lo que hay que indicarle a rails que no elimine la s final.
25109
inflect.singular /(pais)([A-Z]|_|$)/, '\1\2'
26110

111+
# Ejemplos cuyo plural y singular sea el mismo
27112
inflect.uncountable %w( campus lunes martes miercoles jueves viernes )
113+
114+
#-----------------------------------------------------------------------------
115+
116+
# Otros ejemplos de palabras irregulares
117+
# En ocasiones, quisiéramos aplicar reglas específicas que no cumplen con las
118+
# generales. Por ejemplo, si a estas alturas tratamos de obtener el plural de
119+
# "hermano_de_sangre", el resultado sería "hermanos_des_sangres", así que,
120+
# para estos casos, es necesario agregar reglas para indicar estos
121+
# comportamientos 'irregulares'.
122+
123+
#inflect.irregular 'hermano_de_sangre', 'hermanos_de_sangre'
124+
#inflect.irregular 'HermanoDeSangre', 'HermanosDeSangre'
125+
126+
# NOTA: es necesario indicar los dos modos (underscore y camelcase) porque el
127+
# método irregular no soporta expresiones regulares
128+
129+
# Caso especial en el que la última palabra termina con 's' desde su versión
130+
# en singular (caso similar al de pais, pero en esta ocasión, con palabras
131+
# compuestas)
132+
133+
#inflect.singular 'calificacion_matematicas', 'calificacion_matematicas'
134+
#inflect.singular 'CalificacionMatematicas', 'CalificacionMatematicas'
135+
#inflect.irregular 'calificacion_matematicas', 'calificaciones_matematicas'
136+
#inflect.irregular 'CalificacionMatematicas', 'CalificacionesMatematicas'
137+
138+
# NOTA: por claridad, se indican los dos modos (underscore y camelcase)
139+
# porque el método irregular no soporta expresiones regulares, aunque en el
140+
# caso del singular sí, por lo que se puede escribir también de la siguiente
141+
# manera:
142+
#inflect.singular /([Cc])(alificacion)(_m|M)(atematicas)/, '\1\2\3\4'
143+
28144
end

lib/templates/erb/scaffold/index.html.erb

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -27,5 +27,5 @@
2727
</table>
2828

2929
<br />
30-
<% nuevo = singular_table_name.split('_')[0].ends_with?("a") ? 'Nueva' : 'Nuevo' -%>
31-
<%%= link_to '<%= nuevo %> <%= human_name %>', new_<%= singular_table_name %>_path if can? :create, <%= singular_table_name.camelize %> %>
30+
<% nuevo = singular_table_name.split('_').first =~ /[ad]$/ ? 'Nueva' : 'Nuevo' -%>
31+
<%%= link_to '<%= nuevo %> <%= human_name %>', new_<%= singular_table_name %>_path %>

lib/templates/erb/scaffold/new.html.erb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
<% nuevo = singular_table_name.split('_')[0].ends_with?("a") ? 'Nueva' : 'Nuevo' -%>
1+
<% nuevo = singular_table_name.split('_').first =~ /[ad]$/ ? 'Nueva' : 'Nuevo' -%>
22
<h1><%= nuevo %> <%= human_name %></h1>
33

44
<%%= render 'form' %>

0 commit comments

Comments
 (0)