zero_generators 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (50) hide show
  1. data/README +38 -0
  2. data/generators/default_values.rb +21 -0
  3. data/generators/factory_scaffold/USAGE +15 -0
  4. data/generators/factory_scaffold/factory_scaffold_generator.rb +27 -0
  5. data/generators/factory_scaffold/templates/controller_spec.rb.erb +135 -0
  6. data/generators/factory_scaffold/templates/helper_spec.rb.erb +5 -0
  7. data/generators/factory_scaffold/templates/model_spec.rb.erb +8 -0
  8. data/generators/ferret_scaffold/USAGE +12 -0
  9. data/generators/ferret_scaffold/ferret_scaffold_generator.rb +92 -0
  10. data/generators/ferret_scaffold/templates/controller.rb.erb +128 -0
  11. data/generators/ferret_scaffold/templates/controller_spec.rb.erb +155 -0
  12. data/generators/ferret_scaffold/templates/helper.rb.erb +2 -0
  13. data/generators/ferret_scaffold/templates/helper_spec.rb.erb +7 -0
  14. data/generators/ferret_scaffold/templates/migration.rb.erb +20 -0
  15. data/generators/ferret_scaffold/templates/model.rb.erb +8 -0
  16. data/generators/ferret_scaffold/templates/model_spec.rb.erb +28 -0
  17. data/generators/ferret_scaffold/templates/views/_dados_busca.html.erb +11 -0
  18. data/generators/ferret_scaffold/templates/views/_dados_model.html.erb +8 -0
  19. data/generators/ferret_scaffold/templates/views/edit.html.erb +13 -0
  20. data/generators/ferret_scaffold/templates/views/index.html.erb +11 -0
  21. data/generators/ferret_scaffold/templates/views/layout.html.erb +18 -0
  22. data/generators/ferret_scaffold/templates/views/new.html.erb +12 -0
  23. data/generators/ferret_scaffold/templates/views/show.html.erb +16 -0
  24. data/generators/layout/USAGE +10 -0
  25. data/generators/layout/layout_generator.rb +22 -0
  26. data/generators/layout/templates/README +7 -0
  27. data/generators/layout/templates/layout.html.erb +26 -0
  28. data/generators/layout/templates/pt_BR.yml +109 -0
  29. data/generators/layout/templates/stylesheet.css +60 -0
  30. data/generators/tdd_controller/USAGE +9 -0
  31. data/generators/tdd_controller/tdd_controller_generator.rb +15 -0
  32. data/generators/tdd_controller/templates/controller_spec.rb.erb +29 -0
  33. data/generators/tdd_model/USAGE +10 -0
  34. data/generators/tdd_model/tdd_model_generator.rb +17 -0
  35. data/generators/tdd_model/templates/model_spec.rb.erb +24 -0
  36. data/generators/tdd_scaffold/USAGE +11 -0
  37. data/generators/tdd_scaffold/tdd_scaffold_generator.rb +32 -0
  38. data/generators/tdd_scaffold/templates/controller_spec.rb.erb +125 -0
  39. data/generators/tdd_scaffold/templates/helper_spec.rb.erb +7 -0
  40. data/generators/tdd_scaffold/templates/model_spec.rb.erb +28 -0
  41. data/generators/tdd_scaffold_stub/USAGE +17 -0
  42. data/generators/tdd_scaffold_stub/tdd_scaffold_stub_generator.rb +40 -0
  43. data/generators/tdd_scaffold_stub/templates/controller_spec.rb.erb +157 -0
  44. data/generators/tdd_scaffold_stub/templates/edit.html.erb_spec.rb.erb +14 -0
  45. data/generators/tdd_scaffold_stub/templates/helper_spec.rb.erb +7 -0
  46. data/generators/tdd_scaffold_stub/templates/index.html.erb_spec.rb.erb +14 -0
  47. data/generators/tdd_scaffold_stub/templates/model_spec.rb.erb +24 -0
  48. data/generators/tdd_scaffold_stub/templates/new.html.erb_spec.rb.erb +12 -0
  49. data/generators/tdd_scaffold_stub/templates/show.html.erb_spec.rb.erb +14 -0
  50. metadata +112 -0
@@ -0,0 +1,155 @@
1
+ require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
2
+
3
+ describe <%= class_plural %>Controller do
4
+ fixtures :<%= file_plural %>
5
+ integrate_views
6
+
7
+ before(:each) do
8
+ @<%= file_name %> = <%= class_name %>.first
9
+ end
10
+
11
+ describe 'respondendo por GET' do
12
+ it 'deve expor todos os registros na ação index, ou um XML no REST' do
13
+ get :index
14
+ response.should be_success
15
+
16
+ get :index, :format => 'xml'
17
+ response.body.should match(/xml version/i)
18
+ end
19
+
20
+ it 'deve buscar os dados no REST com ferret' do
21
+ <%= class_name %>.should_receive(:find_with_ferret).with(@<%= file_name %>.<%= attributes[0].name %>).and_return([@<%= file_name %>])
22
+ get :index, :format => 'xml', :busca => @<%= file_name %>.<%= attributes[0].name %>
23
+ response.body.should match(/xml version/i)
24
+ response.body.should match(/#{@<%= file_name %>.<%= attributes[0].name %>}/)
25
+ end
26
+
27
+ it 'deve expor o registro na tela edit' do
28
+ get :edit, :id => @<%= file_name %>.id
29
+ response.should be_success
30
+ end
31
+
32
+ it 'deve expor o registro na tela show, ou um XML no REST' do
33
+ get :show, :id => @<%= file_name %>.id
34
+ response.should be_success
35
+
36
+ get :show, :id => @<%= file_name %>.id, :format => 'xml'
37
+ response.body.should match(/xml version/i)
38
+ end
39
+
40
+ it 'deve expor o registro na tela new' do
41
+ get :new
42
+ response.should be_success
43
+ end
44
+ end
45
+
46
+ describe 'quando estiver fazendo uma busca' do
47
+ it 'deve exibir o <%= file_name %> que for encontrado' do
48
+ <%= class_name %>.should_receive(:find_with_ferret).with(@<%= file_name %>.<%= attributes[0].name %>).and_return([@<%= file_name %>])
49
+ post :buscar, :busca => @<%= file_name %>.<%= attributes[0].name %>
50
+ response.should have_text(/#{@<%= file_name %>.<%= attributes[0].name %>}/)
51
+ end
52
+ end
53
+
54
+ describe 'respondendo ao POST ou ao PUT' do
55
+ before do
56
+ <%= class_name %>.stub!(:find).and_return(@<%= file_name %>)
57
+ <%= class_name %>.stub!(:new).and_return(@<%= file_name %>)
58
+ @params = { :<%= file_name %> => @<%= file_name %>.attributes }
59
+ end
60
+
61
+ describe 'quando tiver atributos válidos' do
62
+ it 'deve criar um novo registro e redirecionar para ele após chamar o create' do
63
+ @<%= file_name %>.should_receive(:save).and_return(true)
64
+ post :create, @params
65
+ response.should redirect_to(<%= file_name %>_url(@<%= file_name %>))
66
+ end
67
+
68
+ it 'deve criar um novo registro após chamar o create com REST' do
69
+ @<%= file_name %>.should_receive(:save).and_return(true)
70
+ post :create, @params.merge(:format => 'xml')
71
+ response.response_code.should == 201
72
+ response.body.should match(/xml version/i)
73
+ response.location.should == <%= file_name %>_url(@<%= file_name %>)
74
+ end
75
+
76
+ it 'deve atualizar um registro e redirecionar para ele após chamar o update' do
77
+ @<%= file_name %>.should_receive(:update_attributes).and_return(true)
78
+ put :update, @params
79
+ response.should redirect_to(<%= file_name %>_url(@<%= file_name %>))
80
+ end
81
+
82
+ it 'deve atualizar um registro após chamar o update com REST' do
83
+ @<%= file_name %>.should_receive(:update_attributes).and_return(true)
84
+ put :update, @params.merge(:format => 'xml')
85
+ response.should be_success
86
+ end
87
+ end
88
+
89
+ describe 'quando tiver atributos inválidos' do
90
+ before(:each) do
91
+ @<%= file_name %>.errors.add(:atributo, 'possui um erro')
92
+ end
93
+
94
+ it 'deve renderizar novamente a ação new, após chamar o create' do
95
+ @<%= file_name %>.should_receive(:save).and_return(false)
96
+ post :create, @params
97
+ response.should be_success
98
+ response.should render_template('new')
99
+ response.body.should match(/atributo possui um erro/i)
100
+ end
101
+
102
+ it 'deve renderizar um XML de erros após chamar o create com REST' do
103
+ @<%= file_name %>.should_receive(:save).and_return(false)
104
+ post :create, @params.merge(:format => 'xml')
105
+ response.response_code.should == 422
106
+ ActiveResource::Formats::XmlFormat.decode(response.body).should == { 'error' => 'Atributo possui um erro' }
107
+ end
108
+
109
+ it 'deve renderizar novamente a ação edit após chamar o update' do
110
+ @<%= file_name %>.should_receive(:update_attributes).and_return(false)
111
+ put :update, @params
112
+ response.should be_success
113
+ response.should render_template('edit')
114
+ end
115
+
116
+ it 'deve renderizar um XML de erros após chamar o update com REST' do
117
+ @<%= file_name %>.should_receive(:update_attributes).and_return(false)
118
+ put :update, @params.merge(:format => 'xml')
119
+ response.response_code.should == 422
120
+ ActiveResource::Formats::XmlFormat.decode(response.body).should == { 'error' => 'Atributo possui um erro' }
121
+ end
122
+ end
123
+ end
124
+
125
+ describe 'respondendo ao DELETE' do
126
+ it 'deve deletar um registro após chamar o destroy e redirecionar para a listagem de <%= file_plural %>' do
127
+ antes = <%= class_name %>.all.size
128
+ delete :destroy, :id => @<%= file_name %>.id
129
+ response.should redirect_to(<%= file_plural %>_url)
130
+ <%= class_name %>.all.size.should == antes - 1
131
+ end
132
+
133
+ it 'deve dar um erro ao tentar deletar um registro com dependências' do
134
+ <%= class_name %>.stub!(:find).and_return(@<%= file_name %>)
135
+ @<%= file_name %>.stub!(:destroy).and_return(false)
136
+ delete :destroy, :id => @<%= file_name %>.id
137
+ response.should redirect_to(<%= file_plural %>_url)
138
+ end
139
+
140
+ it 'deve deletar um registro após chamar o destroy com REST' do
141
+ antes = <%= class_name %>.all.size
142
+ delete :destroy, :id => @<%= file_name %>.id, :format => 'xml'
143
+ response.should be_success
144
+ <%= class_name %>.all.size.should == antes - 1
145
+ end
146
+
147
+ it 'deve dar um erro ao tentar deletar um registro com dependências (no REST)' do
148
+ <%= class_name %>.stub!(:find).and_return(@<%= file_name %>)
149
+ @<%= file_name %>.stub!(:destroy).and_return(false)
150
+ delete :destroy, :id => @<%= file_name %>.id, :format => 'xml'
151
+ response.response_code.should == 422
152
+ end
153
+
154
+ end
155
+ end
@@ -0,0 +1,2 @@
1
+ module <%= class_plural %>Helper
2
+ end
@@ -0,0 +1,7 @@
1
+ require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
2
+
3
+ describe <%= class_plural %>Helper do
4
+ include <%= class_plural %>Helper
5
+
6
+ #Insira seus testes aqui
7
+ end
@@ -0,0 +1,20 @@
1
+ class <%= migration_name %> < ActiveRecord::Migration
2
+ def self.up
3
+ create_table :<%= file_plural %> do |t|
4
+ <% for attribute in attributes -%>
5
+ t.<%= attribute.type %> :<%= attribute.name %>
6
+ <% end -%>
7
+
8
+ <% unless options[:skip_lock] -%>
9
+ t.integer :lock_version, :default => 0
10
+ <% end -%>
11
+ <% unless options[:skip_timestamps] -%>
12
+ t.timestamps
13
+ <% end -%>
14
+ end
15
+ end
16
+
17
+ def self.down
18
+ drop_table :<%= table_name %>
19
+ end
20
+ end
@@ -0,0 +1,8 @@
1
+ class <%= class_name %> < ActiveRecord::Base
2
+ acts_as_ferret
3
+ <% attributes.each do |atributo| -%>
4
+ <% if(atributo.type == :references) -%>
5
+ belongs_to :<%= atributo.name %>
6
+ <% end -%>
7
+ <% end -%>
8
+ end
@@ -0,0 +1,28 @@
1
+ require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
2
+
3
+ describe <%= class_name %> do
4
+ before(:each) do
5
+ @validos = {
6
+ <% attributes.each do |atributo|
7
+ if(atributo.type == :references) -%>
8
+ :<%= atributo.name %>_id => 1,
9
+ <% else -%>
10
+ :<%= atributo.name %> => <%= atributo.default_value %>,
11
+ <% end -%>
12
+ <% end -%>
13
+ }
14
+ end
15
+
16
+ it "deve ser criado se forem passados atributos válidos" do
17
+ <%= class_name %>.create!(@validos)
18
+ end
19
+
20
+ it 'deve validar a presença de determinados atributos' do
21
+ @<%= class_name.underscore %> = <%= class_name %>.create
22
+
23
+ #Coloque os atributos que devem ser checados no array a seguir
24
+ [].each do |atributo|
25
+ @<%= class_name.underscore %>.should have(1).error_on(atributo)
26
+ end
27
+ end
28
+ end
@@ -0,0 +1,11 @@
1
+ <table border='0'>
2
+
3
+ <%% @<%= file_plural %>.each do |<%= file_name %>| %>
4
+ <tr>
5
+ <th><%%= link_to h(<%= file_name %>.<%= attributes[0].name %>), <%= file_name %> %></th>
6
+ <td><%%= link_to 'Editar', edit_<%= file_name %>_path(<%= file_name %>) %></td>
7
+ <td><%%= link_to 'Deletar', <%= file_name %>, :confirm => 'Você está prestes a deletar este <%= file_name %>. Tem certeza?', :method => :delete %></td>
8
+ </tr>
9
+ <%% end %>
10
+ </table>
11
+
@@ -0,0 +1,8 @@
1
+ <%%= f.hidden_field :lock_version %>
2
+
3
+ <% attributes.each do |atributo| -%>
4
+ <p>
5
+ <%%= f.label :<%= atributo.name %>, '<%= atributo.name.humanize %>:' %> <%= if(atributo.type == :text) then '<br />' end %>
6
+ <%%= f.<%= atributo.field_type %> :<%= atributo.name %> %>
7
+ </p>
8
+ <% end %>
@@ -0,0 +1,13 @@
1
+ <h2>Editando <%= file_name %></h2>
2
+
3
+ <%% form_for(@<%= file_name %>) do |f| %>
4
+ <%%= f.error_messages %>
5
+
6
+ <%%= render :partial => 'dados_<%= file_name %>', :locals => { :f => f } %>
7
+ <p>
8
+ <%%= f.submit 'Atualizar' %>
9
+ </p>
10
+ <%% end %>
11
+
12
+ <%%= link_to 'Mostrar <%= file_name %>', @<%= file_name %> %> |
13
+ <%%= link_to 'Voltar para a listagem de <%= file_plural %>', <%= file_plural %>_path %>
@@ -0,0 +1,11 @@
1
+ <h2><%= class_plural %></h2>
2
+
3
+ <%% form_remote_tag :url => { :action => 'buscar' }, :update => 'dados_busca' do %>
4
+ <p><b>Busca: </b><%%= text_field_tag 'busca' %> <%%= submit_tag 'Buscar' %></p>
5
+ <%% end %>
6
+
7
+ <div id='dados_busca'>
8
+ </div>
9
+
10
+
11
+ <%%= link_to 'Novo <%= file_name %>', new_<%= file_name %>_path %>
@@ -0,0 +1,18 @@
1
+ <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
2
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
3
+
4
+ <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
5
+ <head>
6
+ <meta http-equiv="content-type" content="text/html;charset=UTF-8" />
7
+ <title>Alunos: <%= controller.action_name %></title>
8
+ <%= stylesheet_link_tag 'scaffold' %>
9
+ <%= javascript_include_tag :all %>
10
+ </head>
11
+ <body>
12
+
13
+ <p style="color: green"><%= flash[:notice] %></p>
14
+
15
+ <%= yield %>
16
+
17
+ </body>
18
+ </html>
@@ -0,0 +1,12 @@
1
+ <h2>Novo <%= file_name %></h2>
2
+
3
+ <%% form_for(@<%= file_name %>) do |f| %>
4
+ <%%= f.error_messages %>
5
+
6
+ <%%= render :partial => 'dados_<%= file_name %>', :locals => { :f => f } %>
7
+ <p>
8
+ <%%= f.submit 'Criar' %>
9
+ </p>
10
+ <%% end %>
11
+
12
+ <%%= link_to 'Voltar para a listagem de <%= file_plural %>', <%= file_plural %>_path %>
@@ -0,0 +1,16 @@
1
+ <% attributes.each do |atributo| -%>
2
+ <p>
3
+ <b><%= atributo.name.humanize %>:</b>
4
+ <%%=<%= case atributo.type
5
+ when :date, :datetime, :timestamp, :time
6
+ 'l'
7
+ else
8
+ 'h'
9
+ end
10
+ %> @<%= file_name %>.<%= atributo.name %> %>
11
+ </p>
12
+
13
+ <% end -%>
14
+
15
+ <%%= link_to 'Editar', edit_<%= file_name %>_path(@<%= file_name %>) %> |
16
+ <%%= link_to 'Voltar para a listagem', <%= file_plural %>_path %>
@@ -0,0 +1,10 @@
1
+ Cria um layout para o rails, e altera o Environment para acertar as opções para o idioma Brasil - Padrão.
2
+
3
+ Exemplo:
4
+ script/generate layout
5
+
6
+ Isso irá gerar:
7
+ app/views/layouts/application.html.erb
8
+ public/stylesheets/scaffold.css
9
+ config/locales/pt_BR.yml
10
+
@@ -0,0 +1,22 @@
1
+ class LayoutGenerator < Rails::Generator::Base
2
+ def manifest
3
+ record do |m|
4
+ m.directory 'app/views'
5
+ m.directory 'app/views/layouts'
6
+ m.file 'layout.html.erb', 'app/views/layouts/application.html.erb'
7
+
8
+ m.directory 'public/stylesheets'
9
+ m.file 'stylesheet.css', 'public/stylesheets/style.css'
10
+
11
+ m.directory 'config/locales'
12
+ m.file 'pt_BR.yml', 'config/locales/pt_BR.yml'
13
+
14
+ m.readme 'README'
15
+ end
16
+ end
17
+
18
+ protected
19
+ def banner
20
+ "Uso: #{$0} layout"
21
+ end
22
+ end
@@ -0,0 +1,7 @@
1
+
2
+
3
+ Para adicionar suporte às mensagem em português e resolver problemas com as rotas,
4
+ adicione as seguintes linhas no seu environment.rb:
5
+
6
+ config.i18n.default_locale = :pt_BR
7
+ config.action_controller.resources_path_names = { :new => 'novo', :edit => 'editar' }
@@ -0,0 +1,26 @@
1
+ <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
2
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
3
+ <html xmlns="http://www.w3.org/1999/xhtml"
4
+ xml:lang="en" lang="en">
5
+ <head>
6
+ <meta http-equiv="Content-type"
7
+ content="text/html; charset=utf-8" />
8
+ <title>DEFINA SEU SISTEMA AQUI</title>
9
+ <%= stylesheet_link_tag 'style' %>
10
+ <%= javascript_include_tag :all %>
11
+ <%= javascript_include_tag :defaults %>
12
+ </head>
13
+ <body>
14
+ <p style="color: green"><%= flash[:notice] %></p>
15
+ <div id="logout">
16
+ <% if session[:usuario] %>
17
+ Logado como:
18
+ <%= session[:usuario] %>
19
+ <em><%= link_to "(deslogar)", :controller => :login, :action => :deslogar %></em>
20
+ <% end %>
21
+ </div>
22
+ <div id="conteudo">
23
+ <%= yield %>
24
+ </div>
25
+ </body>
26
+ </html>
@@ -0,0 +1,109 @@
1
+ pt_BR:
2
+ # formatos de data e hora
3
+ date:
4
+ formats:
5
+ default: "%d/%m/%Y"
6
+ short: "%d %b"
7
+ long: "%d de %B de %Y"
8
+ only_day: "%e"
9
+ day_names: [Domingo, Segunda, Terça, Quarta, Quinta, Sexta, Sábado]
10
+ abbr_day_names: [Dom, Seg, Ter, Qua, Qui, Sex, Sáb]
11
+ month_names: [~, Janeiro, Fevereiro, Março, Abril, Maio, Junho, Julho, Agosto, Setembro, Outubro, Novembro, Dezembro]
12
+ abbr_month_names: [~, Jan, Fev, Mar, Abr, Mai, Jun, Jul, Ago, Set, Out, Nov, Dez]
13
+ order: [:day, :month, :year]
14
+
15
+ time:
16
+ formats:
17
+ default: "%A, %d de %B de %Y, %H:%M"
18
+ time: "%H:%M hs"
19
+ short: "%d/%m/%Y, %H:%M hs"
20
+ long: "%A, %d de %B de %Y, %H:%M"
21
+ only_second: "%S"
22
+ am: ""
23
+ pm: ""
24
+
25
+ # date helper distanci em palavras
26
+ datetime:
27
+ distance_in_words:
28
+ half_a_minute: 'meio minuto'
29
+ less_than_x_seconds:
30
+ one: 'menos de 1 segundo'
31
+ other: 'menos de {{count}} segundos'
32
+
33
+ x_seconds:
34
+ one: '1 segundo'
35
+ other: '{{count}} segundos'
36
+
37
+ less_than_x_minutes:
38
+ one: 'menos de um minuto'
39
+ other: 'menos de {{count}} minutos'
40
+
41
+ x_minutes:
42
+ one: '1 minuto'
43
+ other: '{{count}} minutos'
44
+
45
+ about_x_hours:
46
+ one: 'aproximadamente 1 hora'
47
+ other: 'aproximadamente {{count}} horas'
48
+
49
+ x_days:
50
+ one: '1 dia'
51
+ other: '{{count}} dias'
52
+
53
+ about_x_months:
54
+ one: 'aproximadamente 1 mês'
55
+ other: 'aproximadamente {{count}} meses'
56
+
57
+ x_months:
58
+ one: '1 mês'
59
+ other: '{{count}} meses'
60
+
61
+ about_x_years:
62
+ one: 'aproximadamente 1 ano'
63
+ other: 'aproximadamente {{count}} anos'
64
+
65
+ over_x_years:
66
+ one: 'mais de 1 ano'
67
+ other: 'mais de {{count}} anos'
68
+
69
+ # numeros
70
+ number:
71
+ format:
72
+ precision: 3
73
+ separator: ','
74
+ delimiter: '.'
75
+
76
+ currency:
77
+ format:
78
+ unit: 'R$'
79
+ precision: 2
80
+ format: '%u %n'
81
+
82
+ # Active Record
83
+ activerecord:
84
+ errors:
85
+ template:
86
+ header:
87
+ one: "Seus dados não puderam ser salvos: 1 erro"
88
+ other: "Seus dados não puderam ser salvos: {{count}} erros."
89
+ body: "Por favor, cheque os seguintes campos:"
90
+ messages:
91
+ inclusion: "não está incluso na lista"
92
+ exclusion: "não está disponível"
93
+ invalid: "não é válido"
94
+ confirmation: "não bate com a confirmação"
95
+ accepted: "precisa ser aceito"
96
+ empty: "não pode estar vazio"
97
+ blank: "não pode estar em branco"
98
+ too_long: "é muito longo (não mais do que {{count}} caracteres)"
99
+ too_short: "é muito curto (não menos do que {{count}} caracteres)"
100
+ wrong_length: "não é do tamanho correto (precisa ter {{count}} caracteres)"
101
+ taken: "não está disponível"
102
+ not_a_number: "não é um número"
103
+ greater_than: "precisa ser maior do que {{count}}"
104
+ greater_than_or_equal_to: "precisa ser maior ou igual a {{count}}"
105
+ equal_to: "precisa ser igual a {{count}}"
106
+ less_than: "precisa ser menor do que {{count}}"
107
+ less_than_or_equal_to: "precisa ser menor ou igual a {{count}}"
108
+ odd: "precisa ser ímpar"
109
+ even: "precisa ser par"