omnifocus-github 1.3.0 → 1.4.0

Sign up to get free protection for your applications and to get access to all the features.
data.tar.gz.sig CHANGED
Binary file
@@ -1,3 +1,10 @@
1
+ === 1.4.0 / 2012-11-23
2
+
3
+ * 2 minor enhancements:
4
+
5
+ * Added support for github enterprise. (jfieber)
6
+ * Added support for oauth authentication. (jfieber)
7
+
1
8
  === 1.3.0 / 2011-11-18
2
9
 
3
10
  * 1 minor enhancement:
data/README.txt CHANGED
@@ -7,6 +7,35 @@ rdoc :: http://seattlerb.rubyforge.org/omnifocus-github
7
7
 
8
8
  Plugin for omnifocus gem to provide github BTS synchronization.
9
9
 
10
+ Support for Github Enterprise:
11
+
12
+ In your git config, set the key omnifocus-github.accounts to a space
13
+ separated list of github accounts.
14
+
15
+ git config --global omnifocus-github.accounts "github myghe"
16
+
17
+ For each account API end point and authentication information are
18
+ should be stored in the git config under a key matching the
19
+ account. For example:
20
+
21
+ git config --global github.user me
22
+ git config --global github.password mypassword
23
+ git config --global myghe.api https://ghe.mydomain.com/api/v3
24
+ git config --global myghe.token 1a2b3c4d5e6f7e8d
25
+
26
+ For each account can you specify the following parameters:
27
+
28
+ * api - specify an API endpoint other than
29
+ https://api.github.com. This is so you can point this at your Github
30
+ Enterprise endpoint.
31
+
32
+ * user, password - A username and password pair for Basic http authentication.
33
+
34
+ * token - An OAuth bearer token for OAuth workflows.
35
+
36
+ If both a token and a username and password are supplied, the token
37
+ is used.
38
+
10
39
  == FEATURES/PROBLEMS:
11
40
 
12
41
  * Provides github BTS synchronization.
@@ -2,27 +2,53 @@ require 'open-uri'
2
2
  require 'json'
3
3
 
4
4
  module OmniFocus::Github
5
- VERSION = '1.3.0'
5
+ VERSION = '1.4.0'
6
6
  PREFIX = "GH"
7
7
 
8
- def populate_github_tasks
9
- # curl -i -u "#{user}:#{pass}" "https://api.github.com/issues?page=1"
10
-
11
- user = `git config --global github.user`.chomp
12
- pass = `git config --global github.password`.chomp
8
+ GH_API_DEFAULT = "https://api.github.com"
13
9
 
14
- body = fetch user, pass, 1
10
+ def populate_github_tasks
11
+ omnifocus_git_param(:accounts, "github").split(/\s+/).each do |account|
12
+ api = omnifocus_git_param(:api, GH_API_DEFAULT, account)
13
+ # Either token or user + password is required. If both
14
+ # are present, token is used.
15
+ auth = {
16
+ :user => omnifocus_git_param(:user, nil, account),
17
+ :password => omnifocus_git_param(:password, nil, account),
18
+ :token => omnifocus_git_param(:token, nil, account),
19
+ }
20
+ unless auth[:token] || (auth[:user] && auth[:password])
21
+ warn "Missing authentication parameters for account #{account}."
22
+ next
23
+ end
15
24
 
16
- process body
25
+ # process will omit the account label if nil.
26
+ # Supply nil for the default "github" account for compatibility
27
+ # with previous versions.
28
+ account_label = account == "github" ? nil : account
17
29
 
18
- (2..get_last(body)).each do |page|
19
- process fetch user, pass, page
30
+ body = fetch(api, auth, 1)
31
+ process(account_label, body)
32
+ (2..get_last(body)).each do |page|
33
+ process(account_label, fetch(api, auth, page))
34
+ end
20
35
  end
21
36
  end
22
37
 
23
- def fetch user, pass, page
24
- uri = URI.parse "https://api.github.com/issues?page=#{page}"
25
- uri.read :http_basic_authentication => [user, pass]
38
+ def omnifocus_git_param name, default = nil, prefix = "omnifocus-github"
39
+ param = `git config --global #{prefix}.#{name}`.chomp
40
+ param.empty? ? default : param
41
+ end
42
+
43
+ def fetch api, auth, page
44
+ uri = URI.parse "#{api}/issues?page=#{page}"
45
+ if auth[:token]
46
+ uri.read "Authorization" => "token #{auth[:token]}"
47
+ elsif auth[:user] && auth[:password]
48
+ uri.read :http_basic_authentication => [auth[:user], auth[:password]]
49
+ else
50
+ raise ArgumentError, "Missing authentication"
51
+ end
26
52
  end
27
53
 
28
54
  def get_last body
@@ -30,20 +56,22 @@ module OmniFocus::Github
30
56
  link and link[/page=(\d+).. rel=.last/, 1].to_i or 0
31
57
  end
32
58
 
33
- def process body
59
+ def process account, body
34
60
  JSON.parse(body).each do |issue|
61
+ pr = issue["pull_request"] && !issue["pull_request"]["diff_url"].nil?
35
62
  number = issue["number"]
36
63
  url = issue["html_url"]
37
- project = url.split(/\//)[-3]
64
+ project = [account, url.split(/\//)[-3]].compact.join("-")
38
65
  ticket_id = "#{PREFIX}-#{project}##{number}"
39
- title = "#{ticket_id}: #{issue["title"]}"
66
+ title = "#{ticket_id}: #{pr ? "[PR] " : ""}#{issue["title"]}"
67
+ note = "#{url}\n\n#{issue["body"]}"
40
68
 
41
69
  if existing[ticket_id] then
42
70
  bug_db[existing[ticket_id]][ticket_id] = true
43
71
  next
44
72
  end
45
73
 
46
- bug_db[project][ticket_id] = [title, url]
74
+ bug_db[project][ticket_id] = [title, note]
47
75
  end
48
76
  end
49
77
  end
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: omnifocus-github
3
3
  version: !ruby/object:Gem::Version
4
- hash: 27
4
+ hash: 7
5
5
  prerelease:
6
6
  segments:
7
7
  - 1
8
- - 3
8
+ - 4
9
9
  - 0
10
- version: 1.3.0
10
+ version: 1.4.0
11
11
  platform: ruby
12
12
  authors:
13
13
  - Ryan Davis
@@ -36,7 +36,7 @@ cert_chain:
36
36
  FBHgymkyj/AOSqKRIpXPhjC6
37
37
  -----END CERTIFICATE-----
38
38
 
39
- date: 2011-11-19 00:00:00 Z
39
+ date: 2012-11-23 00:00:00 Z
40
40
  dependencies:
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: omnifocus
@@ -70,22 +70,22 @@ dependencies:
70
70
  type: :runtime
71
71
  version_requirements: *id002
72
72
  - !ruby/object:Gem::Dependency
73
- name: rdoc
73
+ name: minitest
74
74
  prerelease: false
75
75
  requirement: &id003 !ruby/object:Gem::Requirement
76
76
  none: false
77
77
  requirements:
78
78
  - - ~>
79
79
  - !ruby/object:Gem::Version
80
- hash: 21
80
+ hash: 29
81
81
  segments:
82
+ - 4
82
83
  - 3
83
- - 9
84
- version: "3.9"
84
+ version: "4.3"
85
85
  type: :development
86
86
  version_requirements: *id003
87
87
  - !ruby/object:Gem::Dependency
88
- name: minitest
88
+ name: rdoc
89
89
  prerelease: false
90
90
  requirement: &id004 !ruby/object:Gem::Requirement
91
91
  none: false
@@ -94,9 +94,9 @@ dependencies:
94
94
  - !ruby/object:Gem::Version
95
95
  hash: 19
96
96
  segments:
97
- - 2
98
- - 8
99
- version: "2.8"
97
+ - 3
98
+ - 10
99
+ version: "3.10"
100
100
  type: :development
101
101
  version_requirements: *id004
102
102
  - !ruby/object:Gem::Dependency
@@ -107,11 +107,11 @@ dependencies:
107
107
  requirements:
108
108
  - - ~>
109
109
  - !ruby/object:Gem::Version
110
- hash: 27
110
+ hash: 1
111
111
  segments:
112
- - 2
113
- - 12
114
- version: "2.12"
112
+ - 3
113
+ - 3
114
+ version: "3.3"
115
115
  type: :development
116
116
  version_requirements: *id005
117
117
  description: Plugin for omnifocus gem to provide github BTS synchronization.
@@ -162,7 +162,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
162
162
  requirements: []
163
163
 
164
164
  rubyforge_project: seattlerb
165
- rubygems_version: 1.8.10
165
+ rubygems_version: 1.8.24
166
166
  signing_key:
167
167
  specification_version: 3
168
168
  summary: Plugin for omnifocus gem to provide github BTS synchronization.
metadata.gz.sig CHANGED
Binary file