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 CHANGED
@@ -1,4 +1,4 @@
1
- source 'https://rubygems.org'
1
+ source "http://rubygems.org"
2
2
 
3
3
  # Specify your gem's dependencies in rieles.gemspec
4
4
  gemspec
@@ -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
@@ -1,2 +1 @@
1
- #!/usr/bin/env rake
2
1
  require "bundler/gem_tasks"
@@ -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
- 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
+ #-----------------------------------------------------------------------------
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
- final_plural_vocal = /((?<![aeiou][rndlj])[aeiou])s([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.
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
- inflect.singular(/(ia)$/i, '\1')
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
@@ -1,3 +1,3 @@
1
1
  module Rieles
2
- VERSION = "0.0.3"
2
+ VERSION = "0.0.4"
3
3
  end
@@ -16,5 +16,5 @@ Gem::Specification.new do |gem|
16
16
  gem.require_paths = ["lib"]
17
17
  gem.version = Rieles::VERSION
18
18
 
19
- gem.add_development_dependency 'rspec'
19
+ gem.add_development_dependency 'generator_spec'
20
20
  end
@@ -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 calle)
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 calles)
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'.singularize.should == '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.3
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-04-29 00:00:00.000000000 Z
12
+ date: 2012-05-01 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
- name: rspec
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
- - LICENSE
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