Commit 6523e5b903d609d72406395b5fb47b97b13ba02c
1 parent
d0894cbe
Exists in
master
and in
1 other branch
[WIP] refactor the problems_controller
Extract the filter `find_problem` in decent_exposure to get this problem
Showing
7 changed files
with
65 additions
and
50 deletions
Show diff stats
app/controllers/problems_controller.rb
... | ... | @@ -6,7 +6,6 @@ |
6 | 6 | # COLLECTION => :index, :all, :destroy_several, :resolve_several, :unresolve_several, :merge_several, :unmerge_several, :search |
7 | 7 | class ProblemsController < ApplicationController |
8 | 8 | |
9 | - before_filter :find_problem, :except => [:index, :all, :destroy_several, :resolve_several, :unresolve_several, :merge_several, :unmerge_several, :search] | |
10 | 9 | before_filter :find_selected_problems, :only => [:destroy_several, :resolve_several, :unresolve_several, :merge_several, :unmerge_several] |
11 | 10 | before_filter :set_sorting_params, :only => [:index, :all, :search] |
12 | 11 | before_filter :set_tracker_params, :only => [:create_issue] |
... | ... | @@ -18,6 +17,9 @@ class ProblemsController < ApplicationController |
18 | 17 | current_user.apps.find(params[:app_id]) |
19 | 18 | end |
20 | 19 | } |
20 | + expose(:problem) { | |
21 | + app.problems.find(params[:id]) | |
22 | + } | |
21 | 23 | |
22 | 24 | def index |
23 | 25 | app_scope = current_user.admin? ? App.all : current_user.apps |
... | ... | @@ -33,28 +35,28 @@ class ProblemsController < ApplicationController |
33 | 35 | end |
34 | 36 | |
35 | 37 | def show |
36 | - @notices = @problem.notices.reverse_ordered.page(params[:notice]).per(1) | |
38 | + @notices = problem.notices.reverse_ordered.page(params[:notice]).per(1) | |
37 | 39 | @notice = @notices.first |
38 | 40 | @comment = Comment.new |
39 | 41 | end |
40 | 42 | |
41 | 43 | def create_issue |
42 | - issue_creation = IssueCreation.new(@problem, current_user, params[:tracker]) | |
44 | + issue_creation = IssueCreation.new(problem, current_user, params[:tracker]) | |
43 | 45 | |
44 | 46 | unless issue_creation.execute |
45 | 47 | flash[:error] = issue_creation.errors[:base].first |
46 | 48 | end |
47 | 49 | |
48 | - redirect_to app_problem_path(app, @problem) | |
50 | + redirect_to app_problem_path(app, problem) | |
49 | 51 | end |
50 | 52 | |
51 | 53 | def unlink_issue |
52 | - @problem.update_attribute :issue_link, nil | |
53 | - redirect_to app_problem_path(app, @problem) | |
54 | + problem.update_attribute :issue_link, nil | |
55 | + redirect_to app_problem_path(app, problem) | |
54 | 56 | end |
55 | 57 | |
56 | 58 | def resolve |
57 | - @problem.resolve! | |
59 | + problem.resolve! | |
58 | 60 | flash[:success] = 'Great news everyone! The err has been resolved.' |
59 | 61 | redirect_to :back |
60 | 62 | rescue ActionController::RedirectBackError |
... | ... | @@ -109,10 +111,6 @@ class ProblemsController < ApplicationController |
109 | 111 | |
110 | 112 | protected |
111 | 113 | |
112 | - def find_problem | |
113 | - @problem = app.problems.find(params[:id]) | |
114 | - end | |
115 | - | |
116 | 114 | def set_tracker_params |
117 | 115 | IssueTracker.default_url_options[:host] = request.host |
118 | 116 | IssueTracker.default_url_options[:port] = request.port | ... | ... |
app/views/problems/_issue_tracker_links.html.haml
1 | 1 | - if app.issue_tracker_configured? || current_user.github_account? |
2 | - - if @problem.issue_link.present? | |
3 | - %span= link_to 'go to issue', @problem.issue_link, :class => "#{@problem.issue_type}_goto goto-issue" | |
4 | - = link_to 'unlink issue', unlink_issue_app_problem_path(app, @problem), :method => :delete, :data => { :confirm => "Unlink err issues?" }, :class => "unlink-issue" | |
5 | - - elsif @problem.issue_link == "pending" | |
6 | - %span.disabled= link_to 'creating...', '#', :class => "#{@problem.issue_type}_inactive create-issue" | |
7 | - = link_to 'retry', create_issue_app_problem_path(app, @problem), :method => :post | |
2 | + - if problem.issue_link.present? | |
3 | + %span= link_to 'go to issue', problem.issue_link, :class => "#{problem.issue_type}_goto goto-issue" | |
4 | + = link_to 'unlink issue', unlink_issue_app_problem_path(app, problem), :method => :delete, :data => { :confirm => "Unlink err issues?" }, :class => "unlink-issue" | |
5 | + - elsif problem.issue_link == "pending" | |
6 | + %span.disabled= link_to 'creating...', '#', :class => "#{problem.issue_type}_inactive create-issue" | |
7 | + = link_to 'retry', create_issue_app_problem_path(app, problem), :method => :post | |
8 | 8 | - else |
9 | 9 | - if app.github_repo? |
10 | 10 | - if current_user.can_create_github_issues? |
11 | - %span= link_to 'create issue', create_issue_app_problem_path(app, @problem, :tracker => 'user_github'), :method => :post, :class => "github_create create-issue" | |
11 | + %span= link_to 'create issue', create_issue_app_problem_path(app, problem, :tracker => 'user_github'), :method => :post, :class => "github_create create-issue" | |
12 | 12 | - elsif app.issue_tracker_configured? && app.issue_tracker.label.eql?('github') |
13 | - %span= link_to 'create issue', create_issue_app_problem_path(app, @problem), :method => :post, :class => "github_create create-issue" | |
13 | + %span= link_to 'create issue', create_issue_app_problem_path(app, problem), :method => :post, :class => "github_create create-issue" | |
14 | 14 | - if app.issue_tracker_configured? && !app.issue_tracker.label.eql?('github') |
15 | - %span= link_to 'create issue', create_issue_app_problem_path(app, @problem), :method => :post, :class => "#{app.issue_tracker.label}_create create-issue" | |
15 | + %span= link_to 'create issue', create_issue_app_problem_path(app, problem), :method => :post, :class => "#{app.issue_tracker.label}_create create-issue" | ... | ... |
app/views/problems/show.html.haml
1 | -- content_for :page_title, @problem.message | |
1 | +- content_for :page_title, problem.message | |
2 | 2 | - content_for :title_css_class, 'err_show' |
3 | -- content_for :title, @problem.error_class || truncate(@problem.message, :length => 32) | |
3 | +- content_for :title, problem.error_class || truncate(problem.message, :length => 32) | |
4 | 4 | - content_for :meta do |
5 | 5 | %strong App: |
6 | 6 | = link_to app.name, app |
7 | 7 | %strong Where: |
8 | - = @problem.where | |
8 | + = problem.where | |
9 | 9 | %br |
10 | 10 | %strong Environment: |
11 | - = @problem.environment | |
11 | + = problem.environment | |
12 | 12 | %strong Last Notice: |
13 | - = @problem.last_notice_at.to_s(:precise) | |
13 | + = problem.last_notice_at.to_s(:precise) | |
14 | 14 | - content_for :action_bar do |
15 | - - if @problem.unresolved? | |
16 | - %span= link_to 'resolve', [:resolve, app, @problem], :method => :put, :data => { :confirm => problem_confirm }, :class => 'resolve' | |
15 | + - if problem.unresolved? | |
16 | + %span= link_to 'resolve', [:resolve, app, problem], :method => :put, :data => { :confirm => problem_confirm }, :class => 'resolve' | |
17 | 17 | - if current_user.authentication_token |
18 | - %span= link_to 'iCal', polymorphic_path([app, @problem], :format => "ics", :auth_token => current_user.authentication_token), :class => "calendar_link" | |
18 | + %span= link_to 'iCal', polymorphic_path([app, problem], :format => "ics", :auth_token => current_user.authentication_token), :class => "calendar_link" | |
19 | 19 | %span>= link_to 'up', (request.env['HTTP_REFERER'] ? :back : app_problems_path(app)), :class => 'up' |
20 | 20 | %br |
21 | 21 | = render "issue_tracker_links" |
22 | 22 | |
23 | -- if @problem.comments_allowed? || @problem.comments.any? | |
23 | +- if problem.comments_allowed? || problem.comments.any? | |
24 | 24 | - content_for :comments do |
25 | 25 | %h3 Comments |
26 | - - @problem.comments.each do |comment| | |
26 | + - problem.comments.each do |comment| | |
27 | 27 | .window |
28 | 28 | %table.comment |
29 | 29 | %tr |
... | ... | @@ -37,11 +37,11 @@ |
37 | 37 | - else |
38 | 38 | %span.comment-info |
39 | 39 | = time_ago_in_words(comment.created_at, true) << " ago by [Unknown User]" |
40 | - %span.delete= link_to '✘'.html_safe, [app, @problem, comment], :method => :delete, :data => { :confirm => "Are you sure you don't need this comment?" }, :class => "destroy-comment" | |
40 | + %span.delete= link_to '✘'.html_safe, [app, problem, comment], :method => :delete, :data => { :confirm => "Are you sure you don't need this comment?" }, :class => "destroy-comment" | |
41 | 41 | %tr |
42 | 42 | %td= simple_format comment.body |
43 | - - if @problem.comments_allowed? | |
44 | - = form_for [app, @problem, @comment] do |comment_form| | |
43 | + - if problem.comments_allowed? | |
44 | + = form_for [app, problem, @comment] do |comment_form| | |
45 | 45 | %p Add a comment |
46 | 46 | = comment_form.text_area :body |
47 | 47 | = comment_form.submit "Save Comment" |
... | ... | @@ -63,7 +63,7 @@ |
63 | 63 | - if @notice |
64 | 64 | #summary |
65 | 65 | %h3 Summary |
66 | - = render 'notices/summary', :notice => @notice, :problem => @problem | |
66 | + = render 'notices/summary', :notice => @notice | |
67 | 67 | |
68 | 68 | #backtrace |
69 | 69 | %h3 Backtrace | ... | ... |
app/views/problems/show.ics.haml
spec/controllers/problems_controller_spec.rb
... | ... | @@ -138,7 +138,7 @@ describe ProblemsController do |
138 | 138 | |
139 | 139 | it "finds the problem" do |
140 | 140 | get :show, :app_id => app.id, :id => err.problem.id |
141 | - assigns(:problem).should == err.problem | |
141 | + controller.problem.should == err.problem | |
142 | 142 | end |
143 | 143 | |
144 | 144 | it "successfully render page" do |
... | ... | @@ -179,7 +179,7 @@ describe ProblemsController do |
179 | 179 | |
180 | 180 | it 'finds the problem if the user is watching the app' do |
181 | 181 | get :show, :app_id => @watched_app.to_param, :id => @watched_err.problem.id |
182 | - assigns(:problem).should == @watched_err.problem | |
182 | + controller.problem.should == @watched_err.problem | |
183 | 183 | end |
184 | 184 | |
185 | 185 | it 'raises a DocumentNotFound error if the user is not watching the app' do |
... | ... | @@ -205,7 +205,7 @@ describe ProblemsController do |
205 | 205 | @problem.app.problems.should_receive(:find).and_return(@problem.problem) |
206 | 206 | put :resolve, :app_id => @problem.app.id, :id => @problem.problem.id |
207 | 207 | controller.app.should == @problem.app |
208 | - assigns(:problem).should == @problem.problem | |
208 | + controller.problem.should == @problem.problem | |
209 | 209 | end |
210 | 210 | |
211 | 211 | it "should resolve the issue" do | ... | ... |
spec/views/problems/show.html.haml_spec.rb
1 | 1 | require 'spec_helper' |
2 | 2 | |
3 | 3 | describe "problems/show.html.haml" do |
4 | + let(:problem) { Fabricate(:problem) } | |
5 | + let(:comment) { Fabricate(:comment) } | |
6 | + | |
4 | 7 | before do |
5 | - problem = Fabricate(:problem) | |
6 | - comment = Fabricate(:comment) | |
7 | - assign :problem, problem | |
8 | - assign :comment, comment | |
9 | 8 | view.stub(:app).and_return(problem.app) |
9 | + view.stub(:problem).and_return(problem) | |
10 | + | |
11 | + assign :comment, comment | |
10 | 12 | assign :notices, problem.notices.page(1).per(1) |
11 | 13 | assign :notice, problem.notices.first |
14 | + | |
12 | 15 | controller.stub(:current_user) { Fabricate(:user) } |
13 | 16 | end |
14 | 17 | |
15 | 18 | def with_issue_tracker(tracker, problem) |
16 | 19 | problem.app.issue_tracker = tracker.new :api_token => "token token token", :project_id => "1234" |
17 | - assign :problem, problem | |
20 | + view.stub(:problem).and_return(problem) | |
18 | 21 | view.stub(:app).and_return(problem.app) |
19 | 22 | end |
20 | 23 | |
... | ... | @@ -54,7 +57,7 @@ describe "problems/show.html.haml" do |
54 | 57 | it "should link 'up' to app_problems_path if HTTP_REFERER isn't set'" do |
55 | 58 | controller.request.env['HTTP_REFERER'] = nil |
56 | 59 | problem = Fabricate(:problem_with_comments) |
57 | - assign :problem, problem | |
60 | + view.stub(:problem).and_return(problem) | |
58 | 61 | view.stub(:app).and_return(problem.app) |
59 | 62 | render |
60 | 63 | |
... | ... | @@ -67,7 +70,7 @@ describe "problems/show.html.haml" do |
67 | 70 | controller.stub(:current_user) { user } |
68 | 71 | |
69 | 72 | problem = Fabricate(:problem_with_comments, :app => Fabricate(:app, :github_repo => "test_user/test_repo")) |
70 | - assign :problem, problem | |
73 | + view.stub(:problem).and_return(problem) | |
71 | 74 | view.stub(:app).and_return(problem.app) |
72 | 75 | render |
73 | 76 | |
... | ... | @@ -77,7 +80,7 @@ describe "problems/show.html.haml" do |
77 | 80 | it 'should allow creating issue for github if application has a github tracker' do |
78 | 81 | problem = Fabricate(:problem_with_comments, :app => Fabricate(:app, :github_repo => "test_user/test_repo")) |
79 | 82 | with_issue_tracker(GithubIssuesTracker, problem) |
80 | - assign :problem, problem | |
83 | + view.stub(:problem).and_return(problem) | |
81 | 84 | view.stub(:app).and_return(problem.app) |
82 | 85 | render |
83 | 86 | |
... | ... | @@ -89,7 +92,7 @@ describe "problems/show.html.haml" do |
89 | 92 | let(:app) { App.new(:new_record => false) } |
90 | 93 | |
91 | 94 | it 'not see link to create issue' do |
92 | - assign :problem, problem | |
95 | + view.stub(:problem).and_return(problem) | |
93 | 96 | view.stub(:app).and_return(problem.app) |
94 | 97 | render |
95 | 98 | expect(view.content_for(:action_bar)).to_not match(/create issue/) |
... | ... | @@ -105,7 +108,7 @@ describe "problems/show.html.haml" do |
105 | 108 | context "with problem without issue link" do |
106 | 109 | let(:problem){ Problem.new(:new_record => false, :app => app) } |
107 | 110 | it 'not see link if no issue tracker' do |
108 | - assign :problem, problem | |
111 | + view.stub(:problem).and_return(problem) | |
109 | 112 | view.stub(:app).and_return(problem.app) |
110 | 113 | render |
111 | 114 | expect(view.content_for(:action_bar)).to match(/create issue/) |
... | ... | @@ -117,7 +120,7 @@ describe "problems/show.html.haml" do |
117 | 120 | let(:problem){ Problem.new(:new_record => false, :app => app, :issue_link => 'http://foo') } |
118 | 121 | |
119 | 122 | it 'not see link if no issue tracker' do |
120 | - assign :problem, problem | |
123 | + view.stub(:problem).and_return(problem) | |
121 | 124 | view.stub(:app).and_return(problem.app) |
122 | 125 | render |
123 | 126 | expect(view.content_for(:action_bar)).to_not match(/create issue/) |
... | ... | @@ -136,7 +139,7 @@ describe "problems/show.html.haml" do |
136 | 139 | |
137 | 140 | it 'should display comments and new comment form when no issue tracker' do |
138 | 141 | problem = Fabricate(:problem_with_comments) |
139 | - assign :problem, problem | |
142 | + view.stub(:problem).and_return(problem) | |
140 | 143 | view.stub(:app).and_return(problem.app) |
141 | 144 | render |
142 | 145 | ... | ... |
... | ... | @@ -0,0 +1,14 @@ |
1 | +require 'spec_helper' | |
2 | + | |
3 | +describe "problems/show.html.ics" do | |
4 | + let(:problem) { Fabricate(:problem) } | |
5 | + before do | |
6 | + view.stub(:problem).and_return(problem) | |
7 | + end | |
8 | + | |
9 | + it 'should work' do | |
10 | + render :template => 'problems/show.ics.haml' | |
11 | + end | |
12 | + | |
13 | + | |
14 | +end | ... | ... |