response_for_rails 0.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/.gitignore +5 -0
- data/CHANGELOG +22 -0
- data/Gemfile +3 -0
- data/Gemfile.lock.development +109 -0
- data/MIT-LICENSE +20 -0
- data/README.rdoc +126 -0
- data/Rakefile +32 -0
- data/lib/response_for/action_controller.rb +151 -0
- data/lib/response_for/railtie.rb +9 -0
- data/lib/response_for/responses_module.rb +47 -0
- data/lib/response_for/version.rb +3 -0
- data/lib/response_for.rb +7 -0
- data/lib/response_for_rails.rb +7 -0
- data/response_for.gemspec +30 -0
- data/spec/app/database.yml +5 -0
- data/spec/app/views/error_in_template_spec/test/error_in_template.html.erb +1 -0
- data/spec/app/views/inherited_controller_spec/super/a_response.html.erb +0 -0
- data/spec/app/views/inherited_controller_spec/super/an_action.html.erb +0 -0
- data/spec/app/views/pick_template_spec/template_only/an_action.atom.erb +1 -0
- data/spec/app/views/pick_template_spec/template_only/an_action.html.erb +1 -0
- data/spec/app/views/pick_template_spec/template_only/an_action.js.erb +1 -0
- data/spec/app/views/pick_template_spec/template_only/an_action.xml.erb +1 -0
- data/spec/app/views/stop_at_respond_to_spec/test/index.atom.builder +1 -0
- data/spec/app/views/stop_at_respond_to_spec/test/index.html.erb +1 -0
- data/spec/controllers/default_rails_behaviour_spec.rb +48 -0
- data/spec/controllers/error_in_template_spec.rb +20 -0
- data/spec/controllers/inherited_controllers_spec.rb +137 -0
- data/spec/controllers/no_response_if_performed_spec.rb +40 -0
- data/spec/controllers/pick_template_spec.rb +159 -0
- data/spec/controllers/remove_response_for_spec.rb +34 -0
- data/spec/controllers/responses_module_spec.rb +38 -0
- data/spec/controllers/stacking_responses_spec.rb +125 -0
- data/spec/controllers/stop_at_respond_to_spec.rb +51 -0
- data/spec/spec_helper.rb +27 -0
- metadata +142 -0
@@ -0,0 +1,20 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
module ErrorInTemplateSpec
|
4
|
+
class TestController < ApplicationController
|
5
|
+
response_for :action_rendering_erroneous_template do |format|
|
6
|
+
format.html { render :action => 'error_in_template' }
|
7
|
+
end
|
8
|
+
|
9
|
+
def action_rendering_erroneous_template
|
10
|
+
end
|
11
|
+
end
|
12
|
+
|
13
|
+
describe TestController do
|
14
|
+
render_views
|
15
|
+
|
16
|
+
it "GET :action_rendering_erroneous_template should raise \"Boom!\"" do
|
17
|
+
lambda { get :action_rendering_erroneous_template }.should raise_error("Boom!")
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
@@ -0,0 +1,137 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
module InheritedControllerSpec
|
4
|
+
# example setup
|
5
|
+
class SuperController < ApplicationController
|
6
|
+
response_for :a_response do |format|
|
7
|
+
format.html { super_inside_a_response }
|
8
|
+
end
|
9
|
+
|
10
|
+
def a_response
|
11
|
+
end
|
12
|
+
|
13
|
+
def an_action
|
14
|
+
inside_an_action
|
15
|
+
end
|
16
|
+
|
17
|
+
def performing_action
|
18
|
+
respond_to do |format|
|
19
|
+
format.html { redirect_to 'http://redirected.from.an_action_which_performs' }
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
protected
|
24
|
+
def super_inside_a_response; end
|
25
|
+
def inside_an_action; end
|
26
|
+
end
|
27
|
+
|
28
|
+
class SubController < SuperController
|
29
|
+
response_for :a_response do |format|
|
30
|
+
format.html { sub_inside_a_response }
|
31
|
+
end
|
32
|
+
|
33
|
+
response_for :an_action do |format|
|
34
|
+
format.html do
|
35
|
+
redirect_to 'http://redirected.from.response_for'
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
response_for :performing_action do |format|
|
40
|
+
never_reached_because_action_performs
|
41
|
+
end
|
42
|
+
|
43
|
+
protected
|
44
|
+
def sub_inside_a_response; end
|
45
|
+
end
|
46
|
+
|
47
|
+
# specs
|
48
|
+
describe "action_responses", :type => :spec do
|
49
|
+
it "SuperController.action_responses should not == SubController.action_responses" do
|
50
|
+
SuperController.action_responses.should_not == SubController.action_responses
|
51
|
+
end
|
52
|
+
|
53
|
+
it "SuperController should have one action_response for 'a_response'" do
|
54
|
+
SuperController.action_responses.keys.should == ['a_response']
|
55
|
+
SuperController.action_responses['a_response'].size.should == 1
|
56
|
+
end
|
57
|
+
|
58
|
+
it "SubController should have two action_responses for 'a_response', and one each for 'an_action', and 'performing_action'" do
|
59
|
+
SubController.action_responses.keys.sort.should == ['a_response', 'an_action', 'performing_action']
|
60
|
+
SubController.action_responses['a_response'].size.should == 2
|
61
|
+
SubController.action_responses['an_action'].size.should == 1
|
62
|
+
SubController.action_responses['performing_action'].size.should == 1
|
63
|
+
end
|
64
|
+
end
|
65
|
+
|
66
|
+
describe SuperController do
|
67
|
+
describe "GET :an_action" do
|
68
|
+
|
69
|
+
it "should execute action" do
|
70
|
+
@controller.should_receive :inside_an_action
|
71
|
+
get :an_action
|
72
|
+
end
|
73
|
+
|
74
|
+
it "should render :an_action" do
|
75
|
+
get :an_action
|
76
|
+
response.should render_template('inherited_controller_spec/super/an_action')
|
77
|
+
end
|
78
|
+
end
|
79
|
+
|
80
|
+
describe "GET :a_response" do
|
81
|
+
it "should execute inside the super response block" do
|
82
|
+
@controller.should_receive :super_inside_a_response
|
83
|
+
get :a_response
|
84
|
+
end
|
85
|
+
|
86
|
+
it "should NOT execute inside the sub response block" do
|
87
|
+
@controller.should_not_receive :sub_inside_a_response
|
88
|
+
get :a_response
|
89
|
+
end
|
90
|
+
end
|
91
|
+
|
92
|
+
describe "GET :performing_action" do
|
93
|
+
it "should redirect" do
|
94
|
+
get :performing_action
|
95
|
+
response.should redirect_to('http://redirected.from.an_action_which_performs')
|
96
|
+
end
|
97
|
+
end
|
98
|
+
end
|
99
|
+
|
100
|
+
describe SubController do
|
101
|
+
describe "GET :an_action (decorated with redirecting response_for)" do
|
102
|
+
it "should execute action" do
|
103
|
+
@controller.should_receive :inside_an_action
|
104
|
+
get :an_action
|
105
|
+
end
|
106
|
+
|
107
|
+
it "should redirect" do
|
108
|
+
get :an_action
|
109
|
+
response.should redirect_to('http://redirected.from.response_for')
|
110
|
+
end
|
111
|
+
end
|
112
|
+
|
113
|
+
describe "GET :a_response (decorated with a new response)" do
|
114
|
+
it "should NOT execute the super response" do
|
115
|
+
@controller.should_not_receive :super_inside_a_response
|
116
|
+
get :a_response
|
117
|
+
end
|
118
|
+
|
119
|
+
it "should execute the sub response" do
|
120
|
+
@controller.should_receive :sub_inside_a_response
|
121
|
+
get :a_response
|
122
|
+
end
|
123
|
+
end
|
124
|
+
|
125
|
+
describe "GET :performing_action" do
|
126
|
+
it "should NOT execute the sub response" do
|
127
|
+
@controller.should_not_receive :never_reached_because_action_performs
|
128
|
+
get :performing_action
|
129
|
+
end
|
130
|
+
|
131
|
+
it "should redirect as per the super def" do
|
132
|
+
get :performing_action
|
133
|
+
response.should redirect_to('http://redirected.from.an_action_which_performs')
|
134
|
+
end
|
135
|
+
end
|
136
|
+
end
|
137
|
+
end
|
@@ -0,0 +1,40 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
module NoResponseIfPerformedSpec
|
4
|
+
# example setup
|
5
|
+
class TestController < ApplicationController
|
6
|
+
before_filter :do_redirect
|
7
|
+
|
8
|
+
response_for :an_action do |format|
|
9
|
+
format.html { render :text => "in response for" }
|
10
|
+
end
|
11
|
+
|
12
|
+
def an_action
|
13
|
+
end
|
14
|
+
|
15
|
+
protected
|
16
|
+
def do_redirect
|
17
|
+
redirect_to 'http://redirected.from.before_filter'
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
describe TestController do
|
22
|
+
describe "(when before_filter redirects)" do
|
23
|
+
it "GET :an_action should redirect to 'http://redirected.from.before_filter'" do
|
24
|
+
get :an_action
|
25
|
+
response.should redirect_to('http://redirected.from.before_filter')
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
describe "(when before_filter doesn't redirect)" do
|
30
|
+
before do
|
31
|
+
@controller.stub!(:do_redirect)
|
32
|
+
end
|
33
|
+
|
34
|
+
it "GET :an_action should execute inside response for" do
|
35
|
+
get :an_action
|
36
|
+
response.body.should == 'in response for'
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
@@ -0,0 +1,159 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
module PickTemplateSpec
|
4
|
+
# example setup
|
5
|
+
class TemplateOnlyController < ApplicationController
|
6
|
+
end
|
7
|
+
|
8
|
+
class RespondToTypesController < TemplateOnlyController
|
9
|
+
def an_action
|
10
|
+
respond_to :atom, :xml, :html, :js
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
class RespondToBlockController < TemplateOnlyController
|
15
|
+
def an_action
|
16
|
+
respond_to do |format|
|
17
|
+
format.atom
|
18
|
+
format.xml
|
19
|
+
format.html
|
20
|
+
format.js
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
class ResponseForTypesController < TemplateOnlyController
|
26
|
+
response_for :an_action, :types => [:atom, :xml, :html, :js]
|
27
|
+
end
|
28
|
+
|
29
|
+
class ResponseForBlockController < TemplateOnlyController
|
30
|
+
response_for :an_action do |format|
|
31
|
+
format.atom
|
32
|
+
format.xml
|
33
|
+
format.html
|
34
|
+
format.js
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
class ResponseForMixOfBlockAndTypesController < TemplateOnlyController
|
39
|
+
# response_for gives priority to most recent declarations, and
|
40
|
+
# gives priority of blocks over types.
|
41
|
+
response_for :an_action, :types => :js
|
42
|
+
response_for :an_action, :types => :html
|
43
|
+
response_for :an_action, :types => :xml do |format|
|
44
|
+
format.atom
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
48
|
+
class SuperclassController < TemplateOnlyController
|
49
|
+
response_for :an_action, :types => :js
|
50
|
+
end
|
51
|
+
|
52
|
+
class InheritedController < SuperclassController
|
53
|
+
response_for :an_action, :types => [:xml, :html] do |format|
|
54
|
+
format.atom
|
55
|
+
end
|
56
|
+
end
|
57
|
+
|
58
|
+
# specs
|
59
|
+
shared_examples_for "Standard behaviour of respond_to :atom, :xml, :html, :js" do
|
60
|
+
it "GET :an_action, should render an_action.html" do
|
61
|
+
get :an_action
|
62
|
+
response.body.should == 'body of an_action.html'
|
63
|
+
end
|
64
|
+
|
65
|
+
describe "GET :an_action, HTTP_ACCEPT =" do
|
66
|
+
it "text/html, should render an_action.html" do
|
67
|
+
request.env["HTTP_ACCEPT"] = 'text/html'
|
68
|
+
get :an_action
|
69
|
+
response.body.should == 'body of an_action.html'
|
70
|
+
end
|
71
|
+
|
72
|
+
it "application/xml, should render an_action.xml" do
|
73
|
+
request.env["HTTP_ACCEPT"] = 'application/xml'
|
74
|
+
get :an_action
|
75
|
+
response.body.should == 'body of an_action.xml'
|
76
|
+
end
|
77
|
+
|
78
|
+
it "text/javascript, should render an_action.js" do
|
79
|
+
request.env["HTTP_ACCEPT"] = 'text/javascript'
|
80
|
+
get :an_action
|
81
|
+
response.body.should == 'body of an_action.js'
|
82
|
+
end
|
83
|
+
|
84
|
+
it "application/atom+xml, should render an_action.atom" do
|
85
|
+
request.env["HTTP_ACCEPT"] = 'application/atom+xml'
|
86
|
+
get :an_action
|
87
|
+
response.body.should == 'body of an_action.atom'
|
88
|
+
end
|
89
|
+
end
|
90
|
+
|
91
|
+
describe "GET :an_action, :format =>" do
|
92
|
+
it ":html, should render an_action.html" do
|
93
|
+
get :an_action, :format => 'html'
|
94
|
+
response.body.should == 'body of an_action.html'
|
95
|
+
end
|
96
|
+
|
97
|
+
it ":js, should render an_action.js" do
|
98
|
+
get :an_action, :format => 'js'
|
99
|
+
response.body.should == 'body of an_action.js'
|
100
|
+
end
|
101
|
+
|
102
|
+
it ":xml, should render an_action.xml" do
|
103
|
+
get :an_action, :format => 'xml'
|
104
|
+
response.body.should == 'body of an_action.xml'
|
105
|
+
end
|
106
|
+
|
107
|
+
it ":atom, should render an_action.atom" do
|
108
|
+
get :an_action, :format => 'atom'
|
109
|
+
response.body.should == 'body of an_action.atom'
|
110
|
+
end
|
111
|
+
end
|
112
|
+
end
|
113
|
+
|
114
|
+
describe "Picking template" do
|
115
|
+
render_views
|
116
|
+
|
117
|
+
describe TemplateOnlyController do
|
118
|
+
describe "GET :an_action, HTTP_ACCEPT =" do
|
119
|
+
it "text/html, should render an_action.html" do
|
120
|
+
request.env["HTTP_ACCEPT"] = 'text/html'
|
121
|
+
get :an_action
|
122
|
+
response.body.should == 'body of an_action.html'
|
123
|
+
end
|
124
|
+
|
125
|
+
it "application/xml, should render an_action.xml" do
|
126
|
+
request.env["HTTP_ACCEPT"] = 'application/xml'
|
127
|
+
get :an_action
|
128
|
+
response.body.should == 'body of an_action.xml'
|
129
|
+
end
|
130
|
+
end
|
131
|
+
end
|
132
|
+
|
133
|
+
describe "[:atom, :xml, :html, :js]" do
|
134
|
+
describe RespondToTypesController do
|
135
|
+
it_should_behave_like "Standard behaviour of respond_to :atom, :xml, :html, :js"
|
136
|
+
end
|
137
|
+
|
138
|
+
describe RespondToBlockController do
|
139
|
+
it_should_behave_like "Standard behaviour of respond_to :atom, :xml, :html, :js"
|
140
|
+
end
|
141
|
+
|
142
|
+
describe ResponseForTypesController do
|
143
|
+
it_should_behave_like "Standard behaviour of respond_to :atom, :xml, :html, :js"
|
144
|
+
end
|
145
|
+
|
146
|
+
describe ResponseForBlockController do
|
147
|
+
it_should_behave_like "Standard behaviour of respond_to :atom, :xml, :html, :js"
|
148
|
+
end
|
149
|
+
|
150
|
+
describe ResponseForMixOfBlockAndTypesController do
|
151
|
+
it_should_behave_like "Standard behaviour of respond_to :atom, :xml, :html, :js"
|
152
|
+
end
|
153
|
+
|
154
|
+
describe InheritedController do
|
155
|
+
it_should_behave_like "Standard behaviour of respond_to :atom, :xml, :html, :js"
|
156
|
+
end
|
157
|
+
end
|
158
|
+
end
|
159
|
+
end
|
@@ -0,0 +1,34 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
module RemoveResponseForSpec
|
4
|
+
class TheController < ApplicationController
|
5
|
+
response_for :foo, :bar, :types => :html
|
6
|
+
response_for :foo, :types => :js
|
7
|
+
end
|
8
|
+
|
9
|
+
describe TheController do
|
10
|
+
it "should have action_responses for :foo and :bar" do
|
11
|
+
TheController.action_responses.keys.sort.should == ['bar', 'foo']
|
12
|
+
end
|
13
|
+
|
14
|
+
describe ".remove_response_for :bar" do
|
15
|
+
before do
|
16
|
+
TheController.remove_response_for :bar
|
17
|
+
end
|
18
|
+
|
19
|
+
it "should hanve action_responses for :foo" do
|
20
|
+
TheController.action_responses.keys.should == ['foo']
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
describe ".remove_response_for" do
|
25
|
+
before do
|
26
|
+
TheController.remove_response_for
|
27
|
+
end
|
28
|
+
|
29
|
+
it "should have empty action_responses" do
|
30
|
+
TheController.action_responses.should be_empty
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
@@ -0,0 +1,38 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
module ResponsesModuleSpec
|
4
|
+
module MyActionsAndResponses
|
5
|
+
|
6
|
+
def self.included(controller)
|
7
|
+
controller.class_eval do
|
8
|
+
def defined_by_included; end
|
9
|
+
end
|
10
|
+
end
|
11
|
+
|
12
|
+
extend ResponseFor::ResponsesModule
|
13
|
+
|
14
|
+
def foo; end
|
15
|
+
|
16
|
+
response_for :foo do |format|
|
17
|
+
format.html {}
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
class MyController < ApplicationController
|
22
|
+
include MyActionsAndResponses
|
23
|
+
end
|
24
|
+
|
25
|
+
describe MyController do
|
26
|
+
it "should have action_response for :foo" do
|
27
|
+
@controller.class.action_responses['foo'].should_not == nil
|
28
|
+
end
|
29
|
+
|
30
|
+
it "should have action :foo" do
|
31
|
+
@controller.should respond_to(:foo)
|
32
|
+
end
|
33
|
+
|
34
|
+
it "should have method defined by included" do
|
35
|
+
@controller.should respond_to(:defined_by_included)
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
@@ -0,0 +1,125 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
# this spec shows how to stack responses - the important thing to note is that
|
4
|
+
# once a format block is executed, that will stop all subsequent blocks of that
|
5
|
+
# type being called.
|
6
|
+
module StackingResponsesSpec
|
7
|
+
class TestController < ApplicationController
|
8
|
+
response_for :foo do |format|
|
9
|
+
format.html do
|
10
|
+
render :text => "default"
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
response_for :foo do |format|
|
15
|
+
in_first
|
16
|
+
if params[:first]
|
17
|
+
format.html do
|
18
|
+
in_first_html
|
19
|
+
redirect_to 'http://first'
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
response_for :foo do |format|
|
25
|
+
in_second
|
26
|
+
if params[:second]
|
27
|
+
format.html do
|
28
|
+
in_second_html
|
29
|
+
redirect_to 'http://second'
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
def foo
|
35
|
+
end
|
36
|
+
|
37
|
+
protected
|
38
|
+
def in_first; end
|
39
|
+
def in_first_html; end
|
40
|
+
def in_second; end
|
41
|
+
def in_second_html; end
|
42
|
+
end
|
43
|
+
|
44
|
+
describe TestController, "with responses conditionally executed" do
|
45
|
+
describe "GET :foo (no conditions)" do
|
46
|
+
it "should execute second, then first, response" do
|
47
|
+
@controller.should_receive(:in_second).once.ordered
|
48
|
+
@controller.should_receive(:in_first).once.ordered
|
49
|
+
get :foo
|
50
|
+
end
|
51
|
+
|
52
|
+
it "should NOT execute the html response in first" do
|
53
|
+
@controller.should_not_receive(:in_first_html)
|
54
|
+
get :foo
|
55
|
+
end
|
56
|
+
|
57
|
+
it "should NOT execute the html response in second" do
|
58
|
+
@controller.should_not_receive(:in_second_html)
|
59
|
+
get :foo
|
60
|
+
end
|
61
|
+
|
62
|
+
it "should render the default response" do
|
63
|
+
get :foo
|
64
|
+
response.body.should == "default"
|
65
|
+
end
|
66
|
+
end
|
67
|
+
|
68
|
+
describe "GET :foo, :second => true" do
|
69
|
+
it "should execute second, then first, then html second, response" do
|
70
|
+
@controller.should_receive(:in_second).once.ordered
|
71
|
+
@controller.should_receive(:in_first).once.ordered
|
72
|
+
@controller.should_receive(:in_second_html).once.ordered
|
73
|
+
get :foo, :second => true
|
74
|
+
end
|
75
|
+
|
76
|
+
it "should redirect from second response" do
|
77
|
+
get :foo, :second => true
|
78
|
+
response.should redirect_to('http://second')
|
79
|
+
end
|
80
|
+
|
81
|
+
it "should NOT execute first html response" do
|
82
|
+
@controller.should_not_receive(:in_first_html)
|
83
|
+
get :foo, :second => true
|
84
|
+
end
|
85
|
+
end
|
86
|
+
|
87
|
+
describe "GET :foo, :first => true" do
|
88
|
+
it "should execute second, then first, then first html response" do
|
89
|
+
@controller.should_receive(:in_second).once.ordered
|
90
|
+
@controller.should_receive(:in_first).once.ordered
|
91
|
+
@controller.should_receive(:in_first_html).once.ordered
|
92
|
+
get :foo, :first => true
|
93
|
+
end
|
94
|
+
|
95
|
+
it "should redirect from first response" do
|
96
|
+
get :foo, :first => true
|
97
|
+
response.should redirect_to('http://first')
|
98
|
+
end
|
99
|
+
|
100
|
+
it "should NOT execute second html response" do
|
101
|
+
@controller.should_not_receive(:in_second_html)
|
102
|
+
get :foo, :first => true
|
103
|
+
end
|
104
|
+
end
|
105
|
+
|
106
|
+
describe "GET :foo, :first => true, :second => true (can't execute two html blocks)" do
|
107
|
+
it "should execute second, then first, then second html response" do
|
108
|
+
@controller.should_receive(:in_second).once.ordered
|
109
|
+
@controller.should_receive(:in_first).once.ordered
|
110
|
+
@controller.should_receive(:in_second_html).once.ordered
|
111
|
+
get :foo, :first => true, :second => true
|
112
|
+
end
|
113
|
+
|
114
|
+
it "should redirect from second response" do
|
115
|
+
get :foo, :first => true, :second => true
|
116
|
+
response.should redirect_to('http://second')
|
117
|
+
end
|
118
|
+
|
119
|
+
it "should NOT execute first html response" do
|
120
|
+
@controller.should_not_receive(:in_first_html)
|
121
|
+
get :foo, :first => true, :second => true
|
122
|
+
end
|
123
|
+
end
|
124
|
+
end
|
125
|
+
end
|
@@ -0,0 +1,51 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
module StopAtRespondToSpec
|
4
|
+
class TestController < ApplicationController
|
5
|
+
def index
|
6
|
+
respond_to do |format|
|
7
|
+
format.html do
|
8
|
+
@html = true
|
9
|
+
end
|
10
|
+
format.atom do
|
11
|
+
@atom = true
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
shared_examples_for "Standard respond_to behaviour" do
|
18
|
+
it "should render the respond_to html response" do
|
19
|
+
request.env["HTTP_ACCEPT"] = 'text/html'
|
20
|
+
get :index
|
21
|
+
assigns['html'].should == true
|
22
|
+
response.body.should =~ /body of index\.html\.erb/
|
23
|
+
end
|
24
|
+
|
25
|
+
it "should render the respond_to atom response" do
|
26
|
+
request.env["HTTP_ACCEPT"] = 'application/atom+xml'
|
27
|
+
get :index
|
28
|
+
assigns['atom'].should == true
|
29
|
+
response.body.should =~ /body of index\.atom\.builder/
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
describe TestController do
|
34
|
+
render_views
|
35
|
+
|
36
|
+
it_should_behave_like "Standard respond_to behaviour"
|
37
|
+
|
38
|
+
describe "with a redundant response_for" do
|
39
|
+
before do
|
40
|
+
# this should be ignored, because index has a respond_to
|
41
|
+
TestController.response_for :index do |format|
|
42
|
+
format.html
|
43
|
+
format.js
|
44
|
+
format.xml
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
48
|
+
it_should_behave_like "Standard respond_to behaviour"
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
data/spec/spec_helper.rb
ADDED
@@ -0,0 +1,27 @@
|
|
1
|
+
ENV["RAILS_ENV"] ||= "test"
|
2
|
+
require 'rails/all'
|
3
|
+
require 'rspec'
|
4
|
+
require 'rspec/rails'
|
5
|
+
require File.expand_path('../../lib/response_for', __FILE__)
|
6
|
+
|
7
|
+
RSpec.configure do |config|
|
8
|
+
config.use_transactional_fixtures = true
|
9
|
+
config.use_instantiated_fixtures = false
|
10
|
+
end
|
11
|
+
|
12
|
+
module ResponseForTest
|
13
|
+
class Application < Rails::Application
|
14
|
+
config.active_support.deprecation = :stderr
|
15
|
+
paths['config/database'] = File.expand_path('../app/database.yml', __FILE__)
|
16
|
+
paths['log'] = File.expand_path('../../../tmp/log', __FILE__)
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
class ApplicationController < ActionController::Base
|
21
|
+
self.view_paths = [File.expand_path('../app/views', __FILE__)]
|
22
|
+
end
|
23
|
+
|
24
|
+
ResponseForTest::Application.initialize!
|
25
|
+
Rails.application.routes.draw do
|
26
|
+
match '*controller/:action'
|
27
|
+
end
|