sredder 0.0.4 → 0.0.5
Sign up to get free protection for your applications and to get access to all the features.
- data/.gitignore +1 -0
- data/README.md +9 -2
- data/lib/sredder/arg_parser.rb +13 -4
- data/lib/sredder/github_auth.rb +53 -0
- data/lib/sredder/github_request.rb +36 -0
- data/lib/sredder/sredderc.rb +8 -9
- data/lib/sredder/version.rb +1 -1
- data/lib/sredder/wrike_auth.rb +6 -5
- data/lib/sredder/wrike_request.rb +2 -2
- data/lib/sredder.rb +22 -17
- data/spec/sample.sredderc +1 -2
- data/spec/spec_helper.rb +2 -1
- data/spec/sredder/arg_parser_spec.rb +19 -1
- data/spec/sredder/sredderc_spec.rb +6 -8
- data/spec/sredder/wrike_auth_spec.rb +8 -13
- data/spec/sredder_spec.rb +1 -1
- data/sredder.gemspec +1 -1
- metadata +20 -3
- data/keys.yml +0 -3
data/.gitignore
CHANGED
data/README.md
CHANGED
@@ -16,7 +16,14 @@ Usage: sredder [options]
|
|
16
16
|
-m, --message MESSAGE The MESSAGE field to add to the wrike task
|
17
17
|
-h, --hours N The number of HOURS spent on the task
|
18
18
|
-d, --date DATE The DATE (YY/MM/DD) on which the task was performed (default today)
|
19
|
-
-f, --folder FOLDER The wrike FOLDER in which to place the task
|
19
|
+
-f, --folder FOLDER The wrike FOLDER in which to place the task
|
20
|
+
(default Programming) Shorthand is:
|
21
|
+
'p': Programming
|
22
|
+
's': Project Supervision
|
23
|
+
'r': Requirements Engineering
|
24
|
+
'a': Software architecture and design
|
25
|
+
't': Testing
|
26
|
+
-g, --github_id The Github Pull Request ID to fetch and parse
|
20
27
|
--help Show this message
|
21
28
|
--version Show version
|
22
|
-
```
|
29
|
+
```
|
data/lib/sredder/arg_parser.rb
CHANGED
@@ -17,10 +17,14 @@ module Sredder
|
|
17
17
|
end
|
18
18
|
|
19
19
|
def valid?
|
20
|
-
options[:date] &&
|
21
|
-
|
22
|
-
|
23
|
-
|
20
|
+
( options[:date] &&
|
21
|
+
options[:title] &&
|
22
|
+
options[:message] &&
|
23
|
+
options[:hours]
|
24
|
+
) || (
|
25
|
+
options[:hours] &&
|
26
|
+
options[:github_id]
|
27
|
+
)
|
24
28
|
end
|
25
29
|
|
26
30
|
# Print the usage and quit
|
@@ -56,6 +60,11 @@ module Sredder
|
|
56
60
|
options[:folder] = folder
|
57
61
|
end
|
58
62
|
|
63
|
+
opts.on("-g", "--github_id ID#",
|
64
|
+
"The Github Pull Request ID to fetch and parse") do |github_id|
|
65
|
+
options[:github_id] = github_id
|
66
|
+
end
|
67
|
+
|
59
68
|
opts.on_tail("--help", "Show this message") do
|
60
69
|
puts opts
|
61
70
|
exit
|
@@ -0,0 +1,53 @@
|
|
1
|
+
require 'oauth'
|
2
|
+
require 'forwardable'
|
3
|
+
require 'debugger'
|
4
|
+
|
5
|
+
module Sredder
|
6
|
+
|
7
|
+
class GithubAuth
|
8
|
+
|
9
|
+
extend Forwardable
|
10
|
+
|
11
|
+
attr_accessor :sredderc
|
12
|
+
attr_writer :consumer
|
13
|
+
|
14
|
+
def_delegators :sredderc, :credentials, :credentials=
|
15
|
+
|
16
|
+
def initialize(sredderc = Sredderc.new)
|
17
|
+
@sredderc = sredderc
|
18
|
+
@sredderc.load
|
19
|
+
end
|
20
|
+
|
21
|
+
def run_oauth_procedure
|
22
|
+
print "Please enter your github username: "
|
23
|
+
username = $stdin.gets.strip
|
24
|
+
val = `curl -u '#{username}' -d '{"scopes":["repo"],"client_id":"#{client_id}","client_secret":"#{client_secret}"}' https://api.github.com/authorizations`
|
25
|
+
store_tokens(JSON.parse(val)["token"])
|
26
|
+
end
|
27
|
+
|
28
|
+
def authorized?
|
29
|
+
!!credentials[:github_token]
|
30
|
+
end
|
31
|
+
|
32
|
+
def token
|
33
|
+
credentials[:github_token]
|
34
|
+
end
|
35
|
+
|
36
|
+
private
|
37
|
+
|
38
|
+
def client_id
|
39
|
+
'd1f8235b53bd2a2cf37a'
|
40
|
+
end
|
41
|
+
|
42
|
+
def client_secret
|
43
|
+
'b0c2923c4db8d2d7ba36dce1dffa00c88fea4159'
|
44
|
+
end
|
45
|
+
|
46
|
+
def store_tokens(token)
|
47
|
+
self.credentials[:github_token] = token
|
48
|
+
sredderc.save
|
49
|
+
end
|
50
|
+
|
51
|
+
end
|
52
|
+
|
53
|
+
end
|
@@ -0,0 +1,36 @@
|
|
1
|
+
require 'json'
|
2
|
+
require 'net/http'
|
3
|
+
require 'uri'
|
4
|
+
|
5
|
+
module Sredder
|
6
|
+
|
7
|
+
class GithubRequest
|
8
|
+
|
9
|
+
attr_reader :access_token
|
10
|
+
attr_accessor :response
|
11
|
+
|
12
|
+
def initialize(access_token)
|
13
|
+
@access_token = access_token
|
14
|
+
end
|
15
|
+
|
16
|
+
def get(url)
|
17
|
+
uri = URI.parse("#{url}?access_token=#{@access_token}")
|
18
|
+
|
19
|
+
http = Net::HTTP.new(uri.host, 443)
|
20
|
+
http.use_ssl = true
|
21
|
+
http.verify_mode = OpenSSL::SSL::VERIFY_NONE
|
22
|
+
|
23
|
+
@response = http.get(uri.request_uri)
|
24
|
+
end
|
25
|
+
|
26
|
+
def success?
|
27
|
+
response && response.is_a?(Net::HTTPSuccess)
|
28
|
+
end
|
29
|
+
|
30
|
+
def json
|
31
|
+
JSON.parse(@response.body)
|
32
|
+
end
|
33
|
+
|
34
|
+
end
|
35
|
+
|
36
|
+
end
|
data/lib/sredder/sredderc.rb
CHANGED
@@ -1,12 +1,15 @@
|
|
1
|
+
require 'json'
|
2
|
+
|
1
3
|
module Sredder
|
2
4
|
|
3
5
|
class Sredderc
|
4
6
|
|
5
|
-
attr_accessor :
|
7
|
+
attr_accessor :credentials
|
6
8
|
attr_reader :file_path
|
7
9
|
|
8
10
|
def initialize(path = '~/.sredderc')
|
9
11
|
@file_path = File.expand_path(path)
|
12
|
+
@credentials = {}
|
10
13
|
end
|
11
14
|
|
12
15
|
def exists?
|
@@ -15,19 +18,15 @@ module Sredder
|
|
15
18
|
|
16
19
|
def load
|
17
20
|
if exists?
|
18
|
-
|
19
|
-
self.secret = params[0]
|
20
|
-
self.token = params[1]
|
21
|
+
@credentials = JSON.parse(IO.read(file_path), :symbolize_names => true)
|
21
22
|
end
|
22
23
|
end
|
23
24
|
|
24
25
|
def save
|
25
|
-
|
26
|
-
|
27
|
-
f.puts(token)
|
28
|
-
end
|
26
|
+
json = JSON.dump(@credentials)
|
27
|
+
File.open(file_path, 'w') { |data| data << json }
|
29
28
|
end
|
30
29
|
|
31
30
|
end
|
32
31
|
|
33
|
-
end
|
32
|
+
end
|
data/lib/sredder/version.rb
CHANGED
data/lib/sredder/wrike_auth.rb
CHANGED
@@ -1,5 +1,6 @@
|
|
1
1
|
require 'oauth'
|
2
2
|
require 'forwardable'
|
3
|
+
require 'debugger'
|
3
4
|
|
4
5
|
module Sredder
|
5
6
|
|
@@ -17,7 +18,7 @@ module Sredder
|
|
17
18
|
attr_accessor :sredderc
|
18
19
|
attr_writer :consumer
|
19
20
|
|
20
|
-
def_delegators :sredderc, :
|
21
|
+
def_delegators :sredderc, :credentials, :credentials=
|
21
22
|
|
22
23
|
def initialize(sredderc = Sredderc.new)
|
23
24
|
@sredderc = sredderc
|
@@ -39,12 +40,12 @@ module Sredder
|
|
39
40
|
end
|
40
41
|
|
41
42
|
def authorized?
|
42
|
-
!!
|
43
|
+
!!credentials[:wrike_token] && !!credentials[:wrike_secret]
|
43
44
|
end
|
44
45
|
|
45
46
|
def oauth_access_token
|
46
47
|
if @access_token || authorized?
|
47
|
-
@access_token ||= OAuth::AccessToken.new(consumer,
|
48
|
+
@access_token ||= OAuth::AccessToken.new(consumer, credentials[:wrike_token], credentials[:wrike_secret])
|
48
49
|
end
|
49
50
|
end
|
50
51
|
|
@@ -64,8 +65,8 @@ module Sredder
|
|
64
65
|
|
65
66
|
def store_tokens(access_token)
|
66
67
|
@access_token = access_token
|
67
|
-
self.
|
68
|
-
self.
|
68
|
+
self.credentials[:wrike_secret] = access_token.secret
|
69
|
+
self.credentials[:wrike_token] = access_token.token
|
69
70
|
sredderc.save
|
70
71
|
end
|
71
72
|
|
data/lib/sredder.rb
CHANGED
@@ -4,6 +4,8 @@ require "sredder/util"
|
|
4
4
|
require "sredder/version"
|
5
5
|
require "sredder/wrike_auth"
|
6
6
|
require "sredder/wrike_request"
|
7
|
+
require "sredder/github_auth"
|
8
|
+
require "sredder/github_request"
|
7
9
|
|
8
10
|
module Sredder
|
9
11
|
|
@@ -13,6 +15,12 @@ module Sredder
|
|
13
15
|
args_parser.validate!
|
14
16
|
options = args_parser.options
|
15
17
|
|
18
|
+
# Github
|
19
|
+
if options[:github_id]
|
20
|
+
get_pull_request(options)
|
21
|
+
end
|
22
|
+
|
23
|
+
# Wrike
|
16
24
|
access = get_access_token
|
17
25
|
folder_ids = get_folder(access, options[:folder])
|
18
26
|
task_id = create_task(access, options[:title], options[:message], folder_ids)
|
@@ -38,6 +46,9 @@ module Sredder
|
|
38
46
|
request.json["foldersTree"]["folders"].each_with_object([]) do |folder, arr|
|
39
47
|
arr << folder['id'].to_i if folder['fullPath'] =~ regex
|
40
48
|
end
|
49
|
+
else
|
50
|
+
puts request.json
|
51
|
+
puts 'Invalid response from Wrike'
|
41
52
|
end
|
42
53
|
end
|
43
54
|
|
@@ -64,24 +75,18 @@ module Sredder
|
|
64
75
|
})
|
65
76
|
end
|
66
77
|
|
78
|
+
### Github
|
79
|
+
def self.get_pull_request(options)
|
80
|
+
auth = GithubAuth.new
|
81
|
+
auth.run_oauth_procedure unless auth.authorized?
|
67
82
|
|
68
|
-
|
69
|
-
|
70
|
-
# auth.run_oauth_procedure unless auth.authorized?
|
71
|
-
|
72
|
-
|
73
|
-
# parents = self.get_folder(auth.oauth_access_token)
|
83
|
+
request = GithubRequest.new(auth.token)
|
84
|
+
request.get("https://api.github.com/repos/cloudClinic/cloudClinic-Server/pulls/#{options[:github_id]}")
|
74
85
|
|
75
|
-
|
76
|
-
|
86
|
+
options[:title] = request.json["title"]
|
87
|
+
options[:message] = request.json["body"]
|
77
88
|
|
78
|
-
|
79
|
-
|
80
|
-
# date: Util.time_stamp,
|
81
|
-
# taskId: req.json["task"]["id"],
|
82
|
-
# hours: 3.5,
|
83
|
-
# comment: 'lolz'
|
84
|
-
# })
|
85
|
-
# end
|
89
|
+
options
|
90
|
+
end
|
86
91
|
|
87
|
-
end
|
92
|
+
end
|
data/spec/sample.sredderc
CHANGED
@@ -1,2 +1 @@
|
|
1
|
-
secret
|
2
|
-
token
|
1
|
+
{"wrike_secret":"secret","wrike_token":"token"}
|
data/spec/spec_helper.rb
CHANGED
@@ -46,6 +46,16 @@ describe Sredder::ArgParser do
|
|
46
46
|
result[:date].should == Sredder::Util.time_stamp(time)
|
47
47
|
end
|
48
48
|
|
49
|
+
it 'parses a github id as an integer' do
|
50
|
+
github_id = '120'
|
51
|
+
|
52
|
+
result = parser.parse(['-g', github_id])
|
53
|
+
result[:github_id].should == '120'
|
54
|
+
|
55
|
+
result = parser.parse(['--github_id', github_id])
|
56
|
+
result[:github_id].should == '120'
|
57
|
+
end
|
58
|
+
|
49
59
|
it 'it can print the help message' do
|
50
60
|
lambda { parser.parse(['--help']) }.should raise_error SystemExit
|
51
61
|
end
|
@@ -79,6 +89,14 @@ describe Sredder::ArgParser do
|
|
79
89
|
])
|
80
90
|
parser.valid?.should be_true
|
81
91
|
end
|
92
|
+
|
93
|
+
it 'returns true if a github pull request ID is set' do
|
94
|
+
parser.parse([
|
95
|
+
'-g', '120',
|
96
|
+
'-h', '1'
|
97
|
+
])
|
98
|
+
parser.valid?.should be_true
|
99
|
+
end
|
82
100
|
end
|
83
101
|
|
84
102
|
describe '#validate!' do
|
@@ -93,4 +111,4 @@ describe Sredder::ArgParser do
|
|
93
111
|
end
|
94
112
|
end
|
95
113
|
|
96
|
-
end
|
114
|
+
end
|
@@ -35,8 +35,8 @@ describe Sredder::Sredderc do
|
|
35
35
|
it 'loads the token and secret from the file if it exists' do
|
36
36
|
rc = Sredder::Sredderc.new(sample_file)
|
37
37
|
rc.load
|
38
|
-
rc.
|
39
|
-
rc.
|
38
|
+
rc.credentials[:wrike_secret].should == 'secret'
|
39
|
+
rc.credentials[:wrike_token].should == 'token'
|
40
40
|
end
|
41
41
|
|
42
42
|
end
|
@@ -44,17 +44,15 @@ describe Sredder::Sredderc do
|
|
44
44
|
describe '#save' do
|
45
45
|
|
46
46
|
it 'writes the data to the file' do
|
47
|
-
io_stub = stub('io')
|
48
|
-
io_stub.should_receive(:puts).with('secret')
|
49
|
-
io_stub.should_receive(:puts).with('token')
|
47
|
+
io_stub = stub('io',:<< => {})
|
50
48
|
File.stub(:open).and_yield(io_stub)
|
51
49
|
|
52
50
|
rc = Sredder::Sredderc.new(sample_file)
|
53
|
-
rc.
|
54
|
-
rc.token = 'token'
|
51
|
+
rc.credentials[:wrike_secret] = 'secret'
|
52
|
+
rc.credentials[:token] = 'token'
|
55
53
|
rc.save
|
56
54
|
end
|
57
55
|
|
58
56
|
end
|
59
57
|
|
60
|
-
end
|
58
|
+
end
|
@@ -6,30 +6,25 @@ describe Sredder::WrikeAuth do
|
|
6
6
|
|
7
7
|
let(:auth) { Sredder::WrikeAuth.new }
|
8
8
|
|
9
|
-
it 'delegates
|
10
|
-
auth.
|
11
|
-
auth.sredderc.
|
12
|
-
end
|
13
|
-
|
14
|
-
it 'delegates secret= to its sredderc' do
|
15
|
-
auth.secret = 'banana'
|
16
|
-
auth.sredderc.secret.should == 'banana'
|
9
|
+
it 'delegates credentials= to its sredderc' do
|
10
|
+
auth.credentials[:wrike_token] = 'banana'
|
11
|
+
auth.sredderc.credentials[:wrike_token].should == 'banana'
|
17
12
|
end
|
18
13
|
|
19
14
|
describe '#authorized?' do
|
20
15
|
|
21
16
|
it 'returns false if the token and secret attrs not are set' do
|
22
|
-
auth.
|
23
|
-
auth.
|
17
|
+
auth.credentials[:wrike_token] = nil
|
18
|
+
auth.credentials[:wrike_secret] = 'blah'
|
24
19
|
auth.authorized?.should be_false
|
25
20
|
end
|
26
21
|
|
27
22
|
it 'returns true if the token and secret attrs are set' do
|
28
|
-
auth.
|
29
|
-
auth.
|
23
|
+
auth.credentials[:wrike_token] = 'blah'
|
24
|
+
auth.credentials[:wrike_secret] = 'blah'
|
30
25
|
auth.authorized?.should be_true
|
31
26
|
end
|
32
27
|
|
33
28
|
end
|
34
29
|
|
35
|
-
end
|
30
|
+
end
|
data/spec/sredder_spec.rb
CHANGED
data/sredder.gemspec
CHANGED
metadata
CHANGED
@@ -2,14 +2,14 @@
|
|
2
2
|
name: sredder
|
3
3
|
version: !ruby/object:Gem::Version
|
4
4
|
prerelease:
|
5
|
-
version: 0.0.
|
5
|
+
version: 0.0.5
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
8
8
|
- Matthew Robertson
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2012-12-
|
12
|
+
date: 2012-12-21 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
version_requirements: !ruby/object:Gem::Requirement
|
@@ -43,6 +43,22 @@ dependencies:
|
|
43
43
|
- !ruby/object:Gem::Version
|
44
44
|
version: '0'
|
45
45
|
none: false
|
46
|
+
- !ruby/object:Gem::Dependency
|
47
|
+
version_requirements: !ruby/object:Gem::Requirement
|
48
|
+
requirements:
|
49
|
+
- - ! '>='
|
50
|
+
- !ruby/object:Gem::Version
|
51
|
+
version: '0'
|
52
|
+
none: false
|
53
|
+
name: debugger
|
54
|
+
type: :development
|
55
|
+
prerelease: false
|
56
|
+
requirement: !ruby/object:Gem::Requirement
|
57
|
+
requirements:
|
58
|
+
- - ! '>='
|
59
|
+
- !ruby/object:Gem::Version
|
60
|
+
version: '0'
|
61
|
+
none: false
|
46
62
|
description: Sred the gnarl of tracking the wriketious deeds.
|
47
63
|
email:
|
48
64
|
- matthew@cloudclinic.ca
|
@@ -57,9 +73,10 @@ files:
|
|
57
73
|
- README.md
|
58
74
|
- Rakefile
|
59
75
|
- bin/sredder
|
60
|
-
- keys.yml
|
61
76
|
- lib/sredder.rb
|
62
77
|
- lib/sredder/arg_parser.rb
|
78
|
+
- lib/sredder/github_auth.rb
|
79
|
+
- lib/sredder/github_request.rb
|
63
80
|
- lib/sredder/sredderc.rb
|
64
81
|
- lib/sredder/util.rb
|
65
82
|
- lib/sredder/version.rb
|
data/keys.yml
DELETED