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.
- data/README.rdoc +3 -1
- data/VERSION +1 -1
- data/lib/view_mapper.rb +1 -0
- data/lib/view_mapper/belongs_to_parent_models.rb +12 -26
- data/lib/view_mapper/has_many_child_models.rb +9 -9
- data/lib/view_mapper/model_info.rb +56 -18
- data/lib/view_mapper/views/belongs_to/belongs_to_view.rb +14 -0
- data/lib/view_mapper/views/belongs_to_auto_complete/belongs_to_auto_complete_view.rb +9 -2
- data/lib/view_mapper/views/has_many/templates/helper.rb +1 -1
- data/lib/view_mapper/views/has_many/templates/view_child_form.html.erb +1 -1
- data/lib/view_mapper/views/has_many/templates/view_form.html.erb +1 -1
- data/lib/view_mapper/views/has_many_existing/has_many_existing_view.rb +126 -0
- data/lib/view_mapper/views/has_many_existing/templates/model.rb +21 -0
- data/lib/view_mapper/views/has_many_existing/templates/view_child_form.html.erb +16 -0
- data/lib/view_mapper/views/has_many_existing/templates/view_form.html.erb +20 -0
- data/lib/view_mapper/views/has_many_existing/templates/view_show.html.erb +26 -0
- data/test/generators/scaffold_for_view/scaffold_for_view_generator_test.rb +15 -15
- data/test/generators/view_for/view_for_generator_test.rb +18 -18
- data/test/model_info_test.rb +91 -20
- data/test/test_helper.rb +75 -105
- data/test/views/auto_complete/auto_complete_test.rb +104 -102
- data/test/views/auto_complete/expected_templates/edit.html.erb +6 -6
- data/test/views/auto_complete/expected_templates/expected_routes.rb +1 -1
- data/test/views/auto_complete/expected_templates/index.html.erb +10 -10
- data/test/views/auto_complete/expected_templates/new.html.erb +5 -5
- data/test/views/auto_complete/expected_templates/show.html.erb +6 -6
- data/test/views/auto_complete/expected_templates/{testies.html.erb → test_models.html.erb} +1 -1
- data/test/views/auto_complete/expected_templates/test_models_controller.rb +89 -0
- data/test/views/belongs_to/belongs_to_test.rb +238 -202
- data/test/views/belongs_to/expected_templates/_form.html.erb +4 -4
- data/test/views/belongs_to/expected_templates/child_model.rb +10 -0
- data/test/views/belongs_to/expected_templates/create_child_models.rb +18 -0
- data/test/views/belongs_to/expected_templates/edit.html.erb +4 -4
- data/test/views/belongs_to/expected_templates/index.html.erb +11 -11
- data/test/views/belongs_to/expected_templates/new.html.erb +3 -3
- data/test/views/belongs_to/expected_templates/show.html.erb +7 -7
- data/test/views/belongs_to_auto_complete/belongs_to_auto_complete_test.rb +440 -406
- data/test/views/belongs_to_auto_complete/expected_templates/_form.html.erb +4 -4
- data/test/views/belongs_to_auto_complete/expected_templates/child_model.rb +16 -0
- data/test/views/belongs_to_auto_complete/expected_templates/{some_other_models.html.erb → child_models.html.erb} +1 -1
- data/test/views/belongs_to_auto_complete/expected_templates/child_models_controller.rb +89 -0
- data/test/views/belongs_to_auto_complete/expected_templates/create_child_models.rb +18 -0
- data/test/views/belongs_to_auto_complete/expected_templates/edit.html.erb +4 -4
- data/test/views/belongs_to_auto_complete/expected_templates/expected_routes.rb +2 -2
- data/test/views/belongs_to_auto_complete/expected_templates/index.html.erb +11 -11
- data/test/views/belongs_to_auto_complete/expected_templates/new.html.erb +3 -3
- data/test/views/belongs_to_auto_complete/expected_templates/show.html.erb +7 -7
- data/test/views/has_many/expected_templates/_form.html.erb +8 -8
- data/test/views/has_many/expected_templates/{_person.html.erb → _second_child_model.html.erb} +5 -5
- data/test/views/has_many/expected_templates/create_parent_models.rb +16 -0
- data/test/views/has_many/expected_templates/edit.html.erb +4 -4
- data/test/views/has_many/expected_templates/index.html.erb +7 -7
- data/test/views/has_many/expected_templates/new.html.erb +3 -3
- data/test/views/has_many/expected_templates/{parent.rb → parent_model.rb} +5 -5
- data/test/views/has_many/expected_templates/show.html.erb +15 -15
- data/test/views/has_many/has_many_view_test.rb +334 -292
- data/test/views/has_many_existing/expected_templates/_assignment.html.erb +14 -0
- data/test/views/has_many_existing/expected_templates/_form.html.erb +16 -0
- data/test/views/{has_many/expected_templates/create_parents.rb → has_many_existing/expected_templates/create_programmers.rb} +3 -3
- data/test/views/has_many_existing/expected_templates/edit.html.erb +11 -0
- data/test/views/has_many_existing/expected_templates/index.html.erb +20 -0
- data/test/views/has_many_existing/expected_templates/new.html.erb +10 -0
- data/test/views/has_many_existing/expected_templates/programmer.rb +10 -0
- data/test/views/has_many_existing/expected_templates/show.html.erb +20 -0
- data/test/views/has_many_existing/has_many_existing_test.rb +495 -0
- data/test/views/paperclip/expected_templates/{create_testies.rb → create_test_models.rb} +3 -3
- data/test/views/paperclip/expected_templates/edit.html.erb +4 -4
- data/test/views/paperclip/expected_templates/index.html.erb +10 -10
- data/test/views/paperclip/expected_templates/new.html.erb +3 -3
- data/test/views/paperclip/expected_templates/show.html.erb +8 -8
- data/test/views/paperclip/expected_templates/{testy.rb → test_model.rb} +1 -1
- data/test/views/paperclip/paperclip_view_test.rb +254 -226
- data/view_mapper.gemspec +43 -27
- metadata +64 -37
- data/test/views/auto_complete/expected_templates/actual_index +0 -26
- data/test/views/auto_complete/expected_templates/testies_controller.rb +0 -89
- data/test/views/belongs_to/expected_templates/create_some_other_models.rb +0 -18
- data/test/views/belongs_to/expected_templates/some_other_model.rb +0 -10
- data/test/views/belongs_to_auto_complete/expected_templates/create_some_other_models.rb +0 -18
- data/test/views/belongs_to_auto_complete/expected_templates/some_other_model.rb +0 -16
- data/test/views/belongs_to_auto_complete/expected_templates/some_other_models_controller.rb +0 -89
@@ -1,6 +1,6 @@
|
|
1
|
-
class
|
1
|
+
class CreateTestModels < ActiveRecord::Migration
|
2
2
|
def self.up
|
3
|
-
create_table :
|
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 :
|
22
|
+
drop_table :test_models
|
23
23
|
end
|
24
24
|
end
|
@@ -1,6 +1,6 @@
|
|
1
|
-
<h1>Editing
|
1
|
+
<h1>Editing test_model</h1>
|
2
2
|
|
3
|
-
<% form_for(@
|
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', @
|
35
|
-
<%= link_to 'Back',
|
34
|
+
<%= link_to 'Show', @test_model %> |
|
35
|
+
<%= link_to 'Back', test_models_path %>
|
@@ -1,4 +1,4 @@
|
|
1
|
-
<h1>Listing
|
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
|
-
<% @
|
11
|
+
<% @test_models.each do |test_model| %>
|
12
12
|
<tr>
|
13
|
-
<td><%=h
|
14
|
-
<td><%=h
|
15
|
-
<td><%=h
|
16
|
-
<td><%=h
|
17
|
-
<td><%= link_to 'Show',
|
18
|
-
<td><%= link_to 'Edit',
|
19
|
-
<td><%= link_to 'Destroy',
|
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
|
26
|
+
<%= link_to 'New test_model', new_test_model_path %>
|
@@ -1,6 +1,6 @@
|
|
1
|
-
<h1>New
|
1
|
+
<h1>New test_model</h1>
|
2
2
|
|
3
|
-
<% form_for(@
|
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',
|
34
|
+
<%= link_to 'Back', test_models_path %>
|
@@ -1,33 +1,33 @@
|
|
1
1
|
<p>
|
2
2
|
<b>First name:</b>
|
3
|
-
<%=h @
|
3
|
+
<%=h @test_model.first_name %>
|
4
4
|
</p>
|
5
5
|
|
6
6
|
<p>
|
7
7
|
<b>Last name:</b>
|
8
|
-
<%=h @
|
8
|
+
<%=h @test_model.last_name %>
|
9
9
|
</p>
|
10
10
|
|
11
11
|
<p>
|
12
12
|
<b>Address:</b>
|
13
|
-
<%=h @
|
13
|
+
<%=h @test_model.address %>
|
14
14
|
</p>
|
15
15
|
|
16
16
|
<p>
|
17
17
|
<b>Some flag:</b>
|
18
|
-
<%=h @
|
18
|
+
<%=h @test_model.some_flag %>
|
19
19
|
</p>
|
20
20
|
|
21
21
|
<p>
|
22
22
|
<b>Avatar:</b>
|
23
|
-
<%= link_to @
|
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 @
|
28
|
+
<%= link_to @test_model.avatar2_file_name, @test_model.avatar2.url %><br>
|
29
29
|
</p>
|
30
30
|
|
31
31
|
|
32
|
-
<%= link_to 'Edit',
|
33
|
-
<%= link_to 'Back',
|
32
|
+
<%= link_to 'Edit', edit_test_model_path(@test_model) %> |
|
33
|
+
<%= link_to 'Back', test_models_path %>
|
@@ -11,274 +11,302 @@ class PaperclipViewTest < Test::Unit::TestCase
|
|
11
11
|
attr_reader :table_name
|
12
12
|
attr_reader :options
|
13
13
|
|
14
|
-
context "
|
14
|
+
context "When the paperclip plugin is installed and there's a model with paperclip attachments" do
|
15
15
|
setup do
|
16
|
-
|
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
|
-
|
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
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
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
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
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
|
-
|
37
|
-
|
38
|
-
|
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
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
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
|
-
|
48
|
-
|
49
|
-
|
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
|
-
|
58
|
-
|
59
|
-
|
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
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
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
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
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
|
-
|
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
|
-
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
|
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
|
-
|
106
|
-
|
107
|
-
|
108
|
-
|
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
|
-
|
113
|
-
|
114
|
-
|
115
|
-
|
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
|
-
|
120
|
-
|
121
|
-
|
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
|
-
|
127
|
-
|
128
|
-
|
129
|
-
|
130
|
-
|
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
|
-
|
133
|
-
|
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
|
-
|
137
|
-
|
138
|
-
|
139
|
-
|
140
|
-
|
141
|
-
|
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
|
-
|
145
|
-
|
146
|
-
|
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("
|
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
|
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
|
-
|
166
|
-
|
167
|
-
|
168
|
-
|
169
|
-
|
170
|
-
|
171
|
-
|
172
|
-
|
173
|
-
|
174
|
-
|
175
|
-
|
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
|
280
|
+
context "A view_for generator" do
|
257
281
|
setup do
|
258
|
-
|
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 "
|
262
|
-
|
263
|
-
|
264
|
-
|
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 "
|
272
|
-
|
273
|
-
|
274
|
-
|
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
|