Class: PartyFoul::ExceptionHandler
- Inherits:
-
Object
- Object
- PartyFoul::ExceptionHandler
- Defined in:
- lib/party_foul/exception_handler.rb
Direct Known Subclasses
Instance Attribute Summary collapse
-
#rendered_issue ⇒ Object
Returns the value of attribute rendered_issue.
Class Method Summary collapse
-
.handle(exception, env) ⇒ Object
This handler will pass the exception and env from Rack off to a processor.
Instance Method Summary collapse
-
#create_issue ⇒ Object
Will create a new issue and a comment with the proper details.
-
#find_issue ⇒ Object
Hits the GitHub API to find the matching issue using the fingerprint.
-
#initialize(exception, env) ⇒ ExceptionHandler
constructor
Makes an attempt to determine what framework is being used and will use the proper IssueRenderer.
-
#run ⇒ Object
Begins to process the exception for GitHub Issues.
-
#update_issue(issue) ⇒ Object
Updates the given issue.
Constructor Details
#initialize(exception, env) ⇒ ExceptionHandler
Makes an attempt to determine what framework is being used and will use the proper IssueRenderer.
17 18 19 20 21 22 23 24 25 |
# File 'lib/party_foul/exception_handler.rb', line 17 def initialize(exception, env) renderer_klass = if defined?(Rails) PartyFoul::IssueRenderers::Rails else PartyFoul::IssueRenderers::Rack end self.rendered_issue = renderer_klass.new(exception, env) end |
Instance Attribute Details
#rendered_issue ⇒ Object
Returns the value of attribute rendered_issue.
2 3 4 |
# File 'lib/party_foul/exception_handler.rb', line 2 def rendered_issue @rendered_issue end |
Class Method Details
.handle(exception, env) ⇒ Object
This handler will pass the exception and env from Rack off to a processor. The default PartyFoul processor will work synchronously. Processor adapters can be written to push this logic to a background job if desired.
9 10 11 |
# File 'lib/party_foul/exception_handler.rb', line 9 def self.handle(exception, env) PartyFoul.processor.handle(exception, clean_env(env)) end |
Instance Method Details
#create_issue ⇒ Object
Will create a new issue and a comment with the proper details. All issues are labeled as ‘bug’.
43 44 45 46 47 |
# File 'lib/party_foul/exception_handler.rb', line 43 def create_issue self.sha = PartyFoul.github.references(PartyFoul.repo_path, "heads/#{PartyFoul.branch}").object.sha issue = PartyFoul.github.create_issue(PartyFoul.repo_path, rendered_issue.title, rendered_issue.body, labels: ['bug'] + rendered_issue.labels) PartyFoul.github.add_comment(PartyFoul.repo_path, issue[:number], rendered_issue.comment) end |
#find_issue ⇒ Object
Hits the GitHub API to find the matching issue using the fingerprint.
38 39 40 |
# File 'lib/party_foul/exception_handler.rb', line 38 def find_issue find_first_issue('open') || find_first_issue('closed') end |
#run ⇒ Object
Begins to process the exception for GitHub Issues. Makes an attempt to find the issue. If found will update the issue. If not found will create a new issue.
29 30 31 32 33 34 35 |
# File 'lib/party_foul/exception_handler.rb', line 29 def run if issue = find_issue update_issue(issue) else create_issue end end |
#update_issue(issue) ⇒ Object
Updates the given issue. If the issue is labeled as ‘wontfix’ nothing is done. If the issue is closed the issue is reopened and labeled as ‘regression’.
52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 |
# File 'lib/party_foul/exception_handler.rb', line 52 def update_issue(issue) label_names = issue.key?(:labels) ? issue[:labels].map {|label| label[:name] } : [] unless label_names.include?('wontfix') body = rendered_issue.update_body(issue[:body]) params = {state: 'open'} if issue[:state] == 'closed' params[:labels] = (['bug', 'regression'] + label_names).uniq end self.sha = PartyFoul.github.references(PartyFoul.repo_path, "heads/#{PartyFoul.branch}").object.sha PartyFoul.github.update_issue(PartyFoul.repo_path, issue[:number], issue.title, body, params) unless comment_limit_met?(issue[:body]) PartyFoul.github.add_comment(PartyFoul.repo_path, issue[:number], rendered_issue.comment) end end end |