sredder 0.0.4 → 0.0.5
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/.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