Commit f408721c8cd9bdc11f7fea841080fef7b7ee2a44
Exists in
master
and in
1 other branch
Merge pull request #25 from vitorbaptista/master
Returns all Choice or Questions' versions if requested
Showing
4 changed files
with
41 additions
and
3 deletions
Show diff stats
app/controllers/choices_controller.rb
@@ -96,7 +96,13 @@ class ChoicesController < InheritedResources::Base | @@ -96,7 +96,13 @@ class ChoicesController < InheritedResources::Base | ||
96 | def show | 96 | def show |
97 | @question = current_user.questions.find(params[:question_id]) | 97 | @question = current_user.questions.find(params[:question_id]) |
98 | @choice = @question.choices.find(params[:id]) | 98 | @choice = @question.choices.find(params[:id]) |
99 | - show! | 99 | + response_options = {} |
100 | + response_options[:include] = :versions if params[:version] == 'all' | ||
101 | + | ||
102 | + respond_to do |format| | ||
103 | + format.xml { render :xml => @choice.to_xml(response_options) } | ||
104 | + format.json { render :json => @choice.to_json(response_options) } | ||
105 | + end | ||
100 | end | 106 | end |
101 | 107 | ||
102 | 108 |
app/controllers/questions_controller.rb
@@ -23,13 +23,15 @@ class QuestionsController < InheritedResources::Base | @@ -23,13 +23,15 @@ class QuestionsController < InheritedResources::Base | ||
23 | @question_optional_information.each do |key, value| | 23 | @question_optional_information.each do |key, value| |
24 | optional_information << Proc.new { |options| options[:builder].tag!(key, value)} | 24 | optional_information << Proc.new { |options| options[:builder].tag!(key, value)} |
25 | end | 25 | end |
26 | + response_options = { :methods => [:item_count], :procs => optional_information } | ||
27 | + response_options[:include] = :versions if params[:version] == "all" | ||
26 | 28 | ||
27 | respond_to do |format| | 29 | respond_to do |format| |
28 | format.xml { | 30 | format.xml { |
29 | - render :xml => @question.to_xml(:methods => [:item_count], :procs => optional_information) | 31 | + render :xml => @question.to_xml(response_options) |
30 | } | 32 | } |
31 | format.js{ | 33 | format.js{ |
32 | - render :json => @question.to_json(:methods => [:item_count], :procs => optional_information) | 34 | + render :json => @question.to_json(response_options) |
33 | } | 35 | } |
34 | end | 36 | end |
35 | end | 37 | end |
spec/controllers/choices_controller_spec.rb
@@ -125,4 +125,25 @@ describe ChoicesController do | @@ -125,4 +125,25 @@ describe ChoicesController do | ||
125 | end | 125 | end |
126 | end | 126 | end |
127 | 127 | ||
128 | + describe "GET show" do | ||
129 | + it "doesn't returns all versions by default" do | ||
130 | + question = Factory(:question, :site => @user) | ||
131 | + choice = Factory(:choice, :question => question) | ||
132 | + | ||
133 | + get :show, :question_id => question.id, :id => choice.id, :format => "xml" | ||
134 | + | ||
135 | + response.code.should == "200" | ||
136 | + response.body.should_not have_tag("versions") | ||
137 | + end | ||
138 | + | ||
139 | + it "responds with all versions if requested" do | ||
140 | + question = Factory(:question, :site => @user) | ||
141 | + choice = Factory(:choice, :question => question) | ||
142 | + | ||
143 | + get :show, :question_id => question.id, :id => choice.id, :format => "xml", :version => "all" | ||
144 | + | ||
145 | + response.code.should == "200" | ||
146 | + response.body.should have_tag("versions") | ||
147 | + end | ||
148 | + end | ||
128 | end | 149 | end |
spec/controllers/questions_controller_spec.rb
@@ -17,6 +17,7 @@ describe QuestionsController do | @@ -17,6 +17,7 @@ describe QuestionsController do | ||
17 | assigns[:question].should == @question | 17 | assigns[:question].should == @question |
18 | @response.body.should have_tag("question") | 18 | @response.body.should have_tag("question") |
19 | @response.code.should == "200" | 19 | @response.code.should == "200" |
20 | + @response.body.should_not have_tag("versions") | ||
20 | end | 21 | end |
21 | 22 | ||
22 | 23 | ||
@@ -32,4 +33,12 @@ describe QuestionsController do | @@ -32,4 +33,12 @@ describe QuestionsController do | ||
32 | @response.body.should have_tag("visitor_votes") | 33 | @response.body.should have_tag("visitor_votes") |
33 | @response.body.should have_tag("visitor_ideas") | 34 | @response.body.should have_tag("visitor_ideas") |
34 | end | 35 | end |
36 | + | ||
37 | + it "responds with all versions if requested" do | ||
38 | + get :show, :id => @question.id, :format => "xml", :version => "all" | ||
39 | + | ||
40 | + assigns[:question].should == @question | ||
41 | + @response.code.should == "200" | ||
42 | + @response.body.should have_tag("versions") | ||
43 | + end | ||
35 | end | 44 | end |