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 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