view_mapper 0.1.0

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