Commit 84e406c8c4f3db3a10769f5b09d644d9c2c12e2a
1 parent
ad85849b
Exists in
master
and in
1 other branch
Replace issue creation interactor with Issue model
Showing
3 changed files
with
28 additions
and
58 deletions
Show diff stats
app/controllers/problems_controller.rb
@@ -62,9 +62,10 @@ class ProblemsController < ApplicationController | @@ -62,9 +62,10 @@ class ProblemsController < ApplicationController | ||
62 | end | 62 | end |
63 | 63 | ||
64 | def create_issue | 64 | def create_issue |
65 | - issue_creation = IssueCreation.new(problem, current_user, params[:tracker], request) | ||
66 | - | ||
67 | - unless issue_creation.execute | 65 | + body = "" # TODO render_issue_body |
66 | + title = "" # TODO generate_title | ||
67 | + issue = Issue.new(problem: problem, user: current_user, title: title, body: body) | ||
68 | + unless issue.save | ||
68 | flash[:error] = issue_creation.errors.full_messages.join(', ') | 69 | flash[:error] = issue_creation.errors.full_messages.join(', ') |
69 | end | 70 | end |
70 | 71 |
app/interactors/issue_creation.rb
@@ -1,55 +0,0 @@ | @@ -1,55 +0,0 @@ | ||
1 | -class IssueCreation | ||
2 | - include ActiveModel::Validations | ||
3 | - | ||
4 | - attr_reader :problem, :user, :tracker_name | ||
5 | - | ||
6 | - delegate :app, :to => :problem | ||
7 | - | ||
8 | - def initialize(problem, user, tracker_name, request) | ||
9 | - @problem = problem | ||
10 | - @user = user | ||
11 | - @tracker_name = tracker_name | ||
12 | - IssueTracker.update_url_options(request) | ||
13 | - end | ||
14 | - | ||
15 | - def execute | ||
16 | - tracker.create_issue(problem, user) if tracker | ||
17 | - errors.empty? | ||
18 | - rescue => ex | ||
19 | - Rails.logger.error "Error during issue creation: " << ex.message | ||
20 | - errors.add :base, "There was an error during issue creation: #{ex.message}" | ||
21 | - false | ||
22 | - end | ||
23 | - | ||
24 | - private | ||
25 | - | ||
26 | - def tracker | ||
27 | - return @tracker if @tracker | ||
28 | - | ||
29 | - # Create an issue on GitHub using user's github token | ||
30 | - if tracker_name == 'user_github' | ||
31 | - if !app.github_repo? | ||
32 | - errors.add :base, "This app doesn't have a GitHub repo set up." | ||
33 | - elsif !user.github_account? | ||
34 | - errors.add :base, "You haven't linked your Github account." | ||
35 | - else | ||
36 | - @tracker = ErrbitGithubPlugin::IssueTracker.new( | ||
37 | - app, { | ||
38 | - :username => user.github_login, | ||
39 | - :oauth_token => user.github_oauth_token | ||
40 | - } | ||
41 | - ) | ||
42 | - end | ||
43 | - | ||
44 | - # Or, create an issue using the App's issue tracker | ||
45 | - elsif app.issue_tracker_configured? | ||
46 | - @tracker = app.issue_tracker | ||
47 | - | ||
48 | - # Otherwise, display error about missing tracker configuration. | ||
49 | - else | ||
50 | - errors.add :base, "This app has no issue tracker setup." | ||
51 | - end | ||
52 | - | ||
53 | - @tracker | ||
54 | - end | ||
55 | -end |
@@ -0,0 +1,24 @@ | @@ -0,0 +1,24 @@ | ||
1 | +class Issue | ||
2 | + include ActiveModel::Model | ||
3 | + attr_accessor :problem, :user, :title, :body | ||
4 | + | ||
5 | + def intialize(problem: nil, user: nil, title: nil, body: nil) | ||
6 | + @problem, @user, @title, @body = problem, user, title, body | ||
7 | + end | ||
8 | + | ||
9 | + def save | ||
10 | + if tracker | ||
11 | + tracker.create_issue(title, body, user.as_document) | ||
12 | + else | ||
13 | + errors.add :base, "This app has no issue tracker setup." | ||
14 | + end | ||
15 | + errors.empty? | ||
16 | + rescue => ex | ||
17 | + errors.add :base, "There was an error during issue creation: #{ex.message}" | ||
18 | + false | ||
19 | + end | ||
20 | + | ||
21 | + def tracker | ||
22 | + problem.app.issue_tracker | ||
23 | + end | ||
24 | +end |