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