view_mapper 0.3.3 → 0.3.4

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 (81) hide show
  1. data/README.rdoc +3 -1
  2. data/VERSION +1 -1
  3. data/lib/view_mapper.rb +1 -0
  4. data/lib/view_mapper/belongs_to_parent_models.rb +12 -26
  5. data/lib/view_mapper/has_many_child_models.rb +9 -9
  6. data/lib/view_mapper/model_info.rb +56 -18
  7. data/lib/view_mapper/views/belongs_to/belongs_to_view.rb +14 -0
  8. data/lib/view_mapper/views/belongs_to_auto_complete/belongs_to_auto_complete_view.rb +9 -2
  9. data/lib/view_mapper/views/has_many/templates/helper.rb +1 -1
  10. data/lib/view_mapper/views/has_many/templates/view_child_form.html.erb +1 -1
  11. data/lib/view_mapper/views/has_many/templates/view_form.html.erb +1 -1
  12. data/lib/view_mapper/views/has_many_existing/has_many_existing_view.rb +126 -0
  13. data/lib/view_mapper/views/has_many_existing/templates/model.rb +21 -0
  14. data/lib/view_mapper/views/has_many_existing/templates/view_child_form.html.erb +16 -0
  15. data/lib/view_mapper/views/has_many_existing/templates/view_form.html.erb +20 -0
  16. data/lib/view_mapper/views/has_many_existing/templates/view_show.html.erb +26 -0
  17. data/test/generators/scaffold_for_view/scaffold_for_view_generator_test.rb +15 -15
  18. data/test/generators/view_for/view_for_generator_test.rb +18 -18
  19. data/test/model_info_test.rb +91 -20
  20. data/test/test_helper.rb +75 -105
  21. data/test/views/auto_complete/auto_complete_test.rb +104 -102
  22. data/test/views/auto_complete/expected_templates/edit.html.erb +6 -6
  23. data/test/views/auto_complete/expected_templates/expected_routes.rb +1 -1
  24. data/test/views/auto_complete/expected_templates/index.html.erb +10 -10
  25. data/test/views/auto_complete/expected_templates/new.html.erb +5 -5
  26. data/test/views/auto_complete/expected_templates/show.html.erb +6 -6
  27. data/test/views/auto_complete/expected_templates/{testies.html.erb → test_models.html.erb} +1 -1
  28. data/test/views/auto_complete/expected_templates/test_models_controller.rb +89 -0
  29. data/test/views/belongs_to/belongs_to_test.rb +238 -202
  30. data/test/views/belongs_to/expected_templates/_form.html.erb +4 -4
  31. data/test/views/belongs_to/expected_templates/child_model.rb +10 -0
  32. data/test/views/belongs_to/expected_templates/create_child_models.rb +18 -0
  33. data/test/views/belongs_to/expected_templates/edit.html.erb +4 -4
  34. data/test/views/belongs_to/expected_templates/index.html.erb +11 -11
  35. data/test/views/belongs_to/expected_templates/new.html.erb +3 -3
  36. data/test/views/belongs_to/expected_templates/show.html.erb +7 -7
  37. data/test/views/belongs_to_auto_complete/belongs_to_auto_complete_test.rb +440 -406
  38. data/test/views/belongs_to_auto_complete/expected_templates/_form.html.erb +4 -4
  39. data/test/views/belongs_to_auto_complete/expected_templates/child_model.rb +16 -0
  40. data/test/views/belongs_to_auto_complete/expected_templates/{some_other_models.html.erb → child_models.html.erb} +1 -1
  41. data/test/views/belongs_to_auto_complete/expected_templates/child_models_controller.rb +89 -0
  42. data/test/views/belongs_to_auto_complete/expected_templates/create_child_models.rb +18 -0
  43. data/test/views/belongs_to_auto_complete/expected_templates/edit.html.erb +4 -4
  44. data/test/views/belongs_to_auto_complete/expected_templates/expected_routes.rb +2 -2
  45. data/test/views/belongs_to_auto_complete/expected_templates/index.html.erb +11 -11
  46. data/test/views/belongs_to_auto_complete/expected_templates/new.html.erb +3 -3
  47. data/test/views/belongs_to_auto_complete/expected_templates/show.html.erb +7 -7
  48. data/test/views/has_many/expected_templates/_form.html.erb +8 -8
  49. data/test/views/has_many/expected_templates/{_person.html.erb → _second_child_model.html.erb} +5 -5
  50. data/test/views/has_many/expected_templates/create_parent_models.rb +16 -0
  51. data/test/views/has_many/expected_templates/edit.html.erb +4 -4
  52. data/test/views/has_many/expected_templates/index.html.erb +7 -7
  53. data/test/views/has_many/expected_templates/new.html.erb +3 -3
  54. data/test/views/has_many/expected_templates/{parent.rb → parent_model.rb} +5 -5
  55. data/test/views/has_many/expected_templates/show.html.erb +15 -15
  56. data/test/views/has_many/has_many_view_test.rb +334 -292
  57. data/test/views/has_many_existing/expected_templates/_assignment.html.erb +14 -0
  58. data/test/views/has_many_existing/expected_templates/_form.html.erb +16 -0
  59. data/test/views/{has_many/expected_templates/create_parents.rb → has_many_existing/expected_templates/create_programmers.rb} +3 -3
  60. data/test/views/has_many_existing/expected_templates/edit.html.erb +11 -0
  61. data/test/views/has_many_existing/expected_templates/index.html.erb +20 -0
  62. data/test/views/has_many_existing/expected_templates/new.html.erb +10 -0
  63. data/test/views/has_many_existing/expected_templates/programmer.rb +10 -0
  64. data/test/views/has_many_existing/expected_templates/show.html.erb +20 -0
  65. data/test/views/has_many_existing/has_many_existing_test.rb +495 -0
  66. data/test/views/paperclip/expected_templates/{create_testies.rb → create_test_models.rb} +3 -3
  67. data/test/views/paperclip/expected_templates/edit.html.erb +4 -4
  68. data/test/views/paperclip/expected_templates/index.html.erb +10 -10
  69. data/test/views/paperclip/expected_templates/new.html.erb +3 -3
  70. data/test/views/paperclip/expected_templates/show.html.erb +8 -8
  71. data/test/views/paperclip/expected_templates/{testy.rb → test_model.rb} +1 -1
  72. data/test/views/paperclip/paperclip_view_test.rb +254 -226
  73. data/view_mapper.gemspec +43 -27
  74. metadata +64 -37
  75. data/test/views/auto_complete/expected_templates/actual_index +0 -26
  76. data/test/views/auto_complete/expected_templates/testies_controller.rb +0 -89
  77. data/test/views/belongs_to/expected_templates/create_some_other_models.rb +0 -18
  78. data/test/views/belongs_to/expected_templates/some_other_model.rb +0 -10
  79. data/test/views/belongs_to_auto_complete/expected_templates/create_some_other_models.rb +0 -18
  80. data/test/views/belongs_to_auto_complete/expected_templates/some_other_model.rb +0 -16
  81. data/test/views/belongs_to_auto_complete/expected_templates/some_other_models_controller.rb +0 -89
@@ -1,6 +1,6 @@
1
- class CreateTesties < ActiveRecord::Migration
1
+ class CreateTestModels < ActiveRecord::Migration
2
2
  def self.up
3
- create_table :testies do |t|
3
+ create_table :test_models do |t|
4
4
  t.string :first_name
5
5
  t.string :last_name
6
6
  t.string :address
@@ -19,6 +19,6 @@ class CreateTesties < ActiveRecord::Migration
19
19
  end
20
20
 
21
21
  def self.down
22
- drop_table :testies
22
+ drop_table :test_models
23
23
  end
24
24
  end
@@ -1,6 +1,6 @@
1
- <h1>Editing testy</h1>
1
+ <h1>Editing test_model</h1>
2
2
 
3
- <% form_for(@testy, :html => { :multipart => true }) do |f| %>
3
+ <% form_for(@test_model, :html => { :multipart => true }) do |f| %>
4
4
  <%= f.error_messages %>
5
5
  <p>
6
6
  <%= f.label :first_name %><br />
@@ -31,5 +31,5 @@
31
31
  </p>
32
32
  <% end %>
33
33
 
34
- <%= link_to 'Show', @testy %> |
35
- <%= link_to 'Back', testies_path %>
34
+ <%= link_to 'Show', @test_model %> |
35
+ <%= link_to 'Back', test_models_path %>
@@ -1,4 +1,4 @@
1
- <h1>Listing testies</h1>
1
+ <h1>Listing test_models</h1>
2
2
 
3
3
  <table>
4
4
  <tr>
@@ -8,19 +8,19 @@
8
8
  <th>Some flag</th>
9
9
  </tr>
10
10
 
11
- <% @testies.each do |testy| %>
11
+ <% @test_models.each do |test_model| %>
12
12
  <tr>
13
- <td><%=h testy.first_name %></td>
14
- <td><%=h testy.last_name %></td>
15
- <td><%=h testy.address %></td>
16
- <td><%=h testy.some_flag %></td>
17
- <td><%= link_to 'Show', testy %></td>
18
- <td><%= link_to 'Edit', edit_testy_path(testy) %></td>
19
- <td><%= link_to 'Destroy', testy, :confirm => 'Are you sure?', :method => :delete %></td>
13
+ <td><%=h test_model.first_name %></td>
14
+ <td><%=h test_model.last_name %></td>
15
+ <td><%=h test_model.address %></td>
16
+ <td><%=h test_model.some_flag %></td>
17
+ <td><%= link_to 'Show', test_model %></td>
18
+ <td><%= link_to 'Edit', edit_test_model_path(test_model) %></td>
19
+ <td><%= link_to 'Destroy', test_model, :confirm => 'Are you sure?', :method => :delete %></td>
20
20
  </tr>
21
21
  <% end %>
22
22
  </table>
23
23
 
24
24
  <br />
25
25
 
26
- <%= link_to 'New testy', new_testy_path %>
26
+ <%= link_to 'New test_model', new_test_model_path %>
@@ -1,6 +1,6 @@
1
- <h1>New testy</h1>
1
+ <h1>New test_model</h1>
2
2
 
3
- <% form_for(@testy, :html => { :multipart => true }) do |f| %>
3
+ <% form_for(@test_model, :html => { :multipart => true }) do |f| %>
4
4
  <%= f.error_messages %>
5
5
  <p>
6
6
  <%= f.label :first_name %><br />
@@ -31,4 +31,4 @@
31
31
  </p>
32
32
  <% end %>
33
33
 
34
- <%= link_to 'Back', testies_path %>
34
+ <%= link_to 'Back', test_models_path %>
@@ -1,33 +1,33 @@
1
1
  <p>
2
2
  <b>First name:</b>
3
- <%=h @testy.first_name %>
3
+ <%=h @test_model.first_name %>
4
4
  </p>
5
5
 
6
6
  <p>
7
7
  <b>Last name:</b>
8
- <%=h @testy.last_name %>
8
+ <%=h @test_model.last_name %>
9
9
  </p>
10
10
 
11
11
  <p>
12
12
  <b>Address:</b>
13
- <%=h @testy.address %>
13
+ <%=h @test_model.address %>
14
14
  </p>
15
15
 
16
16
  <p>
17
17
  <b>Some flag:</b>
18
- <%=h @testy.some_flag %>
18
+ <%=h @test_model.some_flag %>
19
19
  </p>
20
20
 
21
21
  <p>
22
22
  <b>Avatar:</b>
23
- <%= link_to @testy.avatar_file_name, @testy.avatar.url %><br>
23
+ <%= link_to @test_model.avatar_file_name, @test_model.avatar.url %><br>
24
24
  </p>
25
25
 
26
26
  <p>
27
27
  <b>Avatar2:</b>
28
- <%= link_to @testy.avatar2_file_name, @testy.avatar2.url %><br>
28
+ <%= link_to @test_model.avatar2_file_name, @test_model.avatar2.url %><br>
29
29
  </p>
30
30
 
31
31
 
32
- <%= link_to 'Edit', edit_testy_path(@testy) %> |
33
- <%= link_to 'Back', testies_path %>
32
+ <%= link_to 'Edit', edit_test_model_path(@test_model) %> |
33
+ <%= link_to 'Back', test_models_path %>
@@ -1,4 +1,4 @@
1
- class Testy < ActiveRecord::Base
1
+ class TestModel < ActiveRecord::Base
2
2
  has_attached_file :avatar
3
3
  has_attached_file :avatar2
4
4
  end
@@ -11,274 +11,302 @@ class PaperclipViewTest < Test::Unit::TestCase
11
11
  attr_reader :table_name
12
12
  attr_reader :options
13
13
 
14
- context "A view_for generator instantiated for a test model" do
14
+ context "When the paperclip plugin is installed and there's a model with paperclip attachments" do
15
15
  setup do
16
- setup_test_model(true)
16
+ ActiveRecord::Base.send(:include, MockPaperclip)
17
+ paperclip_src = <<SRC
18
+ def self.attachment_definitions
19
+ { :avatar => {:validations => []}, :avatar2 => {:validations => []} }
20
+ end
21
+ SRC
22
+ ClassFactory :test_model, :class_eval => paperclip_src do |t|
23
+ t.string :first_name
24
+ t.string :last_name
25
+ t.string :address
26
+ t.boolean :some_flag
27
+ t.string :avatar_file_name
28
+ t.string :avatar_content_type
29
+ t.integer :avatar_file_size
30
+ t.string :avatar_updated_at
31
+ t.string :avatar2_file_name
32
+ t.string :avatar2_content_type
33
+ t.integer :avatar2_file_size
34
+ t.string :avatar2_updated_at
35
+ end
17
36
  end
18
37
 
19
- should "detect the existing attachments when no attachment is specified" do
20
- gen = new_generator_for_test_model('view_for', ['--view', 'paperclip'])
21
- assert_contains gen.attachments, 'avatar'
22
- assert_contains gen.attachments, 'avatar2'
23
- end
38
+ context "A view_for generator instantiated for a test model" do
24
39
 
25
- should "use the specified attachments if provided" do
26
- gen = new_generator_for_test_model('view_for', ['--view', 'paperclip:avatar'])
27
- assert_equal [ 'avatar' ], gen.attachments
28
- end
40
+ should "detect the existing attachments when no attachment is specified" do
41
+ gen = new_generator_for_test_model('view_for', ['--view', 'paperclip'])
42
+ assert_contains gen.attachments, 'avatar'
43
+ assert_contains gen.attachments, 'avatar2'
44
+ end
29
45
 
30
- should "return an error message with a bad paperclip param" do
31
- Rails::Generator::Base.logger.expects('error').with('Attachment \'blah\' does not exist.')
32
- new_generator_for_test_model('view_for', ['--view', 'paperclip:blah'])
33
- end
34
- end
46
+ should "use the specified attachments if provided" do
47
+ gen = new_generator_for_test_model('view_for', ['--view', 'paperclip:avatar'])
48
+ assert_equal [ 'avatar' ], gen.attachments
49
+ end
35
50
 
36
- context "A view_for generator instantiated for a test model missing Paperclip columns" do
37
- setup do
38
- setup_test_model(false)
51
+ should "return an error message with a bad paperclip param" do
52
+ Rails::Generator::Base.logger.expects('error').with('Attachment \'blah\' does not exist.')
53
+ new_generator_for_test_model('view_for', ['--view', 'paperclip:blah'])
54
+ end
39
55
  end
40
56
 
41
- should "return an error message with a bad paperclip param" do
42
- Rails::Generator::Base.logger.expects('error').with('Column \'avatar_file_name\' does not exist. First run script/generate paperclip testy avatar.')
43
- new_generator_for_test_model('view_for', ['--view', 'paperclip:avatar'])
44
- end
45
- end
57
+ context "A view_for generator instantiated for a test model missing Paperclip columns" do
58
+ setup do
59
+ paperclip_src = <<SRC
60
+ def self.attachment_definitions
61
+ { :avatar => {:validations => []}, :avatar2 => {:validations => []} }
62
+ end
63
+ SRC
64
+ ClassFactory :test_model, :class_eval => paperclip_src
65
+ end
46
66
 
47
- context "A test model with no attachments" do
48
- setup do
49
- setup_test_model(true)
50
- Testy.class_eval do
51
- def self.attachment_definitions
52
- {}
53
- end
67
+ should "return an error message with a bad paperclip param" do
68
+ Rails::Generator::Base.logger.expects('error').with('Column \'avatar_file_name\' does not exist. First run script/generate paperclip test_model avatar.')
69
+ new_generator_for_test_model('view_for', ['--view', 'paperclip:avatar'])
54
70
  end
55
71
  end
56
72
 
57
- teardown do
58
- Testy.class_eval do
59
- def self.attachment_definitions
60
- { :avatar => {:validations => []}, :avatar2 => {:validations => []} }
61
- end
73
+ context "A test model with no attachments" do
74
+ setup do
75
+ ClassFactory :test_model
62
76
  end
63
- end
64
77
 
65
- should "return a warning when run with view_for when no attachment exists and not run any actions" do
66
- Rails::Generator::Base.logger.expects('warning').with('No paperclip attachments exist on the specified class.')
67
- Rails::Generator::Commands::Create.any_instance.expects(:directory).never
68
- Rails::Generator::Commands::Create.any_instance.expects(:template).never
69
- Rails::Generator::Commands::Create.any_instance.expects(:route_resources).never
70
- Rails::Generator::Commands::Create.any_instance.expects(:file).never
71
- Rails::Generator::Commands::Create.any_instance.expects(:route).never
72
- Rails::Generator::Commands::Create.any_instance.expects(:dependency).never
73
- Rails::Generator::Base.logger.stubs(:error)
74
- Rails::Generator::Base.logger.stubs(:route)
75
- @generator_script = Rails::Generator::Scripts::Generate.new
76
- @generator_script.run(generator_script_cmd_line('view_for', ['--view', 'paperclip']))
77
- end
78
+ should "return a warning when run with view_for when no attachment exists and not run any actions" do
79
+ Rails::Generator::Base.logger.expects('warning').with('No paperclip attachments exist on the specified class.')
80
+ Rails::Generator::Commands::Create.any_instance.expects(:directory).never
81
+ Rails::Generator::Commands::Create.any_instance.expects(:template).never
82
+ Rails::Generator::Commands::Create.any_instance.expects(:route_resources).never
83
+ Rails::Generator::Commands::Create.any_instance.expects(:file).never
84
+ Rails::Generator::Commands::Create.any_instance.expects(:route).never
85
+ Rails::Generator::Commands::Create.any_instance.expects(:dependency).never
86
+ Rails::Generator::Base.logger.stubs(:error)
87
+ Rails::Generator::Base.logger.stubs(:route)
88
+ @generator_script = Rails::Generator::Scripts::Generate.new
89
+ @generator_script.run(generator_script_cmd_line('view_for', ['--view', 'paperclip']))
90
+ end
78
91
 
79
- should "return a warning when run with scaffold_for_view when no attachment exists and not run any actions" do
80
- Rails::Generator::Base.logger.expects('warning').with('No paperclip attachments specified.')
81
- Rails::Generator::Commands::Create.any_instance.expects(:directory).never
82
- Rails::Generator::Commands::Create.any_instance.expects(:template).never
83
- Rails::Generator::Commands::Create.any_instance.expects(:route_resources).never
84
- Rails::Generator::Commands::Create.any_instance.expects(:file).never
85
- Rails::Generator::Commands::Create.any_instance.expects(:route).never
86
- Rails::Generator::Commands::Create.any_instance.expects(:dependency).never
87
- Rails::Generator::Base.logger.stubs(:error)
88
- Rails::Generator::Base.logger.stubs(:route)
89
- @generator_script = Rails::Generator::Scripts::Generate.new
90
- @generator_script.run(generator_script_cmd_line('scaffold_for_view', ['--view', 'paperclip']))
92
+ should "return a warning when run with scaffold_for_view when no attachment exists and not run any actions" do
93
+ Rails::Generator::Base.logger.expects('warning').with('No paperclip attachments specified.')
94
+ Rails::Generator::Commands::Create.any_instance.expects(:directory).never
95
+ Rails::Generator::Commands::Create.any_instance.expects(:template).never
96
+ Rails::Generator::Commands::Create.any_instance.expects(:route_resources).never
97
+ Rails::Generator::Commands::Create.any_instance.expects(:file).never
98
+ Rails::Generator::Commands::Create.any_instance.expects(:route).never
99
+ Rails::Generator::Commands::Create.any_instance.expects(:dependency).never
100
+ Rails::Generator::Base.logger.stubs(:error)
101
+ Rails::Generator::Base.logger.stubs(:route)
102
+ @generator_script = Rails::Generator::Scripts::Generate.new
103
+ @generator_script.run(generator_script_cmd_line('scaffold_for_view', ['--view', 'paperclip']))
104
+ end
91
105
  end
92
- end
93
106
 
94
- context "A scaffold_for_view generator with no model" do
95
- setup do
96
- ActiveRecord::Base.send(:include, MockPaperclip)
97
- end
107
+ context "A scaffold_for_view generator with no model" do
98
108
 
99
- should "use the specified attachments if provided" do
100
- gen = new_generator_for_test_model('scaffold_for_view', ['--view', 'paperclip:avatar3,avatar4'])
101
- assert_contains gen.attachments, 'avatar3'
102
- assert_contains gen.attachments, 'avatar4'
103
- end
109
+ should "use the specified attachments if provided" do
110
+ gen = new_generator_for_test_model('scaffold_for_view', ['--view', 'paperclip:avatar3,avatar4'])
111
+ assert_contains gen.attachments, 'avatar3'
112
+ assert_contains gen.attachments, 'avatar4'
113
+ end
104
114
 
105
- should "not detect the existing attachments when no attachment is specified" do
106
- Rails::Generator::Base.logger.expects('warning').with('No paperclip attachments specified.')
107
- gen = new_generator_for_test_model('scaffold_for_view', ['--view', 'paperclip'])
108
- assert_equal [], gen.attachments
115
+ should "not detect the existing attachments when no attachment is specified" do
116
+ Rails::Generator::Base.logger.expects('warning').with('No paperclip attachments specified.')
117
+ gen = new_generator_for_test_model('scaffold_for_view', ['--view', 'paperclip'])
118
+ assert_equal [], gen.attachments
119
+ end
109
120
  end
110
- end
111
121
 
112
- context "A view_for gen with no model" do
113
- should "not return an error message when paperclip is installed" do
114
- Rails::Generator::Base.logger.expects('error').never
115
- ActiveRecord::Base.send(:include, MockPaperclip)
116
- new_generator_for_test_model('view_for', ['--view', 'paperclip:avatar'])
117
- end
122
+ context "A view_for generator instantiated for a test model with two attachments" do
123
+ setup do
124
+ @gen = new_generator_for_test_model('view_for', ['--view', 'paperclip'])
125
+ end
118
126
 
119
- should "return an error message when paperclip is not installed" do
120
- Rails::Generator::Base.logger.expects('error').with('The Paperclip plugin does not appear to be installed.')
121
- ActiveRecord::Base.stubs(:methods).returns([])
122
- new_generator_for_test_model('view_for', ['--view', 'paperclip:avatar'])
123
- end
124
- end
127
+ should "return the proper source root" do
128
+ assert_equal File.expand_path(File.dirname(__FILE__) + '/../../..//lib/view_mapper/views/paperclip/templates'), ViewMapper::PaperclipView.source_root
129
+ end
125
130
 
126
- context "A view_for generator instantiated for a test model with two attachments" do
127
- setup do
128
- setup_test_model(true)
129
- @gen = new_generator_for_test_model('view_for', ['--view', 'paperclip'])
130
- end
131
+ should "have the proper value for source_roots_for_view" do
132
+ assert_equal [
133
+ File.expand_path(File.dirname(__FILE__) + '/../../..//lib/view_mapper/views/paperclip/templates'),
134
+ @gen.class.lookup('scaffold').path + '/templates',
135
+ @gen.class.lookup('model').path + '/templates'
136
+ ], @gen.source_roots_for_view
137
+ end
131
138
 
132
- should "return the proper source root" do
133
- assert_equal File.expand_path(File.dirname(__FILE__) + '/../../..//lib/view_mapper/views/paperclip/templates'), ViewMapper::PaperclipView.source_root
139
+ view_for_templates = %w{ new edit index show }
140
+ view_for_templates.each do | template |
141
+ should "render the #{template} template as expected" do
142
+ @attributes = @gen.attributes
143
+ @singular_name = @gen.singular_name
144
+ @plural_name = @gen.plural_name
145
+ @attachments = @gen.attachments
146
+ template_file = File.open(@gen.source_path("view_#{template}.html.erb"))
147
+ result = ERB.new(template_file.read, nil, '-').result(binding)
148
+ expected_file = File.open(File.join(File.dirname(__FILE__), "expected_templates/#{template}.html.erb"))
149
+ assert_equal expected_file.read, result
150
+ end
151
+ end
134
152
  end
135
153
 
136
- should "have the proper value for source_roots_for_view" do
137
- assert_equal [
138
- File.expand_path(File.dirname(__FILE__) + '/../../..//lib/view_mapper/views/paperclip/templates'),
139
- @gen.class.lookup('scaffold').path + '/templates',
140
- @gen.class.lookup('model').path + '/templates'
141
- ], @gen.source_roots_for_view
154
+ context "A Rails generator script run on a test model" do
155
+ setup do
156
+ @generator_script = Rails::Generator::Scripts::Generate.new
157
+ end
158
+
159
+ should "not perform any actions when run on the view_for generator with an invalid paperclip field" do
160
+ Rails::Generator::Commands::Create.any_instance.expects(:directory).never
161
+ Rails::Generator::Commands::Create.any_instance.expects(:template).never
162
+ Rails::Generator::Commands::Create.any_instance.expects(:route_resources).never
163
+ Rails::Generator::Commands::Create.any_instance.expects(:file).never
164
+ Rails::Generator::Commands::Create.any_instance.expects(:route).never
165
+ Rails::Generator::Commands::Create.any_instance.expects(:dependency).never
166
+ Rails::Generator::Base.logger.stubs(:error)
167
+ Rails::Generator::Base.logger.stubs(:route)
168
+ @generator_script.run(generator_script_cmd_line('view_for', ['--view', 'paperclip:blah']))
169
+ end
170
+
171
+ should "create a normal view_for manifest when the view_for generator is run with a valid attachment" do
172
+
173
+ directories = [
174
+ 'app/controllers/',
175
+ 'app/helpers/',
176
+ 'app/views/test_models',
177
+ 'app/views/layouts/',
178
+ 'test/functional/',
179
+ 'test/unit/',
180
+ 'test/unit/helpers/',
181
+ 'public/stylesheets/'
182
+ ].each { |path| Rails::Generator::Commands::Create.any_instance.expects(:directory).with(path) }
183
+
184
+ templates = {
185
+ 'view_index.html.erb' => 'app/views/test_models/index.html.erb',
186
+ 'view_show.html.erb' => 'app/views/test_models/show.html.erb',
187
+ 'view_new.html.erb' => 'app/views/test_models/new.html.erb',
188
+ 'view_edit.html.erb' => 'app/views/test_models/edit.html.erb',
189
+ 'layout.html.erb' => 'app/views/layouts/test_models.html.erb',
190
+ 'style.css' => 'public/stylesheets/scaffold.css',
191
+ 'controller.rb' => 'app/controllers/test_models_controller.rb',
192
+ 'functional_test.rb' => 'test/functional/test_models_controller_test.rb',
193
+ 'helper.rb' => 'app/helpers/test_models_helper.rb',
194
+ 'helper_test.rb' => 'test/unit/helpers/test_models_helper_test.rb'
195
+ }.each { |template, target| Rails::Generator::Commands::Create.any_instance.expects(:template).with(template, target) }
196
+
197
+ Rails::Generator::Commands::Create.any_instance.expects(:route_resources).with('test_models')
198
+ Rails::Generator::Commands::Create.any_instance.expects(:file).never
199
+ Rails::Generator::Commands::Create.any_instance.expects(:dependency).never
200
+
201
+ @generator_script.run(generator_script_cmd_line('view_for', ['--view', 'paperclip:avatar']))
202
+ end
203
+
204
+ should "create a manifest containing model actions when the scaffold_for_view generator is run with a valid attachment" do
205
+
206
+ directories = [
207
+ 'app/models/',
208
+ 'app/controllers/',
209
+ 'app/helpers/',
210
+ 'app/views/test_models',
211
+ 'app/views/layouts/',
212
+ 'test/functional/',
213
+ 'test/unit/',
214
+ 'test/unit/helpers/',
215
+ 'test/fixtures/',
216
+ 'public/stylesheets/'
217
+ ].each { |path| Rails::Generator::Commands::Create.any_instance.expects(:directory).with(path) }
218
+
219
+ templates = {
220
+ 'view_index.html.erb' => 'app/views/test_models/index.html.erb',
221
+ 'view_show.html.erb' => 'app/views/test_models/show.html.erb',
222
+ 'view_new.html.erb' => 'app/views/test_models/new.html.erb',
223
+ 'view_edit.html.erb' => 'app/views/test_models/edit.html.erb',
224
+ 'layout.html.erb' => 'app/views/layouts/test_models.html.erb',
225
+ 'style.css' => 'public/stylesheets/scaffold.css',
226
+ 'controller.rb' => 'app/controllers/test_models_controller.rb',
227
+ 'functional_test.rb' => 'test/functional/test_models_controller_test.rb',
228
+ 'helper.rb' => 'app/helpers/test_models_helper.rb',
229
+ 'helper_test.rb' => 'test/unit/helpers/test_models_helper_test.rb',
230
+ 'model.rb' => 'app/models/test_model.rb',
231
+ 'unit_test.rb' => 'test/unit/test_model_test.rb',
232
+ 'fixtures.yml' => 'test/fixtures/test_models.yml'
233
+ }.each { |template, target| Rails::Generator::Commands::Create.any_instance.expects(:template).with(template, target) }
234
+
235
+ Rails::Generator::Commands::Create.any_instance.expects(:route_resources).with('test_models')
236
+ Rails::Generator::Commands::Create.any_instance.expects(:file).never
237
+ Rails::Generator::Commands::Create.any_instance.expects(:dependency).never
238
+
239
+ Rails::Generator::Commands::Create.any_instance.expects(:migration_template).with(
240
+ 'migration.rb',
241
+ 'db/migrate',
242
+ :assigns => { :migration_name => "CreateTestModels" },
243
+ :migration_file_name => "create_test_models"
244
+ )
245
+
246
+ @generator_script.run(generator_script_cmd_line('scaffold_for_view', ['--view', 'paperclip:avatar']))
247
+ end
142
248
  end
143
249
 
144
- view_for_templates = %w{ new edit index show }
145
- view_for_templates.each do | template |
146
- should "render the #{template} template as expected" do
250
+ context "A scaffold_for_view generator instantiated for a test model with an avatar attachment" do
251
+ setup do
252
+ @gen = new_generator_for_test_model('scaffold_for_view', ['--view', 'paperclip:avatar,avatar2'])
253
+ end
254
+
255
+ should "render the model template as expected" do
256
+ @class_name = @gen.class_name
147
257
  @attributes = @gen.attributes
148
- @singular_name = @gen.singular_name
149
- @plural_name = @gen.plural_name
150
258
  @attachments = @gen.attachments
151
- template_file = File.open(@gen.source_path("view_#{template}.html.erb"))
259
+ template_file = File.open(@gen.source_path("model.rb"))
152
260
  result = ERB.new(template_file.read, nil, '-').result(binding)
153
- expected_file = File.open(File.join(File.dirname(__FILE__), "expected_templates/#{template}.html.erb"))
261
+ expected_file = File.open(File.join(File.dirname(__FILE__), "expected_templates/test_model.rb"))
154
262
  assert_equal expected_file.read, result
155
263
  end
156
- end
157
- end
158
-
159
- context "A Rails generator script run on a testy model" do
160
- setup do
161
- setup_test_model(true)
162
- @generator_script = Rails::Generator::Scripts::Generate.new
163
- end
164
264
 
165
- should "not perform any actions when run on the view_for generator with an invalid paperclip field" do
166
- Rails::Generator::Commands::Create.any_instance.expects(:directory).never
167
- Rails::Generator::Commands::Create.any_instance.expects(:template).never
168
- Rails::Generator::Commands::Create.any_instance.expects(:route_resources).never
169
- Rails::Generator::Commands::Create.any_instance.expects(:file).never
170
- Rails::Generator::Commands::Create.any_instance.expects(:route).never
171
- Rails::Generator::Commands::Create.any_instance.expects(:dependency).never
172
- Rails::Generator::Base.logger.stubs(:error)
173
- Rails::Generator::Base.logger.stubs(:route)
174
- @generator_script.run(generator_script_cmd_line('view_for', ['--view', 'paperclip:blah']))
175
- end
176
-
177
- should "create a normal view_for manifest when the view_for generator is run with a valid attachment" do
178
-
179
- directories = [
180
- 'app/controllers/',
181
- 'app/helpers/',
182
- 'app/views/testies',
183
- 'app/views/layouts/',
184
- 'test/functional/',
185
- 'test/unit/',
186
- 'test/unit/helpers/',
187
- 'public/stylesheets/'
188
- ].each { |path| Rails::Generator::Commands::Create.any_instance.expects(:directory).with(path) }
189
-
190
- templates = {
191
- 'view_index.html.erb' => 'app/views/testies/index.html.erb',
192
- 'view_show.html.erb' => 'app/views/testies/show.html.erb',
193
- 'view_new.html.erb' => 'app/views/testies/new.html.erb',
194
- 'view_edit.html.erb' => 'app/views/testies/edit.html.erb',
195
- 'layout.html.erb' => 'app/views/layouts/testies.html.erb',
196
- 'style.css' => 'public/stylesheets/scaffold.css',
197
- 'controller.rb' => 'app/controllers/testies_controller.rb',
198
- 'functional_test.rb' => 'test/functional/testies_controller_test.rb',
199
- 'helper.rb' => 'app/helpers/testies_helper.rb',
200
- 'helper_test.rb' => 'test/unit/helpers/testies_helper_test.rb'
201
- }.each { |template, target| Rails::Generator::Commands::Create.any_instance.expects(:template).with(template, target) }
202
-
203
- Rails::Generator::Commands::Create.any_instance.expects(:route_resources).with('testies')
204
- Rails::Generator::Commands::Create.any_instance.expects(:file).never
205
- Rails::Generator::Commands::Create.any_instance.expects(:dependency).never
206
-
207
- @generator_script.run(generator_script_cmd_line('view_for', ['--view', 'paperclip:avatar']))
208
- end
209
-
210
- should "create a manifest containing model actions when the scaffold_for_view generator is run with a valid attachment" do
211
-
212
- directories = [
213
- 'app/models/',
214
- 'app/controllers/',
215
- 'app/helpers/',
216
- 'app/views/testies',
217
- 'app/views/layouts/',
218
- 'test/functional/',
219
- 'test/unit/',
220
- 'test/unit/helpers/',
221
- 'test/fixtures/',
222
- 'public/stylesheets/'
223
- ].each { |path| Rails::Generator::Commands::Create.any_instance.expects(:directory).with(path) }
224
-
225
- templates = {
226
- 'view_index.html.erb' => 'app/views/testies/index.html.erb',
227
- 'view_show.html.erb' => 'app/views/testies/show.html.erb',
228
- 'view_new.html.erb' => 'app/views/testies/new.html.erb',
229
- 'view_edit.html.erb' => 'app/views/testies/edit.html.erb',
230
- 'layout.html.erb' => 'app/views/layouts/testies.html.erb',
231
- 'style.css' => 'public/stylesheets/scaffold.css',
232
- 'controller.rb' => 'app/controllers/testies_controller.rb',
233
- 'functional_test.rb' => 'test/functional/testies_controller_test.rb',
234
- 'helper.rb' => 'app/helpers/testies_helper.rb',
235
- 'helper_test.rb' => 'test/unit/helpers/testies_helper_test.rb',
236
- 'model.rb' => 'app/models/testy.rb',
237
- 'unit_test.rb' => 'test/unit/testy_test.rb',
238
- 'fixtures.yml' => 'test/fixtures/testies.yml'
239
- }.each { |template, target| Rails::Generator::Commands::Create.any_instance.expects(:template).with(template, target) }
240
-
241
- Rails::Generator::Commands::Create.any_instance.expects(:route_resources).with('testies')
242
- Rails::Generator::Commands::Create.any_instance.expects(:file).never
243
- Rails::Generator::Commands::Create.any_instance.expects(:dependency).never
244
-
245
- Rails::Generator::Commands::Create.any_instance.expects(:migration_template).with(
246
- 'migration.rb',
247
- 'db/migrate',
248
- :assigns => { :migration_name => "CreateTesties" },
249
- :migration_file_name => "create_testies"
250
- )
251
-
252
- @generator_script.run(generator_script_cmd_line('scaffold_for_view', ['--view', 'paperclip:avatar']))
265
+ should "render the migration template as expected" do
266
+ @class_name = @gen.class_name
267
+ @attributes = @gen.attributes
268
+ @attachments = @gen.attachments
269
+ @migration_name = 'CreateTestModels'
270
+ @table_name = @gen.table_name
271
+ @options = {}
272
+ template_file = File.open(@gen.source_path("migration.rb"))
273
+ result = ERB.new(template_file.read, nil, '-').result(binding)
274
+ expected_file = File.open(File.join(File.dirname(__FILE__), "expected_templates/create_test_models.rb"))
275
+ assert_equal expected_file.read, result
276
+ end
253
277
  end
254
278
  end
255
279
 
256
- context "A scaffold_for_view generator instantiated for a test model with an avatar attachment" do
280
+ context "A view_for generator" do
257
281
  setup do
258
- @gen = new_generator_for_test_model('scaffold_for_view', ['--view', 'paperclip:avatar,avatar2'])
282
+ paperclip_src = <<SRC
283
+ def self.attachment_definitions
284
+ { :avatar => {:validations => []}, :avatar2 => {:validations => []} }
285
+ end
286
+ SRC
287
+ ClassFactory :test_model, :class_eval => paperclip_src do |t|
288
+ t.string :avatar_file_name
289
+ t.string :avatar_content_type
290
+ t.integer :avatar_file_size
291
+ t.string :avatar_updated_at
292
+ t.string :avatar2_file_name
293
+ t.string :avatar2_content_type
294
+ t.integer :avatar2_file_size
295
+ t.string :avatar2_updated_at
296
+ end
259
297
  end
260
298
 
261
- should "render the model template as expected" do
262
- @class_name = @gen.class_name
263
- @attributes = @gen.attributes
264
- @attachments = @gen.attachments
265
- template_file = File.open(@gen.source_path("model.rb"))
266
- result = ERB.new(template_file.read, nil, '-').result(binding)
267
- expected_file = File.open(File.join(File.dirname(__FILE__), "expected_templates/testy.rb"))
268
- assert_equal expected_file.read, result
299
+ should "not return an error message when paperclip is installed" do
300
+ Rails::Generator::Base.logger.expects('error').never
301
+ ActiveRecord::Base.send(:include, MockPaperclip)
302
+ new_generator_for_test_model('view_for', ['--view', 'paperclip:avatar'])
269
303
  end
270
304
 
271
- should "render the migration template as expected" do
272
- @class_name = @gen.class_name
273
- @attributes = @gen.attributes
274
- @attachments = @gen.attachments
275
- @migration_name = 'CreateTesties'
276
- @table_name = @gen.table_name
277
- @options = {}
278
- template_file = File.open(@gen.source_path("migration.rb"))
279
- result = ERB.new(template_file.read, nil, '-').result(binding)
280
- expected_file = File.open(File.join(File.dirname(__FILE__), "expected_templates/create_testies.rb"))
281
- assert_equal expected_file.read, result
305
+ should "return an error message when paperclip is not installed" do
306
+ Rails::Generator::Base.logger.expects('error').with('The Paperclip plugin does not appear to be installed.')
307
+ ActiveRecord::Base.stubs(:methods).returns([])
308
+ new_generator_for_test_model('view_for', ['--view', 'paperclip:avatar'])
282
309
  end
283
310
  end
311
+
284
312
  end