Skip to content

Commit 256a9c9

Browse files
committed
Extract Decorator Step Eight
* Invert control
1 parent 77b22c5 commit 256a9c9

File tree

5 files changed

+12
-49
lines changed

5 files changed

+12
-49
lines changed

example_app/app/controllers/summaries_controller.rb

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,19 @@
11
class SummariesController < ApplicationController
22
def show
33
@survey = Survey.find(params[:survey_id])
4-
@summaries = @survey.summaries_using(summarizer, constraints)
4+
@summaries = @survey.summaries_using(decorated_summarizer)
55
end
66

77
private
88

9+
def decorated_summarizer
10+
if include_unanswered?
11+
summarizer
12+
else
13+
UnansweredQuestionHider.new(summarizer, current_user)
14+
end
15+
end
16+
917
def summarizer
1018
summarizer_class.new(user: current_user)
1119
end
@@ -14,14 +22,6 @@ def summarizer_class
1422
"Summarizer::#{params[:id].classify}".constantize
1523
end
1624

17-
def constraints
18-
if include_unanswered?
19-
{}
20-
else
21-
{ answered_by: current_user }
22-
end
23-
end
24-
2525
def include_unanswered?
2626
params[:unanswered]
2727
end

example_app/app/models/survey.rb

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,10 +7,9 @@ class Survey < ActiveRecord::Base
77
has_many :completions
88
has_many :questions
99

10-
def summaries_using(summarizer, options = {})
10+
def summaries_using(summarizer)
1111
questions.map do |question|
12-
hider = UnansweredQuestionHider.new(summarizer, options[:answered_by])
13-
question.summary_using(hider)
12+
question.summary_using(summarizer)
1413
end
1514
end
1615
end

example_app/app/models/unanswered_question_hider.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,6 @@ def summarize(question)
1717
private
1818

1919
def hide_unanswered_question?(question)
20-
@user && !question.answered_by?(@user)
20+
!question.answered_by?(@user)
2121
end
2222
end

example_app/spec/models/survey_spec.rb

Lines changed: 0 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -20,32 +20,6 @@
2020
result.map(&:value).should == %w(result result)
2121
end
2222

23-
it 'applies the given summarizer to each question answered by the user' do
24-
user = build_stubbed(:user)
25-
answered_question = stub_question(user: user, answered: true)
26-
unanswered_question = stub_question(user: user, answered: false)
27-
questions = [answered_question, unanswered_question]
28-
questions.stubs(:answered_by).with(user).returns(questions)
29-
survey = build_stubbed(:survey, questions: questions)
30-
summarizer = stub_summarizer
31-
32-
result = survey.summaries_using(summarizer, answered_by: user)
33-
34-
should_summarize_questions [answered_question], summarizer
35-
result.map(&:title).should eq questions.map(&:title)
36-
result.map(&:value).
37-
should eq ['result', "You haven't answered this question"]
38-
end
39-
40-
def stub_question(arguments)
41-
build_stubbed(:question).tap do |question|
42-
question.
43-
stubs(:answered_by?).
44-
with(arguments[:user]).
45-
returns(arguments[:answered])
46-
end
47-
end
48-
4923
def stub_summarizer
5024
stub('summarizer', summarize: 'result')
5125
end

example_app/spec/models/unanswered_question_hider_spec.rb

Lines changed: 0 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -23,16 +23,6 @@
2323
result.should eq 'value'
2424
end
2525

26-
it 'delegates to the summarizer without a user' do
27-
question = build_stubbed(:question)
28-
summarizer = stub_summarizer(question, 'value')
29-
hider = UnansweredQuestionHider.new(summarizer, nil)
30-
31-
result = hider.summarize(question)
32-
33-
result.should eq 'value'
34-
end
35-
3626
def stub_summarizer(question, value)
3727
stub('summarizer').tap do |summarizer|
3828
summarizer.stubs(:summarize).with(question).returns(value)

0 commit comments

Comments
 (0)