issue.rb
1.59 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
class Issue
include ActiveModel::Model
attr_accessor :problem, :user, :body
def issue_tracker
@issue_tracker ||= problem.app.issue_tracker
end
def tracker
@tracker ||= issue_tracker && issue_tracker.tracker
end
def render_body_args
if tracker.respond_to?(:render_body_args)
tracker.render_body_args
else
['issue_trackers/issue', formats: [:md]]
end
end
def title
if tracker.respond_to?(:title)
tracker.title
else
"[#{problem.environment}][#{problem.where}] #{problem.message.to_s.truncate(100)}"
end
end
def close
errors.add :base, "This app has no issue tracker" unless issue_tracker
return false if errors.present?
tracker.errors.each { |k, err| errors.add k, err }
return false if errors.present?
if issue_tracker.respond_to? :close_issue
issue_tracker.close_issue(problem.issue_link, user: user.as_document)
end
errors.empty?
rescue => ex
errors.add :base, "There was an error during issue closing: #{ex.message}"
false
end
def save
errors.add :base, "The issue has no body" unless body
errors.add :base, "This app has no issue tracker" unless issue_tracker
return false if errors.present?
tracker.errors.each { |k, err| errors.add k, err }
return false if errors.present?
url = issue_tracker.create_issue(title, body, user: user.as_document)
problem.update_attributes(issue_link: url, issue_type: tracker.class.label)
errors.empty?
rescue => ex
errors.add :base, "There was an error during issue creation: #{ex.message}"
false
end
end