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 | 62 | end |
63 | 63 | |
64 | 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 | 69 | flash[:error] = issue_creation.errors.full_messages.join(', ') |
69 | 70 | end |
70 | 71 | ... | ... |
app/interactors/issue_creation.rb
... | ... | @@ -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 @@ |
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 | ... | ... |