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 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