zero_generators 0.0.1

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.
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
data/README ADDED
@@ -0,0 +1,38 @@
1
+ Zero Generators
2
+ =======
3
+
4
+ Coletânea de geradores de código para Rails que eu acabo tendo que incluir em todos os projetos
5
+ que desenvolvo, e acabei por decidindo criar um plugin.
6
+
7
+ Geradores
8
+ =======
9
+
10
+ Basicamente, os geradores são:
11
+
12
+ * tdd_model, tdd_controller - Geradores que geram "stubs" de testes, em formato RSpec.
13
+ * tdd_scaffold - Gerador para um teste, em RSpec, de um scaffold padrão do Rails. Evita stubs sempre que possível.
14
+ * tdd_scaffold_stub - Gerador para um teste, em RSpec, de um scaffold padrão do Rails, usando stubs
15
+ sempre que possível (tenta imitar o formato padrão do spec_scaffold, porém em português).
16
+ * factory_scaffold - Gerador para um teste, em RSpec, de um scaffold padrão porém usando fixtures.
17
+ Utiliza stubs, porém a idéia é ser fácil de retirar estes stubs se for necessário.
18
+ * layout - Cria um layout, inclusive com o arquivo pt_BR.yml.
19
+ * ferret_scaffold - Cria um Scaffold usando Ferret.
20
+
21
+ NOTA
22
+ ======
23
+
24
+ Estes geradores são altamente "opinados" - todos os geradores que geram também testes usam a sintaxe
25
+ do RSpec, e todos os testes evitam stubs. Na minha concepção, não existe "unit-test" em Controller
26
+ (e, na verdade, o BDD meio que surgiu para evitar a idéia de "unit-test") portanto isolar o Controller
27
+ da Model, em testes, não parece fazer sentido. Isso faz com que uma alteração na Model muitas vezes
28
+ quebre testes no Controller, mas sejamos sinceros, se isso acontecer é porque provavelmente o seu
29
+ Controller está com bugs mesmo, e se o teste não serve para capturar isso, qual o uso dele?
30
+
31
+ Este é um projeto em andamento, e provavelmente com o tempo o número de geradores aumentará bastante.
32
+
33
+ Exemplos
34
+ =======
35
+
36
+
37
+
38
+ Copyright (c) 2009 Maurício Szabo, desenvolvido sobre a Artistic License - versão 2.0
@@ -0,0 +1,21 @@
1
+ #coding: utf-8
2
+ #Copiado na íntegra do RSpec-Rails
3
+ module Rails
4
+ module Generator
5
+ class GeneratedAttribute
6
+ def default_value
7
+ @default_value ||= case type
8
+ when :int, :integer then "\"1\""
9
+ when :float then "\"1.5\""
10
+ when :decimal then "\"9.99\""
11
+ when :datetime, :timestamp, :time then "Time.now"
12
+ when :date then "Date.today"
13
+ when :string, :text then "\"valor para #{@name}\""
14
+ when :boolean then "false"
15
+ else
16
+ "\"\""
17
+ end
18
+ end
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,15 @@
1
+ Descrição:
2
+ Gera um teste, em RSpec, para um scaffold padrão do Rails, usando Factories.
3
+
4
+ Examplo:
5
+ ./script/generate factory_scaffold Aluno
6
+
7
+ Isto vai criar:
8
+ spec/models/aluno_spec.rb
9
+ spec/fixtures/alunos.yml
10
+ spec/controller/alunos_controller_spec.rb
11
+ spec/helpers/alunos_helper_spec.rb
12
+
13
+ NOTA: Este teste não cria as factories automaticamente, nem adiciona nenhuma informação
14
+ no arquivo spec_helper de como incluí-las. É necessário criar as factories manualmente
15
+ após gerar o factory_scaffold.
@@ -0,0 +1,27 @@
1
+ class FactoryScaffoldGenerator < Rails::Generator::NamedBase
2
+ attr_reader :file_plural, :class_plural
3
+
4
+ def manifest
5
+ record do |m|
6
+ # m.directory "lib"
7
+ # m.template 'README', "README"
8
+ m.class_collisions class_path, class_name
9
+
10
+ @file_plural = file_name.pluralize
11
+ @class_plural = class_name.pluralize
12
+
13
+ m.directory 'spec'
14
+ m.directory 'spec/controllers'
15
+ m.directory File.join('spec/controllers', class_path)
16
+ m.template 'controller_spec.rb.erb', File.join('spec/controllers', class_path, "#{@file_plural}_controller_spec.rb")
17
+
18
+ m.directory 'spec/models'
19
+ m.directory File.join('spec/models', class_path)
20
+ m.template 'model_spec.rb.erb', File.join('spec/models', class_path, "#{file_name}_spec.rb")
21
+
22
+ m.directory 'spec/helpers'
23
+ m.directory File.join('spec/helpers', class_path)
24
+ m.template 'helper_spec.rb.erb', File.join('spec/helpers', class_path, "#{@file_plural}_helper_spec.rb")
25
+ end
26
+ end
27
+ end
@@ -0,0 +1,135 @@
1
+ require 'spec/spec_helper'
2
+
3
+ describe <%= class_plural %>Controller do
4
+ integrate_views
5
+
6
+ context 'durante a exibição das telas (GET)' do
7
+ it 'deve exibir corretamente uma listagem' do
8
+ stub_<%= file_name %>
9
+ get :index
10
+ response.body.should include('Nome')
11
+ end
12
+
13
+ it 'deve exibir corretamente uma listagem XML' do
14
+ stub_<%= file_name %>
15
+ get :index, :format => 'xml'
16
+ response.should have_tag('nome', :text => 'Nome')
17
+ end
18
+
19
+ it 'deve exibir corretamente o dado de um <%= file_name %>' do
20
+ stub_<%= file_name %>
21
+ get :show, :id => @<%= file_name %>.id
22
+ response.body.should include('Nome')
23
+ end
24
+
25
+ it 'deve exibir corretamente o dado de um <%= file_name %> via XML' do
26
+ stub_<%= file_name %>
27
+ get :show, :id => @<%= file_name %>.id, :format => 'xml'
28
+ response.should have_tag('nome', :text => 'Nome')
29
+ end
30
+
31
+ it 'deve exibir corretamente uma tela de edição' do
32
+ stub_<%= file_name %>
33
+ get :edit, :id => @<%= file_name %>.id
34
+ response.should have_tag('form')
35
+ end
36
+
37
+ it 'deve exibir corretamente uma tela de criação' do
38
+ get :new
39
+ response.should have_tag('form')
40
+ end
41
+
42
+ it 'deve exibir corretamente uma tela de criação via XML' do
43
+ get :new, :format => 'xml'
44
+ response.should be_success
45
+ end
46
+ end
47
+
48
+ context 'na edição ou criação de <%= file_plural %>' do
49
+ context 'com atributos válidos' do
50
+ it 'deve criar um registro corretamente e redirecionar para ele' do
51
+ post :create, :<%= file_name %> => Factory.attributes_for(:<%= file_name %>)
52
+ response.should redirect_to(<%= file_name %>_url(<%= class_name %>.last))
53
+ end
54
+
55
+ it 'deve criar um registro corretamente via REST e apontar para sua URI' do
56
+ post :create, :<%= file_name %> => Factory.attributes_for(:<%= file_name %>), :format => 'xml'
57
+ response.response_code.should == 201
58
+ response.location.should == <%= file_name %>_url(<%= class_name %>.last)
59
+ end
60
+
61
+ it 'deve atualizar um registro corretamente e redirecionar para ele' do
62
+ stub_<%= file_name %>
63
+ @<%= file_name %>.should_receive(:save).and_return(true)
64
+ put :update, :<%= file_name %> => @<%= file_name %>.attributes
65
+ response.should redirect_to(<%= file_name %>_url(@<%= file_name %>))
66
+ end
67
+
68
+ it 'deve atualizar um registro corretamente via REST' do
69
+ stub_<%= file_name %>
70
+ @<%= file_name %>.should_receive(:save).and_return(true)
71
+ put :update, :<%= file_name %> => @<%= file_name %>.attributes, :format => 'xml'
72
+ response.should be_success
73
+ end
74
+ end
75
+
76
+ context 'com atributos inválidos' do
77
+ it 'deve impedir a criação de um registro, apresentar os erros e renderizar novamente a tela' do
78
+ stub_<%= file_name %>
79
+ <%= class_name %>.stub!(:new).and_return(@<%= file_name %>)
80
+ @<%= file_name %>.should_receive(:save).and_return(false)
81
+ @<%= file_name %>.errors.add(:atributo, 'possui um erro')
82
+ post :create, :<%= file_name %> => Factory.attributes_for(:<%= file_name %>)
83
+ response.should render_template('new')
84
+ response.body.should include('Atributo possui um erro')
85
+ end
86
+
87
+ it 'deve impedir a criação de um registro e apresentar um XML com os erros' do
88
+ stub_<%= file_name %>
89
+ <%= class_name %>.stub!(:new).and_return(@<%= file_name %>)
90
+ @<%= file_name %>.should_receive(:save).and_return(false)
91
+ post :create, :<%= file_name %> => Factory.attributes_for(:<%= file_name %>), :format => 'xml'
92
+ response.response_code.should == 422
93
+ response.should have_tag('errors')
94
+ end
95
+
96
+ it 'deve impedir a edição, apresentar os erros e renderizar novamente a tela' do
97
+ stub_<%= file_name %>
98
+ @<%= file_name %>.should_receive(:save).and_return(false)
99
+ @<%= file_name %>.errors.add(:atributo, 'possui um erro')
100
+ put :update, :<%= file_name %> => @<%= file_name %>.attributes
101
+ response.should render_template('edit')
102
+ response.body.should include('Atributo possui um erro')
103
+ end
104
+
105
+ it 'deve impedir a edição apresentar um XML com os erros' do
106
+ stub_<%= file_name %>
107
+ @<%= file_name %>.should_receive(:save).and_return(false)
108
+ put :update, :<%= file_name %> => @<%= file_name %>.attributes, :format => 'xml'
109
+ response.should have_tag('errors')
110
+ end
111
+ end
112
+ end
113
+
114
+ context 'na destruição de um registro' do
115
+ it 'deve remover o registro e redirecionar para a listagem' do
116
+ stub_<%= file_name %>
117
+ @<%= file_name %>.should_receive(:destroy).and_return(true)
118
+ delete :destroy, :id => @<%= file_name %>.id
119
+ response.should redirect_to(<%= file_plural %>_url)
120
+ end
121
+
122
+ it 'deve remover o registro via REST' do
123
+ stub_<%= file_name %>
124
+ @<%= file_name %>.should_receive(:destroy).and_return(true)
125
+ delete :destroy, :id => @<%= file_name %>.id, :format => 'xml'
126
+ response.should be_success
127
+ end
128
+ end
129
+ end
130
+
131
+ def stub_<%= file_name %>(atributos = {})
132
+ @<%= file_name %> = Factory.stub :<%= file_name %>, atributos
133
+ <%= class_name %>.stub!(:find).and_return(@<%= file_name %>)
134
+ <%= class_name %>.stub!(:all).and_return([@<%= file_name %>])
135
+ end
@@ -0,0 +1,5 @@
1
+ require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
2
+
3
+ describe <%= class_plural %>Helper do
4
+ include <%= class_plural %>Helper
5
+ end
@@ -0,0 +1,8 @@
1
+ require 'spec/spec_helper'
2
+
3
+ describe <%= class_name %> do
4
+ it "deve ser válido com os dados corretos" do
5
+ @<%= file_plural %> = Factory.build(:<%= file_name %>)
6
+ @<%= file_plural %>.should be_valid
7
+ end
8
+ end
@@ -0,0 +1,12 @@
1
+ Descrição:
2
+ ferret_scaffold é semelhante ao scaffold normal do Rails, porém cria telas
3
+ mais simples, em português, e com suporte para o Ferret (inclusive
4
+ removendo acentuação das strings de busca).
5
+
6
+ Passe o nome do modelo no singular, e uma lista de atributos:tipo, assim
7
+ como seria feito no scaffold normal.
8
+
9
+ Exemplos:
10
+ `./script/generate ferret_scaffold post`
11
+ `./script/generate ferret_scaffold post title:string body:text published:boolean`
12
+ `./script/generate ferret_scaffold purchase order_id:integer amount:decimal`
@@ -0,0 +1,92 @@
1
+ require File.dirname(__FILE__) + '/../default_values'
2
+
3
+ class FerretScaffoldGenerator < Rails::Generator::NamedBase
4
+ default_options :skip_timestamps => false, :skip_migration => false, :force_plural => false, :skip_spec => false
5
+
6
+ attr_reader :file_plural, :class_plural
7
+
8
+ def manifest
9
+ record do |m|
10
+ m.class_collisions class_path, class_name
11
+
12
+ @file_plural = file_name.pluralize
13
+ @class_plural = class_name.pluralize
14
+
15
+ m.directory 'app'
16
+ m.directory 'app/controllers'
17
+ m.directory File.join('app/controllers', class_path)
18
+ m.template 'controller.rb.erb', File.join('app/controllers', class_path, "#{@file_plural}_controller.rb")
19
+
20
+ m.directory 'app'
21
+ m.directory 'app/models'
22
+ m.directory File.join('app/models', class_path)
23
+ m.template 'model.rb.erb', File.join('app/models', class_path, "#{file_name}.rb")
24
+
25
+ m.directory 'app'
26
+ m.directory 'app/helpers'
27
+ m.directory File.join('app/helpers', class_path)
28
+ m.template 'helper.rb.erb', File.join('app/helpers', class_path, "#{@file_plural}_helper.rb")
29
+
30
+ m.directory 'app'
31
+ m.directory 'app/views'
32
+ m.directory "app/views/#{@file_plural}"
33
+ m.template 'views/_dados_model.html.erb', File.join("app/views/#{@file_plural}", class_path, "_dados_#{file_name}.html.erb")
34
+ m.template 'views/_dados_busca.html.erb', File.join("app/views/#{@file_plural}", class_path, "_dados_busca.html.erb")
35
+ m.template 'views/index.html.erb', File.join("app/views/#{@file_plural}", class_path, "index.html.erb")
36
+ m.template 'views/new.html.erb', File.join("app/views/#{@file_plural}", class_path, "new.html.erb")
37
+ m.template 'views/edit.html.erb', File.join("app/views/#{@file_plural}", class_path, "edit.html.erb")
38
+ m.template 'views/show.html.erb', File.join("app/views/#{@file_plural}", class_path, "show.html.erb")
39
+
40
+ m.route_resources @file_plural
41
+
42
+ unless options[:skip_specs]
43
+ m.directory 'spec'
44
+ m.directory 'spec/controllers'
45
+ m.directory File.join('spec/controllers', class_path)
46
+ m.template 'controller_spec.rb.erb', File.join('spec/controllers', class_path, "#{@file_plural}_controller_spec.rb")
47
+
48
+ m.directory 'spec'
49
+ m.directory 'spec/models'
50
+ m.directory File.join('spec/models', class_path)
51
+ m.template 'model_spec.rb.erb', File.join('spec/models', class_path, "#{file_name}_spec.rb")
52
+
53
+ m.directory 'spec'
54
+ m.directory 'spec/helpers'
55
+ m.directory File.join('spec/helpers', class_path)
56
+ m.template 'helper_spec.rb.erb', File.join('spec/helpers', class_path, "#{@file_plural}_helper_spec.rb")
57
+
58
+ m.directory 'spec/fixtures'
59
+ m.template 'model:fixtures.yml', File.join('spec/fixtures', "#{table_name}.yml")
60
+ end
61
+
62
+ unless options[:skip_migrations]
63
+ m.migration_template(
64
+ 'migration.rb.erb', 'db/migrate',
65
+ :assigns => {
66
+ :migration_name => "Create#{class_name.pluralize.gsub(/::/, '')}",
67
+ :attributes => attributes
68
+ },
69
+ :migration_file_name => "create_#{file_path.gsub(/\//, '_').pluralize}"
70
+ )
71
+ end
72
+ end
73
+ end
74
+
75
+ protected
76
+ def banner
77
+ "Uso: #{$0} ferret_scaffold NomeModelo [campo:tipo campo:tipo ...] [opções]"
78
+ end
79
+
80
+ def add_options!(opt)
81
+ opt.separator ''
82
+ opt.separator 'Opções:'
83
+ opt.on("--skip-timestamps",
84
+ "Não adiciona a hora de criação e de alteração no modelo") { |v| options[:skip_timestamps] = v }
85
+ opt.on("--skip-migration",
86
+ "Não gera um migration para o modelo") { |v| options[:skip_migration] = v }
87
+ opt.on("--skip-specs",
88
+ "Não gera os SPECs para o código gerado") { |v| options[:skip_specs] = v }
89
+ opt.on('--skip-lock',
90
+ 'Não cria o lock_version na base de dados') { |v| options[:skip_lock] = v }
91
+ end
92
+ end
@@ -0,0 +1,128 @@
1
+ class <%= class_plural %>Controller < ApplicationController
2
+ # GET /<%= file_plural %>
3
+ # GET /<%= file_plural %>.xml
4
+ # GET /<%= file_plural %>.xml?busca=filtro
5
+ # GET /<%= file_plural %>.xml?atributo=valor
6
+ #
7
+ #Quando pede um XML, apresenta ou todos os registros, ou quando for buscado
8
+ #por um atributo, apresenta apenas os registros que satisfazem aquele atributo.
9
+ #Também é possível passar o parâmetro "busca", e fazer a busca com Ferret.
10
+ def index
11
+ respond_to do |format|
12
+ format.html # index.html.erb
13
+ format.xml do
14
+ if(params[:busca])
15
+ @<%= file_plural %> = <%= class_name %>.find_with_ferret(params[:busca])
16
+ else
17
+ conditions = {}
18
+ <%= class_name %>.column_names.each do |campo|
19
+ conditions.update(campo => params[campo]) if(params[campo])
20
+ end
21
+ @<%= file_plural %> = <%= class_name %>.all :conditions => conditions
22
+ end
23
+ render :xml => @<%= file_plural %>
24
+ end
25
+ end
26
+ end
27
+
28
+ # GET /<%= file_plural %>/1
29
+ # GET /<%= file_plural %>/1.xml
30
+ #
31
+ #Exibe uma tela com os dados do <%= file_name %>, ou um XML com os dados do <%= file_name %>.
32
+ def show
33
+ @<%= file_name %> = <%= class_name %>.find(params[:id])
34
+
35
+ respond_to do |format|
36
+ format.html # show.html.erb
37
+ format.xml { render :xml => @<%= file_name %> }
38
+ end
39
+ end
40
+
41
+ # GET /<%= file_plural %>/new
42
+ # GET /<%= file_plural %>/new.xml
43
+ #
44
+ #Renderiza uma tela com um formulário de adição de <%= file_plural %>.
45
+ def new
46
+ @<%= file_name %> = <%= class_name %>.new
47
+
48
+ respond_to do |format|
49
+ format.html # new.html.erb
50
+ format.xml { render :xml => @<%= file_name %> }
51
+ end
52
+ end
53
+
54
+ # GET /<%= file_plural %>/1/edit
55
+ #
56
+ #Renderiza uma tela de edição para um <%= file_name %>.
57
+ def edit
58
+ @<%= file_name %> = <%= class_name %>.find(params[:id])
59
+ end
60
+
61
+ # POST /<%= file_plural %>/buscar
62
+ #
63
+ #Busca, com o Ferret, os dados dos <%= file_plural %>.
64
+ def buscar
65
+ @<%= file_plural %> = <%= class_name %>.find_with_ferret(params[:busca])
66
+ render :partial => 'dados_busca'
67
+ end
68
+
69
+ # POST /<%= file_plural %>
70
+ # POST /<%= file_plural %>.xml
71
+ #
72
+ #Cria um <%= file_name %>, rodando suas validações e redirecionando para o
73
+ #registro criado.
74
+ def create
75
+ @<%= file_name %> = <%= class_name %>.new(params[:<%= file_name %>])
76
+
77
+ respond_to do |format|
78
+ if @<%= file_name %>.save
79
+ flash[:notice] = '<%= class_name %> foi criado com sucesso.'
80
+ format.html { redirect_to(@<%= file_name %>) }
81
+ format.xml { render :xml => @<%= file_name %>, :status => :created, :location => @<%= file_name %> }
82
+ else
83
+ format.html { render :action => "new" }
84
+ format.xml { render :xml => @<%= file_name %>.errors, :status => :unprocessable_entity }
85
+ end
86
+ end
87
+ end
88
+
89
+ # PUT /<%= file_plural %>/1
90
+ # PUT /<%= file_plural %>/1.xml
91
+ #
92
+ #Atualiza os dados de um <%= file_name %>, rodando suas validações, e redirecionando
93
+ #para o registro atualizado.
94
+ def update
95
+ @<%= file_name %> = <%= class_name %>.find(params[:id])
96
+
97
+ respond_to do |format|
98
+ if @<%= file_name %>.update_attributes(params[:<%= file_name %>])
99
+ flash[:notice] = '<%= class_name %> foi atualizado com sucesso.'
100
+ format.html { redirect_to(@<%= file_name %>) }
101
+ format.xml { head :ok }
102
+ else
103
+ format.html { render :action => "edit" }
104
+ format.xml { render :xml => @<%= file_name %>.errors, :status => :unprocessable_entity }
105
+ end
106
+ end
107
+ end
108
+
109
+ # DELETE /<%= file_plural %>/1
110
+ # DELETE /<%= file_plural %>/1.xml
111
+ #
112
+ #Deleta um registro.
113
+ def destroy
114
+ @<%= file_name %> = <%= class_name %>.find(params[:id])
115
+
116
+ respond_to do |format|
117
+ if(@<%= file_name %>.destroy)
118
+ format.html { redirect_to(<%= file_plural %>_url) }
119
+ format.xml { head :ok }
120
+ else
121
+ dependents = @<%= file_name %>.errors.collect { |campo, erros| campo }
122
+ flash[:notice] = "Não foi possível deletar. Há #{dependents.join(' ou ')} cadastrados."
123
+ format.html { redirect_to(<%= file_plural %>_url) }
124
+ format.xml { render :xml => @<%= file_name %>.errors, :status => :unprocessable_entity }
125
+ end
126
+ end
127
+ end
128
+ end