ghi 0.9.0.20120731 → 0.9.0.20121114

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
data/lib/ghi.rb CHANGED
@@ -105,9 +105,9 @@ EOF
105
105
  exit 1
106
106
  end
107
107
 
108
- def config key
109
- var = key.gsub('core', 'git').gsub('.', '_').upcase
110
- value = ENV[var] || `git config #{key}`.chomp
108
+ def config key, upcase = true
109
+ var = key.gsub('core', 'git').gsub '.', '_'
110
+ value = ENV[upcase ? var.upcase : var] || `git config #{key}`.chomp
111
111
  value unless value.empty?
112
112
  end
113
113
 
@@ -54,6 +54,8 @@ module GHI
54
54
  :patch => Net::HTTP::Patch,
55
55
  :delete => Net::HTTP::Delete
56
56
  }
57
+ HOST = 'api.github.com'
58
+ PORT = 443
57
59
 
58
60
  attr_reader :username, :password
59
61
  def initialize username = nil, password = nil
@@ -102,7 +104,15 @@ module GHI
102
104
  end
103
105
  req.basic_auth username, password if username && password
104
106
 
105
- http = Net::HTTP.new 'api.github.com', 443
107
+ proxy = GHI.config 'https.proxy', false
108
+ proxy ||= GHI.config 'http.proxy', false
109
+ if proxy
110
+ proxy = URI.parse proxy
111
+ http = Net::HTTP::Proxy(proxy.host, proxy.port).new HOST, PORT
112
+ else
113
+ http = Net::HTTP.new HOST, PORT
114
+ end
115
+
106
116
  http.use_ssl = true
107
117
  http.verify_mode = OpenSSL::SSL::VERIFY_NONE # FIXME 1.8.7
108
118
 
@@ -36,6 +36,7 @@ EOF
36
36
  assigns[:assignee] = args.pop || Authorization.username
37
37
  end
38
38
  if assigns.key? :assignee
39
+ assigns[:assignee].sub! /^@/, ''
39
40
  assigns[:args].concat(
40
41
  assigns[:assignee] ? %W(-u #{assigns[:assignee]}) : %w(--no-assign)
41
42
  )
@@ -22,7 +22,7 @@ EOF
22
22
  global = true
23
23
  options.parse! args.empty? ? %w(-h) : args
24
24
 
25
- if self.action == 'auth'
25
+ if action == 'auth'
26
26
  assigns[:password] = Authorization.password || get_password
27
27
  Authorization.authorize!(
28
28
  assigns[:username], assigns[:password], assigns[:local]
@@ -6,6 +6,7 @@ module GHI
6
6
  attr_accessor :web
7
7
  attr_accessor :reverse
8
8
  attr_accessor :quiet
9
+ attr_accessor :exclude_pull_requests
9
10
 
10
11
  def options
11
12
  OptionParser.new do |opts|
@@ -35,6 +36,7 @@ module GHI
35
36
  opts.on '--reverse', 'reverse (ascending) sort order' do
36
37
  self.reverse = !reverse
37
38
  end
39
+ opts.on('-p', '--no-pulls','exclude pull requests') { self.exclude_pull_requests = true }
38
40
  opts.on(
39
41
  '--since <date>', 'issues more recent than',
40
42
  "e.g., '2011-04-30'"
@@ -68,7 +70,7 @@ module GHI
68
70
  opts.on(
69
71
  '-u', '--[no-]assignee [<user>]', 'assigned to specified user'
70
72
  ) do |assignee|
71
- assignee = assignee.sub /^@/, ''
73
+ assignee = assignee.sub /^@/, '' if assignee
72
74
  assigns[:assignee] = any_or_none_or assignee
73
75
  end
74
76
  opts.on '--mine', 'assigned to you' do
@@ -113,6 +115,9 @@ module GHI
113
115
  print "\r#{CURSOR[:up][1]}" if header && paginate?
114
116
  page header do
115
117
  issues = res.body
118
+ if exclude_pull_requests
119
+ issues = issues.reject {|i| i["pull_request"].any? {|k,v| !v.nil? } }
120
+ end
116
121
  if verbose
117
122
  puts issues.map { |i| format_issue i }
118
123
  else
@@ -1,12 +1,13 @@
1
1
  module GHI
2
2
  module Commands
3
3
  class Show < Command
4
- attr_accessor :web
4
+ attr_accessor :patch, :web
5
5
 
6
6
  def options
7
7
  OptionParser.new do |opts|
8
8
  opts.banner = 'usage: ghi show <issueno>'
9
9
  opts.separator ''
10
+ opts.on('-p', '--patch') { self.patch = true }
10
11
  opts.on('-w', '--web') { self.web = true }
11
12
  end
12
13
  end
@@ -15,18 +16,27 @@ module GHI
15
16
  require_issue
16
17
  require_repo
17
18
  options.parse! args
19
+ patch_path = "pull/#{issue}.patch" if patch # URI also in API...
18
20
  if web
19
- Web.new(repo).open "issues/#{issue}"
21
+ Web.new(repo).open patch_path || "issues/#{issue}"
20
22
  else
21
- i = throb { api.get "/repos/#{repo}/issues/#{issue}" }.body
22
- page do
23
- puts format_issue(i)
24
- n = i['comments']
25
- if n > 0
26
- puts "#{n} comment#{'s' unless n == 1}:\n\n"
27
- Comment.execute %W(-l #{issue} -- #{repo})
23
+ if patch_path
24
+ i = throb { Web.new(repo).curl patch_path }
25
+ page do
26
+ puts i
27
+ break
28
+ end
29
+ else
30
+ i = throb { api.get "/repos/#{repo}/issues/#{issue}" }.body
31
+ page do
32
+ puts format_issue(i)
33
+ n = i['comments']
34
+ if n > 0
35
+ puts "#{n} comment#{'s' unless n == 1}:\n\n"
36
+ Comment.execute %W(-l #{issue} -- #{repo})
37
+ end
38
+ break
28
39
  end
29
- break
30
40
  end
31
41
  end
32
42
  end
@@ -4,7 +4,7 @@ module GHI
4
4
  MAJOR = 0
5
5
  MINOR = 9
6
6
  PATCH = 0
7
- PRE = 20120731
7
+ PRE = 20121114
8
8
 
9
9
  VERSION = [MAJOR, MINOR, PATCH, PRE].compact.join '.'
10
10
 
@@ -31,11 +31,11 @@ module GHI
31
31
 
32
32
  def puts *strings
33
33
  strings = strings.flatten.map { |s|
34
- s.gsub(/@([^@\s]+)/) {
35
- if $1 == Authorization.username
36
- bright { fg(:yellow) { "@#$1" } }
34
+ s.gsub(/(^| )*@([^@\s]+)/) {
35
+ if $2 == Authorization.username
36
+ bright { fg(:yellow) { "#$1@#$2" } }
37
37
  else
38
- bright { "@#$1" }
38
+ bright { "#$1@#$2" }
39
39
  end
40
40
  }
41
41
  }
@@ -1,3 +1,4 @@
1
+ require 'open-uri'
1
2
  require 'uri'
2
3
 
3
4
  module GHI
@@ -10,17 +11,21 @@ module GHI
10
11
  end
11
12
 
12
13
  def open path = '', params = {}
13
- unless params.empty?
14
- q = params.map { |k, v| "#{CGI.escape k.to_s}=#{CGI.escape v.to_s}" }
15
- path += "?#{q.join '&'}"
16
- end
17
- system "open '#{uri + path}'"
14
+ system "open '#{uri_for path, params}'"
15
+ end
16
+
17
+ def curl path = '', params = {}
18
+ uri_for(path, params).open.read
18
19
  end
19
20
 
20
21
  private
21
22
 
22
- def uri
23
- URI(BASE_URI) + "#{base}/"
23
+ def uri_for path, params
24
+ unless params.empty?
25
+ q = params.map { |k, v| "#{CGI.escape k.to_s}=#{CGI.escape v.to_s}" }
26
+ path += "?#{q.join '&'}"
27
+ end
28
+ URI(BASE_URI) + "#{base}/" + path
24
29
  end
25
30
  end
26
31
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ghi
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.9.0.20120731
4
+ version: 0.9.0.20121114
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-07-31 00:00:00.000000000 Z
12
+ date: 2012-11-14 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rake