/
github.rb
61 lines (50 loc) · 1.42 KB
/
github.rb
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
require 'rubygems'
require 'httparty'
module HTTParty
class Request
def path=(uri)
@path = URI.parse(URI.escape(uri))
end
end
end
class GitHub
include HTTParty
base_uri "https://github.com/api/v2/json"
def initialize(repo, user=nil, pass=nil)
@user = user
@pass = pass
@repo = repo
end
def label_issue(issue, label)
self.class.post("/issues/label/add/#{@repo}/#{label}/#{issue}", options)
end
def remove_issue_label(issue, label)
self.class.post("/issues/label/remove/#{@repo}/#{label}/#{issue}", options)
end
def reopen_issue(issue)
self.class.post("/issues/reopen/#{@repo}/#{issue}", options)
end
def comment_issue(issue, comment)
options[:body] = {"comment" => comment}
self.class.post("/issues/comment/#{@repo}/#{issue}", options)
end
def self.issue(message)
message[/gh-(\d+)/i,1]
end
def self.closed_issues(message)
issues = message.scan(/(closes|fixes) (gh-|#)(\d+)/i).map{|m| m[2]}
return issues unless block_given?
issues.each{ |issue| yield(issue) }
end
def self.nonclosing_issues(message)
issues = message.scan(/(closes|fixes)? (gh-|#)(\d+)/i).
select{|m| m[0].nil? && m[1] != "#"}.
map{|m| m[2]}
return issues unless block_given?
issues.each{ |issue| yield(issue) }
end
private
def options
@options ||= @user.nil? ? {} : { :basic_auth => {:username => @user, :password => @pass}}
end
end