mconnell-generators 1.0.6

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 (42) hide show
  1. data/.gitignore +2 -0
  2. data/CHANGELOG +43 -0
  3. data/MIT-LICENSE +20 -0
  4. data/README.rdoc +46 -0
  5. data/Rakefile +17 -0
  6. data/TODO +11 -0
  7. data/bin/rubaidh_rails +11 -0
  8. data/generators.gemspec +59 -0
  9. data/generators/rubaidh_controller/USAGE +31 -0
  10. data/generators/rubaidh_controller/rubaidh_controller_generator.rb +40 -0
  11. data/generators/rubaidh_controller/templates/controller.rb +17 -0
  12. data/generators/rubaidh_controller/templates/controller_spec.rb +29 -0
  13. data/generators/rubaidh_controller/templates/view.html.erb +17 -0
  14. data/generators/rubaidh_helper/USAGE +23 -0
  15. data/generators/rubaidh_helper/rubaidh_helper_generator.rb +27 -0
  16. data/generators/rubaidh_helper/templates/helper.rb +12 -0
  17. data/generators/rubaidh_helper/templates/helper_spec.rb +14 -0
  18. data/generators/rubaidh_layout/rubaidh_layout_generator.rb +27 -0
  19. data/generators/rubaidh_layout/templates/base.css +334 -0
  20. data/generators/rubaidh_layout/templates/layout.html.erb +36 -0
  21. data/generators/rubaidh_layout/templates/style.css +321 -0
  22. data/generators/rubaidh_model/USAGE +25 -0
  23. data/generators/rubaidh_model/rubaidh_model_generator.rb +29 -0
  24. data/generators/rubaidh_model/templates/migration.rb +25 -0
  25. data/generators/rubaidh_model/templates/model.rb +15 -0
  26. data/generators/rubaidh_model/templates/model_exemplar.rb +13 -0
  27. data/generators/rubaidh_model/templates/model_spec.rb +31 -0
  28. data/generators/rubaidh_named_base.rb +31 -0
  29. data/generators/rubaidh_scaffold/USAGE +29 -0
  30. data/generators/rubaidh_scaffold/rubaidh_scaffold_generator.rb +90 -0
  31. data/generators/rubaidh_scaffold/templates/controller.rb +76 -0
  32. data/generators/rubaidh_scaffold/templates/controller_spec.rb +251 -0
  33. data/generators/rubaidh_scaffold/templates/partial_form.html.erb +13 -0
  34. data/generators/rubaidh_scaffold/templates/partial_layout.html.erb +13 -0
  35. data/generators/rubaidh_scaffold/templates/partial_model.html.erb +8 -0
  36. data/generators/rubaidh_scaffold/templates/routing_spec.rb +73 -0
  37. data/generators/rubaidh_scaffold/templates/view_edit.html.erb +10 -0
  38. data/generators/rubaidh_scaffold/templates/view_index.html.erb +10 -0
  39. data/generators/rubaidh_scaffold/templates/view_new.html.erb +9 -0
  40. data/generators/rubaidh_scaffold/templates/view_show.html.erb +17 -0
  41. data/templates/rubaidh.rb +115 -0
  42. metadata +113 -0
@@ -0,0 +1,25 @@
1
+ Description:
2
+ Stubs out a new model. Pass the model name, either CamelCased or
3
+ under_scored, and an optional list of attribute pairs as arguments.
4
+
5
+ Attribute pairs are column_name:sql_type arguments specifying the
6
+ model's attributes. Timestamps are added by default, so you don't have to
7
+ specify them by hand as 'created_at:datetime updated_at:datetime'.
8
+
9
+ You don't have to think up every attribute up front, but it helps to
10
+ sketch out a few so you can start working with the model immediately.
11
+
12
+ This generates a model class in app/models, an rspec specification in
13
+ spec/models and a migration in db/migrate.
14
+
15
+ Examples:
16
+ `./script/generate model account`
17
+
18
+ creates an Account model, spec and migration:
19
+ Model: app/models/account.rb
20
+ Spec: spec/models/account_spec.rb
21
+ Migration: db/migrate/XXX_add_accounts.rb
22
+
23
+ `./script/generate model post title:string body:text published:boolean`
24
+
25
+ creates a Post model with a string title, text body, and published flag.
@@ -0,0 +1,29 @@
1
+ require File.join(File.dirname(__FILE__), '..', 'rubaidh_named_base')
2
+
3
+ class RubaidhModelGenerator < RubaidhNamedBase
4
+ def manifest
5
+ record do |m|
6
+ # Check for class naming collisions.
7
+ m.class_collisions class_name
8
+
9
+ # Model, test, and fixture directories.
10
+ m.directory File.join('app/models', class_path)
11
+ m.directory File.join('spec/models', class_path)
12
+ m.directory File.join('spec/exemplars', class_path)
13
+
14
+ # Model class, unit test, and fixtures.
15
+ m.template 'model.rb', File.join('app/models', class_path, "#{file_name}.rb")
16
+ m.template 'model_spec.rb', File.join('spec/models', class_path, "#{file_name}_spec.rb")
17
+ m.template 'model_exemplar.rb', File.join('spec/exemplars', class_path, "#{file_name}_exemplar.rb")
18
+
19
+ m.migration_template 'migration.rb', 'db/migrate', :assigns => {
20
+ :migration_name => "Create#{class_name.pluralize.gsub(/::/, '')}"
21
+ }, :migration_file_name => "create_#{file_path.gsub(/\//, '_').pluralize}"
22
+ end
23
+ end
24
+
25
+ protected
26
+ def banner
27
+ "Usage: #{$0} #{spec.name} ModelName [field:type] ..."
28
+ end
29
+ end
@@ -0,0 +1,25 @@
1
+ # <%= migration_name %> Migration
2
+ #
3
+ # Created on <%= Time.now.to_s :long %> by <%= user_full_name %> as part
4
+ # of the "<%= project_name %>" project.
5
+ #
6
+ #--
7
+ # Copyright (c) 2006-<%= Time.now.year %> Rubaidh Ltd. All rights reserved.
8
+ # See LICENSE in the top level source code folder for permissions.
9
+ #++
10
+
11
+ class <%= migration_name %> < ActiveRecord::Migration
12
+ def self.up
13
+ create_table :<%= table_name %> do |t|
14
+ <% attributes.each do |attribute| -%>
15
+ t.<%= attribute.type %> :<%= attribute.name %>
16
+ <% end -%>
17
+
18
+ t.timestamps
19
+ end
20
+ end
21
+
22
+ def self.down
23
+ drop_table :<%= table_name %>
24
+ end
25
+ end
@@ -0,0 +1,15 @@
1
+ # <%= class_name %> Model
2
+ #
3
+ # Created on <%= Time.now.to_s :long %> by <%= user_full_name %> as part
4
+ # of the "<%= project_name %>" project.
5
+ #
6
+ #--
7
+ # Copyright (c) 2006-<%= Time.now.year %> Rubaidh Ltd. All rights reserved.
8
+ # See LICENSE in the top level source code folder for permissions.
9
+ #++
10
+
11
+ class <%= class_name %> < ActiveRecord::Base
12
+ <% attributes.select(&:reference?).each do |attribute| -%>
13
+ belongs_to :<%= attribute.name %>
14
+ <% end -%>
15
+ end
@@ -0,0 +1,13 @@
1
+ # <%= class_name %> Exemplar
2
+ #
3
+ # Created on <%= Time.now.to_s :long %> by <%= user_full_name %> as part
4
+ # of the "<%= project_name %>" project.
5
+ #
6
+ #--
7
+ # Copyright (c) 2006-<%= Time.now.year %> Rubaidh Ltd. All rights reserved.
8
+ # See LICENSE in the top level source code folder for permissions.
9
+ #++
10
+
11
+ <%= class_name %>.class_eval do
12
+
13
+ end
@@ -0,0 +1,31 @@
1
+ # <%= class_name %> Specification
2
+ #
3
+ # Created on <%= Time.now.to_s :long %> by <%= user_full_name %> as part
4
+ # of the "<%= project_name %>" project.
5
+ #
6
+ #--
7
+ # Copyright (c) 2006-<%= Time.now.year %> Rubaidh Ltd. All rights reserved.
8
+ # See LICENSE in the top level source code folder for permissions.
9
+ #++
10
+
11
+ require File.expand_path(File.dirname(__FILE__) + '<%= '/..' * class_nesting_depth %>/../spec_helper')
12
+
13
+ describe <%= class_name %> do
14
+ describe "generator" do
15
+ it "should successfully create a new instance" do
16
+ lambda { <%= class_name %>.generate! }.should_not raise_error
17
+ end
18
+
19
+ it "should persist the new instance in the database" do
20
+ lambda { <%= class_name %>.generate }.should change(<%= class_name %>, :count).by(1)
21
+ end
22
+
23
+ it "should be valid" do
24
+ <%= class_name %>.generate.should be_valid
25
+ end
26
+ end
27
+
28
+ describe "validations" do
29
+
30
+ end
31
+ end
@@ -0,0 +1,31 @@
1
+ require 'grit'
2
+
3
+ class RubaidhNamedBase < Rails::Generator::NamedBase
4
+ attr_reader :project_name, :user_full_name
5
+
6
+ def initialize(runtime_args, runtime_options = {})
7
+ super
8
+
9
+ assign_additional_names!
10
+ end
11
+
12
+ private
13
+ def assign_additional_names!
14
+ @user_full_name = figure_out_full_name_from_git_repository
15
+ @project_name = figure_out_project_name_from_rails_root
16
+ end
17
+
18
+ def figure_out_full_name_from_git_repository
19
+ repos = Grit::Repo.new(RAILS_ROOT)
20
+
21
+ repos.config['user.name']
22
+ rescue StandardError => e
23
+ # If Grit::Repo raises an error, chances are it's not a git repository.
24
+ # It's not super-important, so just give up.
25
+ "a Rubaidh staff member"
26
+ end
27
+
28
+ def figure_out_project_name_from_rails_root
29
+ File.basename(RAILS_ROOT).humanize
30
+ end
31
+ end
@@ -0,0 +1,29 @@
1
+ Description:
2
+ Scaffolds an entire resource, from model and migration to controller and
3
+ views, along with a full rspec test suite. The resource is ready to use as
4
+ a starting point for your RESTful, resource-oriented application.
5
+
6
+ Pass the name of the model (in singular form), either CamelCased or
7
+ under_scored, as the first argument, and an optional list of attribute
8
+ pairs.
9
+
10
+ Attribute pairs are column_name:sql_type arguments specifying the
11
+ model's attributes. Timestamps are added by default, so you don't have to
12
+ specify them by hand as 'created_at:datetime updated_at:datetime'.
13
+
14
+ You don't have to think up every attribute up front, but it helps to
15
+ sketch out a few so you can start working with the resource immediately.
16
+
17
+ For example, 'scaffold post title:string body:text published:boolean'
18
+ gives you a model with those three attributes, a controller that handles
19
+ the create/show/update/destroy, forms to create and edit your posts, and
20
+ an index that lists them all, as well as a map.resources :posts
21
+ declaration in config/routes.rb.
22
+
23
+ If you want to remove all the generated files, run
24
+ 'script/destroy scaffold ModelName'.
25
+
26
+ Examples:
27
+ `./script/generate scaffold post`
28
+ `./script/generate scaffold post title:string body:text published:boolean`
29
+ `./script/generate scaffold purchase order_id:integer amount:decimal`
@@ -0,0 +1,90 @@
1
+ require File.join(File.dirname(__FILE__), '..', 'rubaidh_named_base')
2
+
3
+ class RubaidhScaffoldGenerator < RubaidhNamedBase
4
+ attr_reader :controller_name,
5
+ :controller_class_path,
6
+ :controller_file_path,
7
+ :controller_class_nesting,
8
+ :controller_class_nesting_depth,
9
+ :controller_class_name,
10
+ :controller_underscore_name,
11
+ :controller_singular_name,
12
+ :controller_plural_name
13
+ alias_method :controller_file_name, :controller_underscore_name
14
+ alias_method :controller_table_name, :controller_plural_name
15
+
16
+ def initialize(runtime_args, runtime_options = {})
17
+ super
18
+
19
+ if @name == @name.pluralize && !options[:force_plural]
20
+ logger.warning "Plural version of the model detected, using singularized version. Override with --force-plural."
21
+ @name = @name.singularize
22
+ end
23
+
24
+ @controller_name = @name.pluralize
25
+
26
+ base_name, @controller_class_path, @controller_file_path, @controller_class_nesting, @controller_class_nesting_depth = extract_modules(@controller_name)
27
+ @controller_class_name_without_nesting, @controller_underscore_name, @controller_plural_name = inflect_names(base_name)
28
+ @controller_singular_name=base_name.singularize
29
+ if @controller_class_nesting.empty?
30
+ @controller_class_name = @controller_class_name_without_nesting
31
+ else
32
+ @controller_class_name = "#{@controller_class_nesting}::#{@controller_class_name_without_nesting}"
33
+ end
34
+ end
35
+
36
+ def manifest
37
+ record do |m|
38
+ # Check for class naming collisions.
39
+ m.class_collisions "#{controller_class_name}Controller"
40
+
41
+ # Controller, helper, views, test and stylesheets directories.
42
+ m.directory(File.join('app/controllers', controller_class_path))
43
+ m.directory(File.join('app/views', controller_class_path, controller_file_name))
44
+ m.directory(File.join('spec/controllers', controller_class_path))
45
+
46
+ [ :index, :show, :new, :edit ].each do |view|
47
+ m.template(
48
+ "view_#{view}.html.erb",
49
+ File.join('app/views', controller_class_path, controller_file_name, "#{view}.html.erb")
50
+ )
51
+ end
52
+
53
+ m.template(
54
+ "partial_form.html.erb",
55
+ File.join('app/views', controller_class_path, controller_file_name, "_form.html.erb")
56
+ )
57
+
58
+ m.template(
59
+ "partial_layout.html.erb",
60
+ File.join('app/views', controller_class_path, controller_file_name, "_#{plural_name}.html.erb")
61
+ )
62
+
63
+ m.template(
64
+ "partial_model.html.erb",
65
+ File.join('app/views', controller_class_path, controller_file_name, "_#{singular_name}.html.erb")
66
+ )
67
+
68
+ m.template(
69
+ 'controller.rb', File.join('app/controllers', controller_class_path, "#{controller_file_name}_controller.rb")
70
+ )
71
+
72
+ m.template('routing_spec.rb', File.join('spec/controllers', controller_class_path, "#{controller_file_name}_routing_spec.rb"))
73
+ m.template('controller_spec.rb', File.join('spec/controllers', controller_class_path, "#{controller_file_name}_controller_spec.rb"))
74
+
75
+ m.route_resources controller_file_name
76
+
77
+ m.dependency 'rubaidh_model', [name] + @args
78
+ m.dependency 'rubaidh_helper', [plural_name] + @args
79
+ end
80
+ end
81
+
82
+ protected
83
+ def banner
84
+ "Usage: #{$0} #{spec.name} ModelName [field:type] ..."
85
+ end
86
+
87
+ def model_name
88
+ class_name.demodulize
89
+ end
90
+ end
@@ -0,0 +1,76 @@
1
+ # <%= class_name %> Controller
2
+ #
3
+ # Created on <%= Time.now.to_s :long %> by <%= user_full_name %> as part
4
+ # of the "<%= project_name %>" project.
5
+ #
6
+ #--
7
+ # Copyright (c) 2006-<%= Time.now.year %> Rubaidh Ltd. All rights reserved.
8
+ # See LICENSE in the top level source code folder for permissions.
9
+ #++
10
+
11
+ class <%= controller_class_name %>Controller < ApplicationController
12
+ def index
13
+ @<%= table_name %> = <%= class_name %>.all
14
+
15
+ respond_to do |format|
16
+ format.html # index.html.erb
17
+ end
18
+ end
19
+
20
+ def show
21
+ @<%= file_name %> = <%= class_name %>.find(params[:id])
22
+
23
+ respond_to do |format|
24
+ format.html # show.html.erb
25
+ end
26
+ end
27
+
28
+ def new
29
+ @<%= file_name %> = <%= class_name %>.new
30
+
31
+ respond_to do |format|
32
+ format.html # new.html.erb
33
+ end
34
+ end
35
+
36
+ def edit
37
+ @<%= file_name %> = <%= class_name %>.find(params[:id])
38
+
39
+ respond_to do |format|
40
+ format.html # edit.html.erb
41
+ end
42
+ end
43
+
44
+ def create
45
+ @<%= file_name %> = <%= class_name %>.new(params[:<%= file_name %>])
46
+
47
+ respond_to do |format|
48
+ if @<%= file_name %>.save
49
+ format.html { redirect_to(@<%= file_name %>) }
50
+ else
51
+ format.html { render :action => "new" }
52
+ end
53
+ end
54
+ end
55
+
56
+ def update
57
+ @<%= file_name %> = <%= class_name %>.find(params[:id])
58
+
59
+ respond_to do |format|
60
+ if @<%= file_name %>.update_attributes(params[:<%= file_name %>])
61
+ format.html { redirect_to(@<%= file_name %>) }
62
+ else
63
+ format.html { render :action => "edit" }
64
+ end
65
+ end
66
+ end
67
+
68
+ def destroy
69
+ @<%= file_name %> = <%= class_name %>.find(params[:id])
70
+ @<%= file_name %>.destroy
71
+
72
+ respond_to do |format|
73
+ format.html { redirect_to(<%= table_name %>_url) }
74
+ end
75
+ end
76
+ end
@@ -0,0 +1,251 @@
1
+ # <%= class_name %> Controller Spec
2
+ #
3
+ # Created on <%= Time.now.to_s :long %> by <%= user_full_name %> as part
4
+ # of the "<%= project_name %>" project.
5
+ #
6
+ #--
7
+ # Copyright (c) 2006-<%= Time.now.year %> Rubaidh Ltd. All rights reserved.
8
+ # See LICENSE in the top level source code folder for permissions.
9
+ #++
10
+
11
+ require File.expand_path(File.dirname(__FILE__) + '<%= '/..' * class_nesting_depth %>/../spec_helper')
12
+
13
+ describe <%= controller_class_name %>Controller do
14
+ def mock_<%= file_name %>(stubs={})
15
+ @mock_<%= file_name %> ||= mock_model(<%= class_name %>, stubs)
16
+ end
17
+
18
+ describe "responding to GET index" do
19
+ before(:each) do
20
+ @<%= table_name %> = [mock_<%= file_name %>]
21
+ <%= class_name %>.stub!(:find).and_return(@<%= table_name %>)
22
+ end
23
+
24
+ def do_get
25
+ get :index
26
+ end
27
+
28
+ it "should be successful" do
29
+ do_get
30
+ response.should be_success
31
+ end
32
+
33
+ it "should render the index template" do
34
+ do_get
35
+ response.should render_template(:index)
36
+ end
37
+
38
+ it "should query the model for a list of <%= table_name %>" do
39
+ <%= class_name %>.should_receive(:find).with(:all).and_return([mock_<%= file_name %>])
40
+ do_get
41
+ end
42
+
43
+ it "should expose all <%= table_name %> as @<%= table_name %>" do
44
+ do_get
45
+ assigns[:<%= table_name %>].should == [mock_<%= file_name %>]
46
+ end
47
+ end
48
+
49
+ describe "responding to GET show" do
50
+ before(:each) do
51
+ <%= class_name %>.stub!(:find).and_return(mock_<%= file_name %>)
52
+ end
53
+
54
+ def do_get
55
+ get :show, :id => "37"
56
+ end
57
+
58
+ it "should be successful" do
59
+ do_get
60
+ response.should be_success
61
+ end
62
+
63
+ it "should render the show template" do
64
+ do_get
65
+ response.should render_template(:show)
66
+ end
67
+
68
+ it "should query the model for the requested <%= file_name %>" do
69
+ <%= class_name %>.should_receive(:find).with("37").and_return(mock_<%= file_name %>)
70
+ do_get
71
+ end
72
+
73
+ it "should expose the requested <%= file_name %> as @<%= file_name %>" do
74
+ do_get
75
+ assigns[:<%= file_name %>].should equal(mock_<%= file_name %>)
76
+ end
77
+ end
78
+
79
+ describe "responding to GET new" do
80
+ before(:each) do
81
+ <%= class_name %>.stub!(:new).and_return(mock_<%= file_name %>)
82
+ end
83
+
84
+ def do_get
85
+ get :new
86
+ end
87
+
88
+ it "should ask the model for a new <%= file_name %>" do
89
+ <%= class_name %>.should_receive(:new).and_return(mock_<%= file_name %>)
90
+ do_get
91
+ end
92
+
93
+ it "should expose a new <%= file_name %> as @<%= file_name %>" do
94
+ do_get
95
+ assigns[:<%= file_name %>].should equal(mock_<%= file_name %>)
96
+ end
97
+ end
98
+
99
+ describe "responding to GET edit" do
100
+ before(:each) do
101
+ <%= class_name %>.stub!(:find).and_return(mock_<%= file_name %>)
102
+ end
103
+
104
+ def do_get
105
+ get :edit, :id => "37"
106
+ end
107
+
108
+ it "should be successful" do
109
+ do_get
110
+ response.should be_success
111
+ end
112
+
113
+ it "should render the edit template" do
114
+ do_get
115
+ response.should render_template(:edit)
116
+ end
117
+
118
+ it "should query the model for the requested <%= file_name %>" do
119
+ <%= class_name %>.should_receive(:find).with("37").and_return(mock_<%= file_name %>)
120
+ do_get
121
+ end
122
+
123
+ it "should expose the requested <%= file_name %> as @<%= file_name %>" do
124
+ do_get
125
+ assigns[:<%= file_name %>].should equal(mock_<%= file_name %>)
126
+ end
127
+ end
128
+
129
+ describe "responding to POST create" do
130
+ before(:each) do
131
+ <%= class_name %>.stub!(:new).and_return(mock_<%= file_name %>)
132
+ mock_<%= file_name %>.stub!(:save)
133
+ end
134
+
135
+ def do_post
136
+ post :create, :<%= file_name %> => { "dummy" => "parameters" }
137
+ end
138
+
139
+ it "should build a new <%= file_name %> with the supplied parameters" do
140
+ <%= class_name %>.should_receive(:new).with({ "dummy" => "parameters" })
141
+ do_post
142
+ end
143
+
144
+ it "should attempt to save the new <%= file_name %>" do
145
+ mock_<%= file_name %>.should_receive(:save)
146
+ do_post
147
+ end
148
+
149
+ describe "with valid params" do
150
+ before(:each) do
151
+ mock_<%= file_name %>.stub!(:save).and_return(true)
152
+ end
153
+
154
+ it "should redirect to the created <%= file_name %>" do
155
+ do_post
156
+ response.should redirect_to(<%= file_name %>_url(mock_<%= file_name %>))
157
+ end
158
+ end
159
+
160
+ describe "with invalid params" do
161
+ before(:each) do
162
+ mock_<%= file_name %>.stub!(:save).and_return(false)
163
+ end
164
+
165
+ it "should expose a newly created but unsaved <%= file_name %> as @<%= file_name %>" do
166
+ do_post
167
+ assigns(:<%= file_name %>).should equal(mock_<%= file_name %>)
168
+ end
169
+
170
+ it "should re-render the 'new' template" do
171
+ do_post
172
+ response.should render_template(:new)
173
+ end
174
+ end
175
+ end
176
+
177
+ describe "responding to PUT udpate" do
178
+ before(:each) do
179
+ <%= class_name %>.stub!(:find).and_return(mock_<%= file_name %>)
180
+ mock_<%= file_name %>.stub!(:update_attributes)
181
+ end
182
+
183
+ def do_put
184
+ put :update, :id => "37", :<%= file_name %> => { "dummy" => "parameters" }
185
+ end
186
+
187
+ it "should query the model for the requested <%= file_name %>" do
188
+ <%= class_name %>.should_receive(:find).with("37").and_return(mock_<%= file_name %>)
189
+ do_put
190
+ end
191
+
192
+ it "should attempt to update the attributes of the requested <%= file_name %>" do
193
+ mock_<%= file_name %>.should_receive(:update_attributes).with({ "dummy" => "parameters" })
194
+ do_put
195
+ end
196
+
197
+ describe "with valid params" do
198
+ before(:each) do
199
+ mock_<%= file_name %>.stub!(:update_attributes).and_return(true)
200
+ end
201
+
202
+ it "should redirect to the <%= file_name %>" do
203
+ do_put
204
+ response.should redirect_to(<%= file_name %>_url(mock_<%= file_name %>))
205
+ end
206
+ end
207
+
208
+ describe "with invalid params" do
209
+ before(:each) do
210
+ mock_<%= file_name %>.stub!(:update_attributes).and_return(false)
211
+ end
212
+
213
+ it "should expose the <%= file_name %> as @<%= file_name %>" do
214
+ do_put
215
+ assigns(:<%= file_name %>).should equal(mock_<%= file_name %>)
216
+ end
217
+
218
+ it "should re-render the 'edit' template" do
219
+ do_put
220
+ response.should render_template(:edit)
221
+ end
222
+ end
223
+
224
+ end
225
+
226
+ describe "responding to DELETE destroy" do
227
+ before(:each) do
228
+ <%= class_name %>.stub!(:find).and_return(mock_<%= file_name %>)
229
+ mock_<%= file_name %>.stub!(:destroy)
230
+ end
231
+
232
+ def do_delete(params = {})
233
+ delete :destroy, { :id => "37" }.merge(params)
234
+ end
235
+
236
+ it "should query the model for the requested <%= file_name %>" do
237
+ <%= class_name %>.should_receive(:find).with("37").and_return(mock_<%= file_name %>)
238
+ do_delete
239
+ end
240
+
241
+ it "should destroy the requested <%= file_name %>" do
242
+ mock_<%= file_name %>.should_receive(:destroy)
243
+ do_delete
244
+ end
245
+
246
+ it "should redirect to the <%= table_name %> index action" do
247
+ do_delete
248
+ response.should redirect_to(<%= table_name %>_url)
249
+ end
250
+ end
251
+ end