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