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 CHANGED
@@ -15,3 +15,4 @@ spec/reports
15
15
  test/tmp
16
16
  test/version_tmp
17
17
  tmp
18
+ bin
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 (default Programming)
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
+ ```
@@ -17,10 +17,14 @@ module Sredder
17
17
  end
18
18
 
19
19
  def valid?
20
- options[:date] &&
21
- options[:title] &&
22
- options[:message] &&
23
- options[:hours]
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
@@ -1,12 +1,15 @@
1
+ require 'json'
2
+
1
3
  module Sredder
2
4
 
3
5
  class Sredderc
4
6
 
5
- attr_accessor :token, :secret
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
- params = File.read(file_path).split
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
- File.open(file_path, 'w') do |f|
26
- f.puts(secret)
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
@@ -1,3 +1,3 @@
1
1
  module Sredder
2
- VERSION = "0.0.4"
2
+ VERSION = "0.0.5"
3
3
  end
@@ -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, :token, :token=, :secret, :secret=
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
- !!token && !!secret
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, secret, token)
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.secret = access_token.token
68
- self.token = access_token.secret
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
 
@@ -20,7 +20,7 @@ module Sredder
20
20
  end
21
21
 
22
22
  def success?
23
- response && response.is_a?(Net::HTTPSuccess)
23
+ response && response.is_a?(Net::HTTPSuccess) && !self.json["error"]
24
24
  end
25
25
 
26
26
  def json
@@ -29,4 +29,4 @@ module Sredder
29
29
 
30
30
  end
31
31
 
32
- end
32
+ end
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
- # def self.run_oauth
69
- # auth = WrikeAuth.new
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
- # req = WrikeRequest.new(auth.oauth_access_token)
76
- # puts req.post('/api/json/v2/wrike.task.add', {title: 'ermahgerd ruby', description: 'blah blah blah', parents: parents}).body
86
+ options[:title] = request.json["title"]
87
+ options[:message] = request.json["body"]
77
88
 
78
- # req2 = WrikeRequest.new(auth.oauth_access_token)
79
- # puts req2.post('/api/json/v2/wrike.timelog.add', {
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
@@ -1,4 +1,5 @@
1
1
  require 'spec_helper'
2
+ # require 'debugger'
2
3
 
3
4
  RSpec.configure do |config|
4
5
  config.before :all do
@@ -15,4 +16,4 @@ RSpec.configure do |config|
15
16
  @orig_stderr = nil
16
17
  @orig_stdout = nil
17
18
  end
18
- end
19
+ end
@@ -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.secret.should == 'secret'
39
- rc.token.should == 'token'
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.secret = 'secret'
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 token= to its sredderc' do
10
- auth.token = 'banana'
11
- auth.sredderc.token.should == 'banana'
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.token = nil
23
- auth.secret = 'blah'
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.token = 'blah'
29
- auth.secret = 'blah'
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
@@ -7,4 +7,4 @@ describe Sredder do
7
7
  # Sredder.run_oauth
8
8
  end
9
9
 
10
- end
10
+ end
data/sredder.gemspec CHANGED
@@ -21,6 +21,6 @@ Gem::Specification.new do |gem|
21
21
  gem.add_dependency 'oauth'
22
22
 
23
23
  gem.add_development_dependency 'rspec'
24
-
24
+ gem.add_development_dependency 'debugger'
25
25
 
26
26
  end
metadata CHANGED
@@ -2,14 +2,14 @@
2
2
  name: sredder
3
3
  version: !ruby/object:Gem::Version
4
4
  prerelease:
5
- version: 0.0.4
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-20 00:00:00.000000000 Z
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
@@ -1,3 +0,0 @@
1
- oauth:
2
- key: 119705a437503d196da9eeab675808a4
3
- secret: 4216face9995a5d6