class RubyGitIssue
Attributes
column_id[RW]
exception_data[RW]
issue_options[RW]
organization[RW]
project[RW]
repo[RW]
request[RW]
token[RW]
Public Class Methods
new(options)
click to toggle source
options ## String => Git hub developer token options ## Hash => Rails controller request data options ## Hash => Rails Exception options ## String => Github Organization options ## String => Github Repo options ## Hash => pass github issue options
# File lib/ruby_git_issue.rb, line 13 def initialize(options) self.token = options[:token] self.request = options[:request] self.exception_data = options[:exception_data] self.organization = options[:organization] self.repo = options[:repo] self.issue_options = options[:issue_options] self.project = nil self.column_id = nil end
Public Instance Methods
add_issue_to_project(issue_data, column_id)
click to toggle source
issue_data ## Stringyied Hash column_id
## Integer Method will assign issue to project column on the github project board
# File lib/ruby_git_issue.rb, line 59 def add_issue_to_project(issue_data, column_id) payload = { content_type: "Issue", content_id: issue_data['id'] } client.create_project_card(column_id, payload) # url = "#{BASE_URL}/projects/columns/#{column_id}/cards" end
client()
click to toggle source
github client from octokit
# File lib/ruby_git_issue.rb, line 25 def client Octokit::Client.new(:access_token => "#{token}") end
generate_issue(column_id=nil)
click to toggle source
Generate Github issue column_id
## Integer => Get column id from project and its columns column_id
can be blank as well. Issue will not be assigned to and project column if column_id
is blank
# File lib/ruby_git_issue.rb, line 32 def generate_issue(column_id=nil) existing_issue = client.list_issues("#{organization}/#{repo}").select{|issue| issue[:title] == issue_options[:title]}.try(:first) if existing_issue.nil? issue_data = client.create_issue("#{organization}/#{repo}", issue_options[:title][0..255], compose_body(exception_data, request), issue_options) add_issue_to_project(issue_data, column_id) unless column_id.nil? else client.add_comment("#{organization}/#{repo}", existing_issue.number, compose_body(exception_data, request)) end end
get_org_projects()
click to toggle source
Get Github project based on the organization passed while initializing client
# File lib/ruby_git_issue.rb, line 43 def get_org_projects unless organization.nil? client.org_projects(organization) end end
get_projects_columns(project_id)
click to toggle source
project_id ## Integer => Get project columns based on the Github project_id
# File lib/ruby_git_issue.rb, line 50 def get_projects_columns(project_id) unless organization.nil? client.project_columns(project_id) end end
Private Instance Methods
compose_backtrace_section(e)
click to toggle source
# File lib/ruby_git_issue.rb, line 71 def compose_backtrace_section(e) return '' if e.backtrace.empty? out = sub_title('Backtrace') out << "<pre>#{e.backtrace.join("\n")}</pre>\n" end
compose_body(e, request)
click to toggle source
# File lib/ruby_git_issue.rb, line 77 def compose_body(e, request) out = sub_title('Error') body = compose_header(e) unless e.nil? body << compose_request_section(e, request) unless request.nil? body << "\n\n" body << compose_backtrace_section(e) unless e.nil? body[0..65535] end
compose_data_section(e,data )
click to toggle source
# File lib/ruby_git_issue.rb, line 86 def compose_data_section(e,data ) return '' if data.empty? out = sub_title('Data') out << "`#{PP.pp(data, '')}`\n" end
compose_header(e)
click to toggle source
# File lib/ruby_git_issue.rb, line 92 def compose_header(e) header = e.class.to_s =~ /^[aeiou]/i ? 'An' : 'A' header << format(" %s occurred in %s#%s:\n\n", e.class.to_s, e.message, "", "") end
compose_request_section(e, request)
click to toggle source
# File lib/ruby_git_issue.rb, line 99 def compose_request_section(e, request) return '' if request.nil? out = sub_title('Request') out << "* URL : `#{request.url}`\n" out << "* HTTP Method: `#{request.method}`\n" out << "* IP address : `#{request.ip}`\n" out << "* Parameters : `#{request.parameters.inspect}`\n" out << "* Timestamp : `#{Time.now}`\n" out << "* Headers Authorization: `#{request.headers["Authorization"]}`\n" out << "* Headers Content-type: `#{request.headers["Content-Type"]}`\n" if defined?(Rails) && Rails.respond_to?(:root) out << "* Rails root : `#{Rails.root}`" end end
compose_title(e, prefix = '[Error]')
click to toggle source
# File lib/ruby_git_issue.rb, line 114 def compose_title(e, prefix = '[Error]') subject = "#{prefix} " subject << "#{e.message}" end
sub_title(text)
click to toggle source
# File lib/ruby_git_issue.rb, line 119 def sub_title(text) "## #{text}:\n\n" end