Class: GitHub

Inherits:
Object
  • Object
show all
Defined in:
lib/tasks/manage-issues.rb

Defined Under Namespace

Classes: Comment, HashClass, Issue

Constant Summary

STATES =
{
'IMPORTANT-READ'    =>  [:keep, :no_feedback],
'on-hold'           =>  [:keep, :no_feedback],
'in-progress'       =>  [:keep, :no_feedback],
'feedback-required' =>  :keep,
'feature-request'   =>  [:keep, :no_feedback],
'release-blocker'   =>  :keep,
'no-feedback'       =>  :keep
}
CONFIGFILE =
File.join(File.dirname(__FILE__), File.basename(__FILE__, File.extname(__FILE__))) + '.rc'
CONFIG =
File.exists?(CONFIGFILE) ? YAML::load(File.open(CONFIGFILE)) : {}
ROOT =
'http://github.com/api/v2/yaml/'

Class Method Summary (collapse)

Instance Method Summary (collapse)

Constructor Details

- (GitHub) initialize(user, repo)

A new instance of GitHub



119
120
121
122
# File 'lib/tasks/manage-issues.rb', line 119

def initialize(user, repo)
  @user = user
  @repo = repo
end

Class Method Details

+ (Object) states(cond)



180
181
182
# File 'lib/tasks/manage-issues.rb', line 180

def self.states(cond)
  return GitHub::STATES.keys.select{|k| GitHub::STATES[k] == cond || (GitHub::STATES[k].is_a?(Array) && GitHub::STATES[k].include?(cond))}
end

Instance Method Details

- (Object) committers



176
177
178
# File 'lib/tasks/manage-issues.rb', line 176

def committers
  return ['friflaj']
end

- (Object) get(url)



124
125
126
127
128
129
130
131
132
133
134
135
136
# File 'lib/tasks/manage-issues.rb', line 124

def get(url)
  url = url.gsub(/:user/, @user).gsub(/:repo/, @repo)
  url = "#{GitHub::ROOT}#{url}"
  data = Net::HTTP.get(URI.parse(url))
  begin
    return YAML::load(data)
  rescue
    File.open('/tmp/github-issues.txt', 'w') do |f|
      f.write(data)
    end
    raise "Failed to load parsable data from #{url}, data in /tmp/github-issues.txt"
  end
end

- (Object) issue(id)



151
152
153
# File 'lib/tasks/manage-issues.rb', line 151

def issue(id)
  return Issue.new(self, get("issues/show/:user/:repo/#{id}")['issue'])
end

- (Object) issues(state = :open)



147
148
149
# File 'lib/tasks/manage-issues.rb', line 147

def issues(state = :open)
  return get("issues/list/:user/:repo/#{state}")['issues'].collect { |i| Issue.new(self, i) }
end

- (Object) labels(which = :all)



155
156
157
158
159
160
# File 'lib/tasks/manage-issues.rb', line 155

def labels(which = :all)
  return get('issues/labels/:user/:repo')['labels'] if which == :all
  return issues.collect{|i| i.labels}.flatten.compact.uniq if which == :active
  return (issues.collect{|i| i.labels(:calculate)}.flatten + GitHub.states(:keep)).compact.uniq if which == :calculate
  raise "Unexpected selector #{which.inspect}"
end

- (Object) labels=(new)



162
163
164
165
166
167
168
169
170
171
172
173
174
# File 'lib/tasks/manage-issues.rb', line 162

def labels=(new)
  old = labels
  remove = old - new
  add = new - old

  # post user and api key here
  remove.each {|l|
    post("issues/label/remove/:user/:repo/#{l}")
  }
  add.each {|l|
    post("issues/label/add/:user/:repo/#{l}")
  }
end

- (Object) post(url)



138
139
140
141
142
143
144
145
# File 'lib/tasks/manage-issues.rb', line 138

def post(url)
  auth = {'login' => GitHub::CONFIG['username'], 'token' => GitHub::CONFIG['token']}
  url = url.gsub(/:user/, @user).gsub(/:repo/, @repo)
  url = "#{GitHub::ROOT}#{url}"
  r = Net::HTTP.post_form(URI.parse(url), auth)
  return r.body if r.is_a?(Net::HTTPSuccess)
  raise "#{url}: #{r.message} (#{auth.inspect})"
end