rieles 0.0.3 → 0.0.4
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.
- data/Gemfile +1 -1
- data/README.rdoc +40 -0
- data/Rakefile +0 -1
- data/app/views/application/_error_messages.html.erb +17 -0
- data/lib/config/initializer/inflections.rb +120 -4
- data/lib/rieles/version.rb +1 -1
- data/rieles.gemspec +1 -1
- data/spec/inflections_spec.rb +6 -3
- data/spec/lib/generators/rieles/install_generator_spec.rb +25 -0
- metadata +7 -5
- data/LICENSE +0 -22
- data/README.md +0 -29
data/Gemfile
CHANGED
data/README.rdoc
ADDED
@@ -0,0 +1,40 @@
|
|
1
|
+
= Rieles
|
2
|
+
|
3
|
+
Incluye diversos archivos para trabajar en Español. El archivo de inflections para pluralizar y singularizar, el archivo de locale para los mensajes, y los templates erb para que el scaffold genere las vistas en Español.
|
4
|
+
|
5
|
+
== Instalación
|
6
|
+
|
7
|
+
Agrega esta línea al Gemfile de tu aplicación:
|
8
|
+
|
9
|
+
gem 'rieles'
|
10
|
+
|
11
|
+
Después ejecuta:
|
12
|
+
|
13
|
+
$ bundle
|
14
|
+
|
15
|
+
O instálala de la siguiente manera:
|
16
|
+
|
17
|
+
$ gem install rieles
|
18
|
+
|
19
|
+
== Uso
|
20
|
+
|
21
|
+
¡Listo! Con esto ya tienes los inflections y locales en Español. Puedes probar entrando a una consola:
|
22
|
+
|
23
|
+
$ rails console
|
24
|
+
|
25
|
+
y obteniendo el plural o singular de alguna palabra en Español, por ejemplo:
|
26
|
+
|
27
|
+
'riel'.pluralize
|
28
|
+
'rieles'.singularize
|
29
|
+
|
30
|
+
Igualmente, los mensajes de error de active record y las vistas generadas por el scaffold se mostrarán en Español
|
31
|
+
|
32
|
+
== Personalización (recomendada)
|
33
|
+
|
34
|
+
Se recomienda instalar los archivos de inflections, locales y la estructura de las vistas para adaptarlos a tus necesidades
|
35
|
+
|
36
|
+
$ gem generate rieles:install
|
37
|
+
|
38
|
+
Si haces esto, la gema puede quedar en el grupo 'development', lo que significa que no será necesaria en producción. En el Gemfile debe aparecer como:
|
39
|
+
|
40
|
+
gem 'rieles', :group => :development
|
data/Rakefile
CHANGED
@@ -0,0 +1,17 @@
|
|
1
|
+
<% if target.errors.any? %>
|
2
|
+
<% gender ||= target.class.name.ends_with?("a") ? "female" : "male" %>
|
3
|
+
<% model_name ||= target.class.name.underscore.humanize.downcase %>
|
4
|
+
<div id="error_explanation">
|
5
|
+
<h2>
|
6
|
+
<%= t('activerecord.errors.template.header', :count => target.errors.count, :model => model_name, :article => (gender == "male" ? "El" : "La")) %>
|
7
|
+
</h2>
|
8
|
+
<%= t('activerecord.errors.template.body') %>
|
9
|
+
<ul>
|
10
|
+
<% target.errors.full_messages.each do |msg| %>
|
11
|
+
<li>
|
12
|
+
<%= msg %>
|
13
|
+
</li>
|
14
|
+
<% end %>
|
15
|
+
</ul>
|
16
|
+
</div>
|
17
|
+
<% end %>
|
@@ -1,28 +1,144 @@
|
|
1
|
+
# encoding: UTF-8
|
1
2
|
# Be sure to restart your server when you modify this file.
|
2
3
|
|
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
|
+
|
3
18
|
ActiveSupport::Inflector.inflections do |inflect|
|
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.
|
4
27
|
inflect.plural(/([rndlj])([A-Z]|_|$)/, '\1es\2')
|
5
28
|
inflect.plural(/([aeiou])([A-Z]|_|$)/, '\1s\2')
|
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.
|
6
41
|
inflect.plural(/([aeiou])([A-Z]|_)([a-z]+)([rndlj])([A-Z]|_|$)/,
|
7
42
|
'\1s\2\3\4es\5')
|
8
43
|
inflect.plural(/([rndlj])([A-Z]|_)([a-z]+)([aeiou])([A-Z]|_|$)/,
|
9
44
|
'\1es\2\3\4s\5')
|
10
|
-
|
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
|
+
#-----------------------------------------------------------------------------
|
11
57
|
|
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.
|
72
|
+
|
73
|
+
# Primero, definimos las palabras que terminen en 'es', precedido de r, n, d,
|
74
|
+
# l o j, precedido de una vocal.
|
12
75
|
final_plural_rndlj = /([aeiou][rndlj])es([A-Z]|_|$)/
|
13
|
-
|
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.
|
14
83
|
palabra_compuesta_1 = /#{final_plural_rndlj}([a-z]+)#{final_plural_vocal}/
|
15
84
|
palabra_compuesta_2 = /#{final_plural_vocal}([a-z]+)#{final_plural_rndlj}/
|
16
85
|
|
17
|
-
|
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.
|
18
92
|
inflect.singular(final_plural_rndlj, '\1\2')
|
19
93
|
inflect.singular(final_plural_vocal, '\1\2')
|
20
94
|
inflect.singular(palabra_compuesta_1, '\1\2\3\4\5')
|
21
95
|
inflect.singular(palabra_compuesta_2, '\1\2\3\4\5')
|
96
|
+
|
97
|
+
# Para singularizar palabras con 'ces', como 'maices'
|
22
98
|
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:
|
24
106
|
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.
|
25
109
|
inflect.singular /(pais)([A-Z]|_|$)/, '\1\2'
|
26
110
|
|
111
|
+
# Ejemplos cuyo plural y singular sea el mismo
|
27
112
|
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
|
+
|
28
144
|
end
|
data/lib/rieles/version.rb
CHANGED
data/rieles.gemspec
CHANGED
data/spec/inflections_spec.rb
CHANGED
@@ -4,11 +4,11 @@ require 'rieles'
|
|
4
4
|
|
5
5
|
describe 'Inflections' do
|
6
6
|
def singulares
|
7
|
-
%w(riel camion hospital universidad reloj semestre mesa
|
7
|
+
%w(riel camion hospital universidad reloj semestre mesa ave bola materia)
|
8
8
|
end
|
9
9
|
|
10
10
|
def plurales
|
11
|
-
%w(rieles camiones hospitales universidades relojes semestres mesas
|
11
|
+
%w(rieles camiones hospitales universidades relojes semestres mesas aves bolas materias)
|
12
12
|
end
|
13
13
|
|
14
14
|
describe 'Pluralizaciones' do
|
@@ -29,6 +29,7 @@ describe 'Inflections' do
|
|
29
29
|
it 'debe pluralizar casos especiales' do
|
30
30
|
'pais'.pluralize.should == 'paises'
|
31
31
|
'maiz'.pluralize.should == 'maices'
|
32
|
+
'materia'.pluralize.should == 'materias'
|
32
33
|
end
|
33
34
|
|
34
35
|
it 'no debe pluralizar palabras que ya estén en plural' do
|
@@ -36,7 +37,7 @@ describe 'Inflections' do
|
|
36
37
|
'camiones_grandes'.pluralize.should == 'camiones_grandes'
|
37
38
|
'universidades_hospitales_doctores'.pluralize.should == 'universidades_hospitales_doctores'
|
38
39
|
'paises'.pluralize.should == 'paises'
|
39
|
-
'lunes'.
|
40
|
+
'lunes'.pluralize.should == 'lunes'
|
40
41
|
end
|
41
42
|
end
|
42
43
|
|
@@ -62,6 +63,7 @@ describe 'Inflections' do
|
|
62
63
|
it 'debe singularize casos especiales' do
|
63
64
|
'paises'.singularize.should == 'pais'
|
64
65
|
'maices'.singularize.should == 'maiz'
|
66
|
+
'materias'.singularize.should == 'materia'
|
65
67
|
end
|
66
68
|
|
67
69
|
it 'no debe singularizar palabras que ya estén en singular' do
|
@@ -70,6 +72,7 @@ describe 'Inflections' do
|
|
70
72
|
'universidad_hospital_doctor'.singularize.should == 'universidad_hospital_doctor'
|
71
73
|
'pais'.singularize.should == 'pais'
|
72
74
|
'lunes'.singularize.should == 'lunes'
|
75
|
+
'materia'.singularize.should == 'materia'
|
73
76
|
end
|
74
77
|
end
|
75
78
|
end
|
@@ -0,0 +1,25 @@
|
|
1
|
+
# encoding: UTF-8
|
2
|
+
require 'rails/all'
|
3
|
+
require "generator_spec/test_case"
|
4
|
+
require 'generators/rieles/install_generator'
|
5
|
+
|
6
|
+
describe Rieles::InstallGenerator do
|
7
|
+
include GeneratorSpec::TestCase
|
8
|
+
destination File.expand_path("../../tmp", __FILE__)
|
9
|
+
|
10
|
+
before(:all) do
|
11
|
+
prepare_destination
|
12
|
+
run_generator
|
13
|
+
end
|
14
|
+
|
15
|
+
it "crea los archivos de inflections, el locale en español, y los templates del scaffold" do
|
16
|
+
assert_file "config/initializers/inflections.rb", File.read('lib/config/initializer/inflections.rb')
|
17
|
+
assert_file "config/locales/es.yml", File.read('lib/config/locales/es.yml')
|
18
|
+
assert_file "lib/templates/erb/scaffold/new.html.erb", File.read('lib/templates/erb/scaffold/new.html.erb')
|
19
|
+
assert_file "lib/templates/erb/scaffold/show.html.erb", File.read('lib/templates/erb/scaffold/show.html.erb')
|
20
|
+
assert_file "lib/templates/erb/scaffold/edit.html.erb", File.read('lib/templates/erb/scaffold/edit.html.erb')
|
21
|
+
assert_file "lib/templates/erb/scaffold/index.html.erb", File.read('lib/templates/erb/scaffold/index.html.erb')
|
22
|
+
assert_file "lib/templates/erb/scaffold/_form.html.erb", File.read('lib/templates/erb/scaffold/_form.html.erb')
|
23
|
+
assert_file "app/views/application/_error_messages.html.erb", File.read('app/views/application/_error_messages.html.erb')
|
24
|
+
end
|
25
|
+
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
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.4
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,10 +9,10 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2012-
|
12
|
+
date: 2012-05-01 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
|
-
name:
|
15
|
+
name: generator_spec
|
16
16
|
requirement: !ruby/object:Gem::Requirement
|
17
17
|
none: false
|
18
18
|
requirements:
|
@@ -38,9 +38,9 @@ extra_rdoc_files: []
|
|
38
38
|
files:
|
39
39
|
- .gitignore
|
40
40
|
- Gemfile
|
41
|
-
-
|
42
|
-
- README.md
|
41
|
+
- README.rdoc
|
43
42
|
- Rakefile
|
43
|
+
- app/views/application/_error_messages.html.erb
|
44
44
|
- lib/config/initializer/inflections.rb
|
45
45
|
- lib/config/locales/es.yml
|
46
46
|
- lib/generators/rieles/USAGE
|
@@ -54,6 +54,7 @@ files:
|
|
54
54
|
- lib/templates/erb/scaffold/show.html.erb
|
55
55
|
- rieles.gemspec
|
56
56
|
- spec/inflections_spec.rb
|
57
|
+
- spec/lib/generators/rieles/install_generator_spec.rb
|
57
58
|
homepage: ''
|
58
59
|
licenses: []
|
59
60
|
post_install_message:
|
@@ -80,3 +81,4 @@ specification_version: 3
|
|
80
81
|
summary: Instala inflections, locales y templates de scaffold para trabajar en Español.
|
81
82
|
test_files:
|
82
83
|
- spec/inflections_spec.rb
|
84
|
+
- spec/lib/generators/rieles/install_generator_spec.rb
|
data/LICENSE
DELETED
@@ -1,22 +0,0 @@
|
|
1
|
-
Copyright (c) 2012 Azarel Doroteo Pacheco
|
2
|
-
|
3
|
-
MIT License
|
4
|
-
|
5
|
-
Permission is hereby granted, free of charge, to any person obtaining
|
6
|
-
a copy of this software and associated documentation files (the
|
7
|
-
"Software"), to deal in the Software without restriction, including
|
8
|
-
without limitation the rights to use, copy, modify, merge, publish,
|
9
|
-
distribute, sublicense, and/or sell copies of the Software, and to
|
10
|
-
permit persons to whom the Software is furnished to do so, subject to
|
11
|
-
the following conditions:
|
12
|
-
|
13
|
-
The above copyright notice and this permission notice shall be
|
14
|
-
included in all copies or substantial portions of the Software.
|
15
|
-
|
16
|
-
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
17
|
-
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
18
|
-
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
19
|
-
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
20
|
-
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
21
|
-
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
22
|
-
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
data/README.md
DELETED
@@ -1,29 +0,0 @@
|
|
1
|
-
# Rieles
|
2
|
-
|
3
|
-
TODO: Write a gem description
|
4
|
-
|
5
|
-
## Installation
|
6
|
-
|
7
|
-
Add this line to your application's Gemfile:
|
8
|
-
|
9
|
-
gem 'rieles'
|
10
|
-
|
11
|
-
And then execute:
|
12
|
-
|
13
|
-
$ bundle
|
14
|
-
|
15
|
-
Or install it yourself as:
|
16
|
-
|
17
|
-
$ gem install rieles
|
18
|
-
|
19
|
-
## Usage
|
20
|
-
|
21
|
-
TODO: Write usage instructions here
|
22
|
-
|
23
|
-
## Contributing
|
24
|
-
|
25
|
-
1. Fork it
|
26
|
-
2. Create your feature branch (`git checkout -b my-new-feature`)
|
27
|
-
3. Commit your changes (`git commit -am 'Added some feature'`)
|
28
|
-
4. Push to the branch (`git push origin my-new-feature`)
|
29
|
-
5. Create new Pull Request
|