diff --git a/app/controllers/errs_controller.rb b/app/controllers/errs_controller.rb index f81fee8..8ed7d78 100644 --- a/app/controllers/errs_controller.rb +++ b/app/controllers/errs_controller.rb @@ -39,7 +39,11 @@ class ErrsController < ApplicationController set_tracker_params if @app.issue_tracker - @app.issue_tracker.create_issue @problem, current_user + begin + @app.issue_tracker.create_issue @problem, current_user + rescue IssueTrackers::IssueTrackerError => ex + flash[:error] = ex.message + end else flash[:error] = "This app has no issue tracker setup." end diff --git a/app/models/issue_trackers/github_issues_tracker.rb b/app/models/issue_trackers/github_issues_tracker.rb index 80e908d..5427761 100644 --- a/app/models/issue_trackers/github_issues_tracker.rb +++ b/app/models/issue_trackers/github_issues_tracker.rb @@ -21,8 +21,12 @@ class IssueTrackers::GithubIssuesTracker < IssueTracker def create_issue(problem, reported_by = nil) client = Octokit::Client.new(:login => username, :password => password) - issue = client.create_issue(project_id, issue_title(problem), body_template.result(binding).unpack('C*').pack('U*'), options = {}) - problem.update_attribute :issue_link, issue.issue.html_url + begin + issue = client.create_issue(project_id, issue_title(problem), body_template.result(binding).unpack('C*').pack('U*'), options = {}) + problem.update_attribute :issue_link, issue.issue.html_url + rescue Octokit::Unauthorized + raise IssueTrackers::AuthenticationError, "Could not authenticate with Github. Please check your username and password." + end end def body_template diff --git a/config/initializers/issue_trackers.rb b/config/initializers/issue_trackers.rb index 988475d..be2ec79 100644 --- a/config/initializers/issue_trackers.rb +++ b/config/initializers/issue_trackers.rb @@ -2,5 +2,6 @@ include IssueTrackers # Require all issue tracker apis in lib/issue_tracker_apis -Dir.glob(Rails.root.join('lib/issue_tracker_apis/*.rb')).each {|t| require t } - +Dir.glob(Rails.root.join('lib/issue_trackers/apis/*.rb')).each {|t| require t } +# Require issue tracker error classes +require Rails.root.join('lib/issue_trackers/errors') diff --git a/lib/issue_tracker_apis/mingle.rb b/lib/issue_tracker_apis/mingle.rb deleted file mode 100644 index 8853978..0000000 --- a/lib/issue_tracker_apis/mingle.rb +++ /dev/null @@ -1,15 +0,0 @@ -module Mingle - class Card < ActiveResource::Base - # site template ~> "https://username:password@mingle.example.com/api/v1/projects/:project_id/" - self.format = :xml - end - def self.set_site(site) - # ActiveResource seems to clone and freeze the @site variable - # after the first use. It seems that the only way to change @site - # is to drop the subclass, and then reload it. - Mingle.send(:remove_const, :Card) - load File.join(Rails.root,'lib','issue_tracker_apis','mingle.rb') - Mingle::Card.site = site - end -end - diff --git a/lib/issue_trackers/apis/mingle.rb b/lib/issue_trackers/apis/mingle.rb new file mode 100644 index 0000000..23b3069 --- /dev/null +++ b/lib/issue_trackers/apis/mingle.rb @@ -0,0 +1,15 @@ +module Mingle + class Card < ActiveResource::Base + # site template ~> "https://username:password@mingle.example.com/api/v1/projects/:project_id/" + self.format = :xml + end + def self.set_site(site) + # ActiveResource seems to clone and freeze the @site variable + # after the first use. It seems that the only way to change @site + # is to drop the subclass, and then reload it. + Mingle.send(:remove_const, :Card) + load File.join(Rails.root,'lib','issue_trackers', 'apis','mingle.rb') + Mingle::Card.site = site + end +end + diff --git a/lib/issue_trackers/errors.rb b/lib/issue_trackers/errors.rb new file mode 100644 index 0000000..ca2efbb --- /dev/null +++ b/lib/issue_trackers/errors.rb @@ -0,0 +1,4 @@ +module IssueTrackers + class IssueTrackerError < StandardError; end + class AuthenticationError < IssueTrackerError; end +end -- libgit2 0.21.2