view_mapper 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (59) hide show
  1. data/.document +5 -0
  2. data/.gitignore +5 -0
  3. data/LICENSE +20 -0
  4. data/README +116 -0
  5. data/Rakefile +57 -0
  6. data/VERSION +1 -0
  7. data/generators/scaffold_for_view/USAGE +1 -0
  8. data/generators/scaffold_for_view/scaffold_for_view_generator.rb +37 -0
  9. data/generators/view_for/USAGE +1 -0
  10. data/generators/view_for/view_for_generator.rb +85 -0
  11. data/lib/view_mapper/auto_complete_templates/controller.rb +88 -0
  12. data/lib/view_mapper/auto_complete_templates/functional_test.rb +45 -0
  13. data/lib/view_mapper/auto_complete_templates/helper.rb +2 -0
  14. data/lib/view_mapper/auto_complete_templates/helper_test.rb +4 -0
  15. data/lib/view_mapper/auto_complete_templates/layout.html.erb +18 -0
  16. data/lib/view_mapper/auto_complete_templates/style.css +54 -0
  17. data/lib/view_mapper/auto_complete_templates/view_edit.html.erb +21 -0
  18. data/lib/view_mapper/auto_complete_templates/view_index.html.erb +24 -0
  19. data/lib/view_mapper/auto_complete_templates/view_new.html.erb +20 -0
  20. data/lib/view_mapper/auto_complete_templates/view_show.html.erb +10 -0
  21. data/lib/view_mapper/auto_complete_view.rb +44 -0
  22. data/lib/view_mapper/editable_manifest.rb +10 -0
  23. data/lib/view_mapper/route_action.rb +32 -0
  24. data/lib/view_mapper/view_mapper.rb +33 -0
  25. data/lib/view_mapper.rb +4 -0
  26. data/test/auto_complete_test.rb +146 -0
  27. data/test/database.yml +3 -0
  28. data/test/editable_manifest_test.rb +32 -0
  29. data/test/expected_templates/auto_complete/edit.html.erb +23 -0
  30. data/test/expected_templates/auto_complete/expected_routes.rb +45 -0
  31. data/test/expected_templates/auto_complete/index.html.erb +24 -0
  32. data/test/expected_templates/auto_complete/new.html.erb +22 -0
  33. data/test/expected_templates/auto_complete/show.html.erb +18 -0
  34. data/test/expected_templates/auto_complete/standard_routes.rb +43 -0
  35. data/test/expected_templates/auto_complete/testies.html.erb +18 -0
  36. data/test/expected_templates/auto_complete/testies_controller.rb +88 -0
  37. data/test/fake/fake_generator.rb +3 -0
  38. data/test/fake_view.rb +7 -0
  39. data/test/rails_generator/base.rb +266 -0
  40. data/test/rails_generator/commands.rb +621 -0
  41. data/test/rails_generator/generated_attribute.rb +46 -0
  42. data/test/rails_generator/generators/components/scaffold/scaffold_generator.rb +102 -0
  43. data/test/rails_generator/lookup.rb +249 -0
  44. data/test/rails_generator/manifest.rb +53 -0
  45. data/test/rails_generator/options.rb +150 -0
  46. data/test/rails_generator/scripts/destroy.rb +29 -0
  47. data/test/rails_generator/scripts/generate.rb +7 -0
  48. data/test/rails_generator/scripts/update.rb +12 -0
  49. data/test/rails_generator/scripts.rb +89 -0
  50. data/test/rails_generator/secret_key_generator.rb +24 -0
  51. data/test/rails_generator/simple_logger.rb +46 -0
  52. data/test/rails_generator/spec.rb +44 -0
  53. data/test/rails_generator.rb +43 -0
  54. data/test/scaffold_for_view_generator_test.rb +77 -0
  55. data/test/test_helper.rb +43 -0
  56. data/test/view_for_generator_test.rb +93 -0
  57. data/test/view_mapper_test.rb +29 -0
  58. data/view_mapper.gemspec +125 -0
  59. metadata +147 -0
@@ -0,0 +1,10 @@
1
+ class EditableManifest < Rails::Generator::Manifest
2
+
3
+ def edit
4
+ @actions = @actions.collect do |action|
5
+ yield action
6
+ end.compact
7
+ return self
8
+ end
9
+
10
+ end
@@ -0,0 +1,32 @@
1
+ module ViewMapper
2
+ module RouteAction
3
+
4
+ module Base
5
+ def route_code(route_options)
6
+ "map.#{route_options[:name]} '#{route_options[:path]}', :controller => '#{route_options[:controller]}', :action => '#{route_options[:action]}'"
7
+ end
8
+ def route_file
9
+ 'config/routes.rb'
10
+ end
11
+ end
12
+
13
+ module Create
14
+ def route(route_options)
15
+ sentinel = 'ActionController::Routing::Routes.draw do |map|'
16
+ logger.route route_code(route_options)
17
+ gsub_file route_file, /(#{Regexp.escape(sentinel)})/mi do |m|
18
+ "#{m}\n #{route_code(route_options)}\n"
19
+ end
20
+ end
21
+ end
22
+
23
+ module Destroy
24
+ def route(route_options)
25
+ logger.remove_route route_code(route_options)
26
+ to_remove = "\n #{route_code(route_options)}"
27
+ gsub_file route_file, /(#{to_remove})/mi, ''
28
+ end
29
+ end
30
+
31
+ end
32
+ end
@@ -0,0 +1,33 @@
1
+ module ViewMapper
2
+
3
+ def initialize(runtime_args, runtime_options = {})
4
+ Rails::Generator::Commands::Base.class_eval { include RouteAction::Base }
5
+ Rails::Generator::Commands::Create.class_eval { include RouteAction::Create }
6
+ Rails::Generator::Commands::Destroy.class_eval { include RouteAction::Destroy }
7
+ super
8
+ if options[:view]
9
+ self.extend(view_class)
10
+ @source_root = source_root_for_view
11
+ end
12
+ end
13
+
14
+ def view_class
15
+ "ViewMapper::#{view_name.camelize}View".constantize
16
+ end
17
+
18
+ def view_name
19
+ options[:view].split(':')[0]
20
+ end
21
+
22
+ def view_param
23
+ options[:view].split(':')[1]
24
+ end
25
+
26
+ def add_options!(opt)
27
+ opt.on("--view name", String, "Specify a view to generate") do |name|
28
+ options[:view] = name
29
+ end
30
+ super
31
+ end
32
+
33
+ end
@@ -0,0 +1,4 @@
1
+ require 'view_mapper/auto_complete_view'
2
+ require 'view_mapper/route_action'
3
+ require 'view_mapper/editable_manifest'
4
+ require 'view_mapper/view_mapper'
@@ -0,0 +1,146 @@
1
+ require 'test_helper'
2
+
3
+ class AutoCompleteViewTest < Test::Unit::TestCase
4
+
5
+ attr_reader :singular_name
6
+ attr_reader :plural_name
7
+ attr_reader :attributes
8
+ attr_reader :auto_complete_attribute
9
+ attr_reader :controller_class_name
10
+ attr_reader :table_name
11
+ attr_reader :class_name
12
+ attr_reader :file_name
13
+ attr_reader :controller_singular_name
14
+
15
+ def generator_cmd_line(gen, args)
16
+ if gen == 'view_for'
17
+ cmd_line = ['testy']
18
+ else
19
+ cmd_line = ['testy', 'first_name:string', 'last_name:string', 'address:string']
20
+ end
21
+ (cmd_line << args).flatten
22
+ end
23
+
24
+ def generator_script_cmd_line(gen, args)
25
+ ([gen] << generator_cmd_line(gen, args)).flatten
26
+ end
27
+
28
+ def new_generator_for_test_model(gen, args)
29
+ Rails::Generator::Base.instance(gen, generator_cmd_line(gen, args))
30
+ end
31
+
32
+ generators = %w{ view_for scaffold_for_view }
33
+ generators.each do |gen|
34
+
35
+ context "A #{gen} generator instantiated for a test model" do
36
+ should "return an error message without an auto_complete param" do
37
+ Rails::Generator::Base.logger.expects('error').with('No auto_complete attribute specified.')
38
+ new_generator_for_test_model(gen, ['--view', 'auto_complete'])
39
+ end
40
+
41
+ should "return an error message with a bad auto_complete param" do
42
+ Rails::Generator::Base.logger.expects('error').with('Field \'blah\' does not exist.')
43
+ new_generator_for_test_model(gen, ['--view', 'auto_complete:blah'])
44
+ end
45
+ end
46
+
47
+ context "A #{gen} generator instantiated for a test model with auto_complete on the first_name field" do
48
+ setup do
49
+ @gen = new_generator_for_test_model(gen, ['--view', 'auto_complete:first_name'])
50
+ end
51
+
52
+ should "find the auto complete column name" do
53
+ assert_equal 'first_name', @gen.auto_complete_attribute
54
+ end
55
+
56
+ should "have the correct auto_complete_for method name" do
57
+ assert_equal 'auto_complete_for_testy_first_name', @gen.auto_complete_for_method
58
+ end
59
+ end
60
+
61
+ context "A #{gen} generator instantiated for a test model with auto_complete on the address field" do
62
+ setup do
63
+ @gen = new_generator_for_test_model(gen, ['--view', 'auto_complete:address'])
64
+ end
65
+
66
+ should "return the proper source root folder" do
67
+ assert_equal './test/../lib/view_mapper/auto_complete_templates', @gen.source_root
68
+ end
69
+
70
+ view_for_templates = %w{ new edit index show }
71
+ view_for_templates.each do | template |
72
+ should "render the #{template} template as expected" do
73
+ @attributes = @gen.attributes
74
+ @singular_name = @gen.singular_name
75
+ @plural_name = @gen.plural_name
76
+ @auto_complete_attribute = @gen.auto_complete_attribute
77
+ template_file = File.open(File.join(File.dirname(__FILE__), "/../lib/view_mapper/auto_complete_templates/view_#{template}.html.erb"))
78
+ result = ERB.new(template_file.read, nil, '-').result(binding)
79
+ expected_file = File.open(File.join(File.dirname(__FILE__), "expected_templates/auto_complete/#{template}.html.erb"))
80
+ assert_equal expected_file.read, result
81
+ end
82
+ end
83
+
84
+ should "render the layout template as expected" do
85
+ @controller_class_name = @gen.controller_class_name
86
+ template_file = File.open(File.join(File.dirname(__FILE__), "/../lib/view_mapper/auto_complete_templates/layout.html.erb"))
87
+ result = ERB.new(template_file.read, nil, '-').result(binding)
88
+ expected_file = File.open(File.join(File.dirname(__FILE__), "expected_templates/auto_complete/testies.html.erb"))
89
+ assert_equal expected_file.read, result
90
+ end
91
+
92
+ should "render the controller template as expected" do
93
+ @controller_class_name = @gen.controller_class_name
94
+ @table_name = @gen.table_name
95
+ @class_name = @gen.class_name
96
+ @file_name = @gen.file_name
97
+ @controller_singular_name = @gen.controller_singular_name
98
+ @auto_complete_attribute = @gen.auto_complete_attribute
99
+ template_file = File.open(File.join(File.dirname(__FILE__), "/../lib/view_mapper/auto_complete_templates/controller.rb"))
100
+ result = ERB.new(template_file.read, nil, '-').result(binding)
101
+ expected_file = File.open(File.join(File.dirname(__FILE__), "expected_templates/auto_complete/testies_controller.rb"))
102
+ assert_equal expected_file.read, result
103
+ end
104
+ end
105
+
106
+ context "A Rails generator script" do
107
+ setup do
108
+ setup_test_model
109
+ @generator_script = Rails::Generator::Scripts::Generate.new
110
+ end
111
+
112
+ should "add the proper auto_complete route to routes.rb when run on the #{gen} generator with a valid auto_complete field" do
113
+ Rails::Generator::Commands::Create.any_instance.stubs(:directory)
114
+ Rails::Generator::Commands::Create.any_instance.stubs(:template)
115
+ Rails::Generator::Commands::Create.any_instance.stubs(:route_resources)
116
+ Rails::Generator::Commands::Create.any_instance.stubs(:file)
117
+ Rails::Generator::Commands::Create.any_instance.stubs(:dependency)
118
+ Rails::Generator::Base.logger.stubs(:route)
119
+
120
+ expected_path = File.dirname(__FILE__) + '/expected_templates/auto_complete'
121
+ standard_routes_file = expected_path + '/standard_routes.rb'
122
+ expected_routes_file = expected_path + '/expected_routes.rb'
123
+ test_routes_file = expected_path + '/routes.rb'
124
+ ViewForGenerator.any_instance.stubs(:destination_path).returns test_routes_file
125
+ ScaffoldForViewGenerator.any_instance.stubs(:destination_path).returns test_routes_file
126
+ File.copy(standard_routes_file, test_routes_file)
127
+ Rails::Generator::Commands::Create.any_instance.stubs(:route_file).returns(test_routes_file)
128
+ @generator_script.run(generator_script_cmd_line(gen, ['--view', 'auto_complete:address']))
129
+ assert_equal File.open(expected_routes_file).read, File.open(test_routes_file).read
130
+ File.delete(test_routes_file)
131
+ end
132
+
133
+ should "not perform any actions when run on the #{gen} generator with no auto_complete field" do
134
+ Rails::Generator::Commands::Create.any_instance.expects(:directory).never
135
+ Rails::Generator::Commands::Create.any_instance.expects(:template).never
136
+ Rails::Generator::Commands::Create.any_instance.expects(:route_resources).never
137
+ Rails::Generator::Commands::Create.any_instance.expects(:file).never
138
+ Rails::Generator::Commands::Create.any_instance.expects(:route).never
139
+ Rails::Generator::Base.logger.stubs(:error)
140
+ Rails::Generator::Base.logger.stubs(:route)
141
+ @generator_script.run(generator_script_cmd_line(gen, ['--view', 'auto_complete']))
142
+ end
143
+ end
144
+ end
145
+
146
+ end
data/test/database.yml ADDED
@@ -0,0 +1,3 @@
1
+ test:
2
+ adapter: sqlite3
3
+ database: ":memory:"
@@ -0,0 +1,32 @@
1
+ require 'test_helper'
2
+
3
+ class EditableManifestTest < Test::Unit::TestCase
4
+
5
+ def record
6
+ EditableManifest.new(self) { |m| yield m }
7
+ end
8
+
9
+ def action(param)
10
+ @actions_received << param
11
+ end
12
+
13
+ context "An editable manifest with a couple of recorded actions" do
14
+ setup do
15
+ @actions_received = []
16
+ @man = record do |m|
17
+ m.action('one')
18
+ m.action('two')
19
+ end
20
+ end
21
+
22
+ should "allow me to delete an action" do
23
+ @man.edit do |action|
24
+ action unless action[1].include? 'one'
25
+ end
26
+ @man.replay(self)
27
+ assert_does_not_contain @actions_received, 'one'
28
+ assert_contains @actions_received, 'two'
29
+ end
30
+
31
+ end
32
+ end
@@ -0,0 +1,23 @@
1
+ <h1>Editing testy</h1>
2
+
3
+ <% form_for(@testy) do |f| %>
4
+ <%= f.error_messages %>
5
+ <p>
6
+ <%= f.label :first_name %><br />
7
+ <%= f.text_field :first_name %>
8
+ </p>
9
+ <p>
10
+ <%= f.label :last_name %><br />
11
+ <%= f.text_field :last_name %>
12
+ </p>
13
+ <p>
14
+ <%= f.label :address %><br />
15
+ <%= text_field_with_auto_complete :testy, :address, {}, { :method => :get } %>
16
+ </p>
17
+ <p>
18
+ <%= f.submit 'Update' %>
19
+ </p>
20
+ <% end %>
21
+
22
+ <%= link_to 'Show', @testy %> |
23
+ <%= link_to 'Back', testies_path %>
@@ -0,0 +1,45 @@
1
+ ActionController::Routing::Routes.draw do |map|
2
+ map.connect 'auto_complete_for_testy_address', :controller => 'testies', :action => 'auto_complete_for_testy_address'
3
+
4
+ # The priority is based upon order of creation: first created -> highest priority.
5
+
6
+ # Sample of regular route:
7
+ # map.connect 'products/:id', :controller => 'catalog', :action => 'view'
8
+ # Keep in mind you can assign values other than :controller and :action
9
+
10
+ # Sample of named route:
11
+ # map.purchase 'products/:id/purchase', :controller => 'catalog', :action => 'purchase'
12
+ # This route can be invoked with purchase_url(:id => product.id)
13
+
14
+ # Sample resource route (maps HTTP verbs to controller actions automatically):
15
+ # map.resources :products
16
+
17
+ # Sample resource route with options:
18
+ # map.resources :products, :member => { :short => :get, :toggle => :post }, :collection => { :sold => :get }
19
+
20
+ # Sample resource route with sub-resources:
21
+ # map.resources :products, :has_many => [ :comments, :sales ], :has_one => :seller
22
+
23
+ # Sample resource route with more complex sub-resources
24
+ # map.resources :products do |products|
25
+ # products.resources :comments
26
+ # products.resources :sales, :collection => { :recent => :get }
27
+ # end
28
+
29
+ # Sample resource route within a namespace:
30
+ # map.namespace :admin do |admin|
31
+ # # Directs /admin/products/* to Admin::ProductsController (app/controllers/admin/products_controller.rb)
32
+ # admin.resources :products
33
+ # end
34
+
35
+ # You can have the root of your site routed with map.root -- just remember to delete public/index.html.
36
+ # map.root :controller => "welcome"
37
+
38
+ # See how all your routes lay out with "rake routes"
39
+
40
+ # Install the default routes as the lowest priority.
41
+ # Note: These default routes make all actions in every controller accessible via GET requests. You should
42
+ # consider removing the them or commenting them out if you're using named routes and resources.
43
+ map.connect ':controller/:action/:id'
44
+ map.connect ':controller/:action/:id.:format'
45
+ end
@@ -0,0 +1,24 @@
1
+ <h1>Listing testies</h1>
2
+
3
+ <table>
4
+ <tr>
5
+ <th>First name</th>
6
+ <th>Last name</th>
7
+ <th>Address</th>
8
+ </tr>
9
+
10
+ <% @testies.each do |testy| %>
11
+ <tr>
12
+ <td><%=h testy.first_name %></td>
13
+ <td><%=h testy.last_name %></td>
14
+ <td><%=h testy.address %></td>
15
+ <td><%= link_to 'Show', testy %></td>
16
+ <td><%= link_to 'Edit', edit_testy_path(testy) %></td>
17
+ <td><%= link_to 'Destroy', testy, :confirm => 'Are you sure?', :method => :delete %></td>
18
+ </tr>
19
+ <% end %>
20
+ </table>
21
+
22
+ <br />
23
+
24
+ <%= link_to 'New testy', new_testy_path %>
@@ -0,0 +1,22 @@
1
+ <h1>New testy</h1>
2
+
3
+ <% form_for(@testy) do |f| %>
4
+ <%= f.error_messages %>
5
+ <p>
6
+ <%= f.label :first_name %><br />
7
+ <%= f.text_field :first_name %>
8
+ </p>
9
+ <p>
10
+ <%= f.label :last_name %><br />
11
+ <%= f.text_field :last_name %>
12
+ </p>
13
+ <p>
14
+ <%= f.label :address %><br />
15
+ <%= text_field_with_auto_complete :testy, :address, {}, { :method => :get } %>
16
+ </p>
17
+ <p>
18
+ <%= f.submit 'Create' %>
19
+ </p>
20
+ <% end %>
21
+
22
+ <%= link_to 'Back', testies_path %>
@@ -0,0 +1,18 @@
1
+ <p>
2
+ <b>First name:</b>
3
+ <%=h @testy.first_name %>
4
+ </p>
5
+
6
+ <p>
7
+ <b>Last name:</b>
8
+ <%=h @testy.last_name %>
9
+ </p>
10
+
11
+ <p>
12
+ <b>Address:</b>
13
+ <%=h @testy.address %>
14
+ </p>
15
+
16
+
17
+ <%= link_to 'Edit', edit_testy_path(@testy) %> |
18
+ <%= link_to 'Back', testies_path %>
@@ -0,0 +1,43 @@
1
+ ActionController::Routing::Routes.draw do |map|
2
+ # The priority is based upon order of creation: first created -> highest priority.
3
+
4
+ # Sample of regular route:
5
+ # map.connect 'products/:id', :controller => 'catalog', :action => 'view'
6
+ # Keep in mind you can assign values other than :controller and :action
7
+
8
+ # Sample of named route:
9
+ # map.purchase 'products/:id/purchase', :controller => 'catalog', :action => 'purchase'
10
+ # This route can be invoked with purchase_url(:id => product.id)
11
+
12
+ # Sample resource route (maps HTTP verbs to controller actions automatically):
13
+ # map.resources :products
14
+
15
+ # Sample resource route with options:
16
+ # map.resources :products, :member => { :short => :get, :toggle => :post }, :collection => { :sold => :get }
17
+
18
+ # Sample resource route with sub-resources:
19
+ # map.resources :products, :has_many => [ :comments, :sales ], :has_one => :seller
20
+
21
+ # Sample resource route with more complex sub-resources
22
+ # map.resources :products do |products|
23
+ # products.resources :comments
24
+ # products.resources :sales, :collection => { :recent => :get }
25
+ # end
26
+
27
+ # Sample resource route within a namespace:
28
+ # map.namespace :admin do |admin|
29
+ # # Directs /admin/products/* to Admin::ProductsController (app/controllers/admin/products_controller.rb)
30
+ # admin.resources :products
31
+ # end
32
+
33
+ # You can have the root of your site routed with map.root -- just remember to delete public/index.html.
34
+ # map.root :controller => "welcome"
35
+
36
+ # See how all your routes lay out with "rake routes"
37
+
38
+ # Install the default routes as the lowest priority.
39
+ # Note: These default routes make all actions in every controller accessible via GET requests. You should
40
+ # consider removing the them or commenting them out if you're using named routes and resources.
41
+ map.connect ':controller/:action/:id'
42
+ map.connect ':controller/:action/:id.:format'
43
+ end
@@ -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>Testies: <%= controller.action_name %></title>
8
+ <%= stylesheet_link_tag 'scaffold' %>
9
+ <%= javascript_include_tag :defaults %>
10
+ </head>
11
+ <body>
12
+
13
+ <p style="color: green"><%= flash[:notice] %></p>
14
+
15
+ <%= yield %>
16
+
17
+ </body>
18
+ </html>
@@ -0,0 +1,88 @@
1
+ class TestiesController < ApplicationController
2
+
3
+ auto_complete_for :testy, :address
4
+
5
+ # GET /testies
6
+ # GET /testies.xml
7
+ def index
8
+ @testies = Testy.all
9
+
10
+ respond_to do |format|
11
+ format.html # index.html.erb
12
+ format.xml { render :xml => @testies }
13
+ end
14
+ end
15
+
16
+ # GET /testies/1
17
+ # GET /testies/1.xml
18
+ def show
19
+ @testy = Testy.find(params[:id])
20
+
21
+ respond_to do |format|
22
+ format.html # show.html.erb
23
+ format.xml { render :xml => @testy }
24
+ end
25
+ end
26
+
27
+ # GET /testies/new
28
+ # GET /testies/new.xml
29
+ def new
30
+ @testy = Testy.new
31
+
32
+ respond_to do |format|
33
+ format.html # new.html.erb
34
+ format.xml { render :xml => @testy }
35
+ end
36
+ end
37
+
38
+ # GET /testies/1/edit
39
+ def edit
40
+ @testy = Testy.find(params[:id])
41
+ end
42
+
43
+ # POST /testies
44
+ # POST /testies.xml
45
+ def create
46
+ @testy = Testy.new(params[:testy])
47
+
48
+ respond_to do |format|
49
+ if @testy.save
50
+ flash[:notice] = 'Testy was successfully created.'
51
+ format.html { redirect_to(@testy) }
52
+ format.xml { render :xml => @testy, :status => :created, :location => @testy }
53
+ else
54
+ format.html { render :action => "new" }
55
+ format.xml { render :xml => @testy.errors, :status => :unprocessable_entity }
56
+ end
57
+ end
58
+ end
59
+
60
+ # PUT /testies/1
61
+ # PUT /testies/1.xml
62
+ def update
63
+ @testy = Testy.find(params[:id])
64
+
65
+ respond_to do |format|
66
+ if @testy.update_attributes(params[:testy])
67
+ flash[:notice] = 'Testy was successfully updated.'
68
+ format.html { redirect_to(@testy) }
69
+ format.xml { head :ok }
70
+ else
71
+ format.html { render :action => "edit" }
72
+ format.xml { render :xml => @testy.errors, :status => :unprocessable_entity }
73
+ end
74
+ end
75
+ end
76
+
77
+ # DELETE /testies/1
78
+ # DELETE /testies/1.xml
79
+ def destroy
80
+ @testy = Testy.find(params[:id])
81
+ @testy.destroy
82
+
83
+ respond_to do |format|
84
+ format.html { redirect_to(testies_url) }
85
+ format.xml { head :ok }
86
+ end
87
+ end
88
+ end
@@ -0,0 +1,3 @@
1
+ class FakeGenerator < ScaffoldGenerator
2
+ include ViewMapper
3
+ end
data/test/fake_view.rb ADDED
@@ -0,0 +1,7 @@
1
+ module ViewMapper
2
+ module FakeView
3
+ def source_root_for_view
4
+ '/some/path/templates'
5
+ end
6
+ end
7
+ end