view_mapper 0.3.3 → 0.3.4

Sign up to get free protection for your applications and to get access to all the features.
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