toolshed 0.0.5 → 0.0.6

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.
Files changed (44) hide show
  1. checksums.yaml +4 -4
  2. data/.travis.yml +14 -0
  3. data/Rakefile +11 -0
  4. data/bin/toolshed.rb +95 -16
  5. data/lib/toolshed/base.rb +7 -0
  6. data/lib/toolshed/cli.rb +13 -6
  7. data/lib/toolshed/client.rb +105 -83
  8. data/lib/toolshed/commands/checkout_branch.rb +26 -0
  9. data/lib/toolshed/commands/create_branch.rb +60 -0
  10. data/lib/toolshed/commands/create_pivotal_tracker_note.rb +9 -4
  11. data/lib/toolshed/commands/create_pull_request.rb +137 -0
  12. data/lib/toolshed/commands/delete_branch.rb +27 -0
  13. data/lib/toolshed/commands/get_daily_time_update.rb +21 -0
  14. data/lib/toolshed/commands/get_pivotal_tracker_story_information.rb +6 -3
  15. data/lib/toolshed/commands/list_branches.rb +13 -0
  16. data/lib/toolshed/commands/push_branch.rb +11 -0
  17. data/lib/toolshed/commands/update_pivotal_tracker_story_status.rb +8 -5
  18. data/lib/toolshed/git/git.rb +134 -0
  19. data/lib/toolshed/git/github.rb +88 -0
  20. data/lib/toolshed/ticket_tracking/pivotal_tracker.rb +111 -0
  21. data/lib/toolshed/ticket_tracking/ticket_tracking.rb +6 -0
  22. data/lib/toolshed/time_tracking/harvest.rb +68 -0
  23. data/lib/toolshed/time_tracking/time_tracking.rb +6 -0
  24. data/lib/toolshed/version.rb +1 -1
  25. data/lib/toolshed.rb +8 -2
  26. data/test/commands/checkout_branch_test.rb +28 -0
  27. data/test/commands/commands_helper.rb +2 -0
  28. data/test/commands/create_branch_test.rb +44 -0
  29. data/test/commands/create_pull_request_test.rb +125 -0
  30. data/test/commands/delete_branch_test.rb +75 -0
  31. data/test/commands/push_branch_test.rb +49 -0
  32. data/test/config.rb +1 -0
  33. data/test/git/git_helper.rb +31 -0
  34. data/test/git/git_test.rb +115 -0
  35. data/test/git/github_test.rb +91 -0
  36. data/test/helper.rb +98 -0
  37. data/toolshed.gemspec +8 -0
  38. metadata +151 -9
  39. data/lib/toolshed/commands/checkout_git_branch.rb +0 -23
  40. data/lib/toolshed/commands/create_git_branch.rb +0 -28
  41. data/lib/toolshed/commands/create_github_pull_request.rb +0 -77
  42. data/lib/toolshed/commands/push_git_branch.rb +0 -10
  43. data/lib/toolshed/github.rb +0 -89
  44. data/lib/toolshed/pivotal_tracker.rb +0 -87
data/toolshed.gemspec CHANGED
@@ -22,7 +22,15 @@ Gem::Specification.new do |spec|
22
22
  spec.add_dependency "httparty"
23
23
  spec.add_dependency "json"
24
24
  spec.add_dependency "pivotal-tracker"
25
+ spec.add_dependency "harvested"
26
+ spec.add_dependency "veto"
25
27
 
26
28
  spec.add_development_dependency "bundler", "~> 1.3"
27
29
  spec.add_development_dependency "rake"
30
+ spec.add_development_dependency 'mocha'
31
+ spec.add_development_dependency 'faker'
32
+ spec.add_development_dependency 'test-unit', '~> 2.5.5'
33
+ spec.add_development_dependency 'debugger'
34
+ spec.add_development_dependency 'ci_reporter'
35
+ spec.add_development_dependency 'simplecov'
28
36
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: toolshed
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.5
4
+ version: 0.0.6
5
5
  platform: ruby
6
6
  authors:
7
7
  - test
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-02-03 00:00:00.000000000 Z
11
+ date: 2014-02-21 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: httparty
@@ -52,6 +52,34 @@ dependencies:
52
52
  - - '>='
53
53
  - !ruby/object:Gem::Version
54
54
  version: '0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: harvested
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - '>='
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ type: :runtime
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - '>='
67
+ - !ruby/object:Gem::Version
68
+ version: '0'
69
+ - !ruby/object:Gem::Dependency
70
+ name: veto
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - '>='
74
+ - !ruby/object:Gem::Version
75
+ version: '0'
76
+ type: :runtime
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - '>='
81
+ - !ruby/object:Gem::Version
82
+ version: '0'
55
83
  - !ruby/object:Gem::Dependency
56
84
  name: bundler
57
85
  requirement: !ruby/object:Gem::Requirement
@@ -80,6 +108,90 @@ dependencies:
80
108
  - - '>='
81
109
  - !ruby/object:Gem::Version
82
110
  version: '0'
111
+ - !ruby/object:Gem::Dependency
112
+ name: mocha
113
+ requirement: !ruby/object:Gem::Requirement
114
+ requirements:
115
+ - - '>='
116
+ - !ruby/object:Gem::Version
117
+ version: '0'
118
+ type: :development
119
+ prerelease: false
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ requirements:
122
+ - - '>='
123
+ - !ruby/object:Gem::Version
124
+ version: '0'
125
+ - !ruby/object:Gem::Dependency
126
+ name: faker
127
+ requirement: !ruby/object:Gem::Requirement
128
+ requirements:
129
+ - - '>='
130
+ - !ruby/object:Gem::Version
131
+ version: '0'
132
+ type: :development
133
+ prerelease: false
134
+ version_requirements: !ruby/object:Gem::Requirement
135
+ requirements:
136
+ - - '>='
137
+ - !ruby/object:Gem::Version
138
+ version: '0'
139
+ - !ruby/object:Gem::Dependency
140
+ name: test-unit
141
+ requirement: !ruby/object:Gem::Requirement
142
+ requirements:
143
+ - - ~>
144
+ - !ruby/object:Gem::Version
145
+ version: 2.5.5
146
+ type: :development
147
+ prerelease: false
148
+ version_requirements: !ruby/object:Gem::Requirement
149
+ requirements:
150
+ - - ~>
151
+ - !ruby/object:Gem::Version
152
+ version: 2.5.5
153
+ - !ruby/object:Gem::Dependency
154
+ name: debugger
155
+ requirement: !ruby/object:Gem::Requirement
156
+ requirements:
157
+ - - '>='
158
+ - !ruby/object:Gem::Version
159
+ version: '0'
160
+ type: :development
161
+ prerelease: false
162
+ version_requirements: !ruby/object:Gem::Requirement
163
+ requirements:
164
+ - - '>='
165
+ - !ruby/object:Gem::Version
166
+ version: '0'
167
+ - !ruby/object:Gem::Dependency
168
+ name: ci_reporter
169
+ requirement: !ruby/object:Gem::Requirement
170
+ requirements:
171
+ - - '>='
172
+ - !ruby/object:Gem::Version
173
+ version: '0'
174
+ type: :development
175
+ prerelease: false
176
+ version_requirements: !ruby/object:Gem::Requirement
177
+ requirements:
178
+ - - '>='
179
+ - !ruby/object:Gem::Version
180
+ version: '0'
181
+ - !ruby/object:Gem::Dependency
182
+ name: simplecov
183
+ requirement: !ruby/object:Gem::Requirement
184
+ requirements:
185
+ - - '>='
186
+ - !ruby/object:Gem::Version
187
+ version: '0'
188
+ type: :development
189
+ prerelease: false
190
+ version_requirements: !ruby/object:Gem::Requirement
191
+ requirements:
192
+ - - '>='
193
+ - !ruby/object:Gem::Version
194
+ version: '0'
83
195
  description: Utility that will automate simple daily tasks developers perform like
84
196
  creating a Github pull request
85
197
  email:
@@ -90,6 +202,7 @@ extensions: []
90
202
  extra_rdoc_files: []
91
203
  files:
92
204
  - .gitignore
205
+ - .travis.yml
93
206
  - Gemfile
94
207
  - LICENSE.txt
95
208
  - README.md
@@ -100,17 +213,35 @@ files:
100
213
  - lib/toolshed/base.rb
101
214
  - lib/toolshed/cli.rb
102
215
  - lib/toolshed/client.rb
103
- - lib/toolshed/commands/checkout_git_branch.rb
104
- - lib/toolshed/commands/create_git_branch.rb
105
- - lib/toolshed/commands/create_github_pull_request.rb
216
+ - lib/toolshed/commands/checkout_branch.rb
217
+ - lib/toolshed/commands/create_branch.rb
106
218
  - lib/toolshed/commands/create_pivotal_tracker_note.rb
219
+ - lib/toolshed/commands/create_pull_request.rb
220
+ - lib/toolshed/commands/delete_branch.rb
221
+ - lib/toolshed/commands/get_daily_time_update.rb
107
222
  - lib/toolshed/commands/get_pivotal_tracker_story_information.rb
108
- - lib/toolshed/commands/push_git_branch.rb
223
+ - lib/toolshed/commands/list_branches.rb
224
+ - lib/toolshed/commands/push_branch.rb
109
225
  - lib/toolshed/commands/update_pivotal_tracker_story_status.rb
110
226
  - lib/toolshed/error.rb
111
- - lib/toolshed/github.rb
112
- - lib/toolshed/pivotal_tracker.rb
227
+ - lib/toolshed/git/git.rb
228
+ - lib/toolshed/git/github.rb
229
+ - lib/toolshed/ticket_tracking/pivotal_tracker.rb
230
+ - lib/toolshed/ticket_tracking/ticket_tracking.rb
231
+ - lib/toolshed/time_tracking/harvest.rb
232
+ - lib/toolshed/time_tracking/time_tracking.rb
113
233
  - lib/toolshed/version.rb
234
+ - test/commands/checkout_branch_test.rb
235
+ - test/commands/commands_helper.rb
236
+ - test/commands/create_branch_test.rb
237
+ - test/commands/create_pull_request_test.rb
238
+ - test/commands/delete_branch_test.rb
239
+ - test/commands/push_branch_test.rb
240
+ - test/config.rb
241
+ - test/git/git_helper.rb
242
+ - test/git/git_test.rb
243
+ - test/git/github_test.rb
244
+ - test/helper.rb
114
245
  - toolshed.gemspec
115
246
  homepage: ''
116
247
  licenses:
@@ -137,4 +268,15 @@ signing_key:
137
268
  specification_version: 4
138
269
  summary: Create a Github pull request with minimal work. Will automatically read ticket
139
270
  information from pivotal tracker if you use that.
140
- test_files: []
271
+ test_files:
272
+ - test/commands/checkout_branch_test.rb
273
+ - test/commands/commands_helper.rb
274
+ - test/commands/create_branch_test.rb
275
+ - test/commands/create_pull_request_test.rb
276
+ - test/commands/delete_branch_test.rb
277
+ - test/commands/push_branch_test.rb
278
+ - test/config.rb
279
+ - test/git/git_helper.rb
280
+ - test/git/git_test.rb
281
+ - test/git/github_test.rb
282
+ - test/helper.rb
@@ -1,23 +0,0 @@
1
- module Toolshed
2
- module Commands
3
- class CheckoutGitBranch
4
- def execute(args, options = {})
5
- print "Ticket ID or Branch Name? "
6
- ticket_id = $stdin.gets.chomp
7
-
8
- branch_name = `git branch | grep \"#{ticket_id}\"`.gsub("*", "").strip
9
-
10
- git_submodule_command = ''
11
- if (Toolshed::Client.use_git_submodules)
12
- print "Update Submodules (y/n)? "
13
- update_submodules = $stdin.gets.chomp
14
- if (update_submodules == 'y')
15
- git_submodule_command = "git submodule update --init;"
16
- end
17
- end
18
-
19
- system("git checkout #{branch_name}; #{git_submodule_command}")
20
- end
21
- end
22
- end
23
- end
@@ -1,28 +0,0 @@
1
- module Toolshed
2
- module Commands
3
- class CreateGitBranch
4
- def execute(args, options = {})
5
- print "Branch text? "
6
- branch_name = $stdin.gets.chomp
7
-
8
- print "Branch from? "
9
- branch_from = $stdin.gets.chomp
10
-
11
- git_submodule_command = ''
12
- if (Toolshed::Client.use_git_submodules)
13
- print "Update Submodules (y/n)? "
14
- update_submodules = $stdin.gets.chomp
15
- if (update_submodules == 'y')
16
- git_submodule_command = "git submodule update --init;"
17
- end
18
- end
19
-
20
- branch_name = branch_name.strip.downcase.tr(" ", "_").gsub("-", "").gsub("&", "").gsub("/", "_").gsub(".", "_").gsub("'", "").gsub("__", "_").gsub(":", "")
21
- output_text = "git remote update; git checkout -b #{branch_name} #{Toolshed::Client.branched_from_remote_name}/#{branch_from}; #{git_submodule_command} git push #{Toolshed::Client.push_to_myself} #{branch_name}"
22
-
23
- puts "Creating branch.."
24
- system(output_text)
25
- end
26
- end
27
- end
28
- end
@@ -1,77 +0,0 @@
1
- module Toolshed
2
- module Commands
3
- class CreateGithubPullRequest
4
- def execute(args, options = {})
5
- pivotal_tracker = nil
6
- if (Toolshed::Client.use_pivotal_tracker)
7
- # load up the project information for pivotal tracker
8
- print "Project ID (Default: #{Toolshed::Client.default_pivotal_tracker_project_id})? "
9
- project_id = $stdin.gets.chomp.strip
10
- if (project_id == '')
11
- project_id = Toolshed::Client.default_pivotal_tracker_project_id
12
- end
13
- pivotal_tracker = Toolshed::PivotalTracker.new({ project_id: project_id, username: Toolshed::PivotalTracker.username, password: Toolshed::PivotalTracker.password })
14
- end
15
-
16
- github = Toolshed::Github.new({ username: Toolshed::Github.username, password: Toolshed::Github.password })
17
-
18
- # see what branch is checked out and where we are branched from
19
- puts "Current Branch: #{github.branch_name}"
20
- puts "Branched From: #{github.branched_from}"
21
-
22
- pt_ticket_title = ''
23
- if (Toolshed::Client.use_pivotal_tracker)
24
- # load up the story information from PivotalTracker
25
- default_story_id = Toolshed::PivotalTracker::story_id_from_branch_name(github.branch_name)
26
- print "Story ID (Default: #{default_story_id})? "
27
- story_id = $stdin.gets.chomp.strip
28
- if (story_id == '')
29
- story_id = default_story_id
30
- end
31
-
32
- pivotal_tracker_result = pivotal_tracker.story_information(story_id)
33
-
34
- pt_ticket_title = pivotal_tracker_result.name
35
- pt_ticket_title = pt_ticket_title.gsub("'", "").gsub("\"", "")
36
- end
37
-
38
- # github pull request fields
39
- print "Github Pull Request Title (Default: #{pt_ticket_title})? "
40
- github_pull_request_title = $stdin.gets.chomp.strip
41
- if (github_pull_request_title == '')
42
- github_pull_request_title = pt_ticket_title
43
- end
44
-
45
- github_pull_request_default_body = ''
46
- if (Toolshed::Client.use_pivotal_tracker)
47
- github_pull_request_default_body = pivotal_tracker_result.url
48
- end
49
- print "Body (Default: #{github_pull_request_default_body})? "
50
- github_pull_request_body = $stdin.gets.chomp.strip
51
- if (github_pull_request_body == '')
52
- github_pull_request_body = github_pull_request_default_body
53
- end
54
-
55
- # create the pull request
56
- begin
57
- puts "Running Github Pull Request"
58
- github_pull_request_result = github.create_pull_request(github_pull_request_title, github_pull_request_body)
59
- puts "Github Pull Request URL: #{github_pull_request_result["html_url"]}"
60
-
61
- if (Toolshed::Client.use_pivotal_tracker)
62
- print "Would you like to add a note to PivotalTracker with the pull request URL(y/n)? "
63
- update_pt_info = $stdin.gets.chomp.strip
64
-
65
- if (update_pt_info == 'y')
66
- result = pivotal_tracker.add_note(story_id, github_pull_request_result["html_url"])
67
- result = pivotal_tracker.update_story_state(story_id, Toolshed::PivotalTracker::STORY_STATUS_DEFAULT)
68
- end
69
- end
70
- rescue => e
71
- puts e.message
72
- exit
73
- end
74
- end
75
- end
76
- end
77
- end
@@ -1,10 +0,0 @@
1
- module Toolshed
2
- module Commands
3
- class PushGitBranch
4
- def execute(args, options = {})
5
- branch_name = `git rev-parse --abbrev-ref HEAD`
6
- system("git push #{Toolshed::Client.push_to_myself} #{branch_name}")
7
- end
8
- end
9
- end
10
- end
@@ -1,89 +0,0 @@
1
- module Toolshed
2
- class Github
3
- include HTTParty
4
-
5
- def initialize(options={})
6
- username = Toolshed::Client::github_username
7
- password = Toolshed::Client::github_password
8
-
9
- unless (options[:username].nil?)
10
- username = options[:username]
11
- end
12
-
13
- unless (options[:password].nil?)
14
- password = options[:password]
15
- end
16
-
17
- @auth = { username: username, password: password }
18
- @default_options = {
19
- :headers => {
20
- "User-Agent" => "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_2) AppleWebKit/537.17 (KHTML, like Gecko) Chrome/24.0.1309.0 Safari/537.17"
21
- },
22
- basic_auth: @auth,
23
- }
24
- end
25
-
26
- def create_pull_request(title, body, options={})
27
- options.merge!(@default_options)
28
- options.merge!({
29
- body: {
30
- title: title,
31
- body: body,
32
- head: "#{Toolshed::Client.github_username}:#{self.branch_name}",
33
- base: self.branched_from
34
- }.to_json
35
- })
36
-
37
- response = HTTParty.post("#{Toolshed::Client::GITHUB_BASE_API_URL}repos/#{Toolshed::Client.branched_from_user}/#{Toolshed::Client.branched_from_repo_name}/pulls", options).response
38
- response = JSON.parse(response.body)
39
-
40
- if (response["errors"].nil?)
41
- response
42
- else
43
- raise "validation errors #{response.inspect}"
44
- end
45
- end
46
-
47
- def list_branches(options={})
48
- options.merge!(@default_options)
49
-
50
- response = HTTParty.get("#{Toolshed::Client::GITHUB_BASE_API_URL}repos/#{Toolshed::Client.github_username}/toolshed/branches", options).response
51
- JSON.parse(response.body).each do |branch|
52
- puts branch.inspect
53
- end
54
- end
55
-
56
- def branch_name
57
- # branch information
58
- branch_name = `git rev-parse --abbrev-ref HEAD`.strip
59
- end
60
-
61
- def branched_from
62
- branched_from = `git rev-parse --abbrev-ref --symbolic-full-name @{u}`.split('/')[-1].strip
63
- end
64
-
65
- def self.username
66
- username = Toolshed::Client::github_username
67
- if (username.nil?)
68
- # prompt to ask for username
69
- puts "Github username? "
70
- username = $stdin.gets.chomp.strip
71
- end
72
-
73
- return username
74
- end
75
-
76
- def self.password
77
- password = Toolshed::Client::github_password
78
- if (password.nil?)
79
- # prompt to ask for password
80
- system "stty -echo"
81
- puts "Github password? "
82
- password = $stdin.gets.chomp.strip
83
- system "stty echo"
84
- end
85
-
86
- return password
87
- end
88
- end
89
- end
@@ -1,87 +0,0 @@
1
- module Toolshed
2
- class PivotalTracker
3
- include HTTParty
4
-
5
- STORY_STATUS_DEFAULT = 'finished'
6
-
7
- attr_accessor :project_id, :token
8
-
9
- def initialize(options={})
10
- username = Toolshed::Client::pivotal_tracker_username
11
- password = Toolshed::Client::pivotal_tracker_password
12
-
13
- unless (options[:username].nil?)
14
- username = options[:username]
15
- end
16
-
17
- unless (options[:password].nil?)
18
- password = options[:password]
19
- end
20
-
21
-
22
- self.token = ::PivotalTracker::Client.token(username, password)
23
-
24
- self.project_id = (options[:project_id].nil?) ? Toolshed::Client.default_pivotal_tracker_project_id : options[:project_id]
25
- @pt_project = ::PivotalTracker::Project.find(self.project_id)
26
- end
27
-
28
- def self.story_id_from_branch_name(branch_name)
29
- story_id = branch_name.split("_")[0]
30
- end
31
-
32
- def story_information(story_id)
33
- return @pt_project.stories.find(story_id)
34
- end
35
-
36
- def add_note(story_id, note_text)
37
- story = @pt_project.stories.find(story_id)
38
- results = story.notes.create(text: note_text)
39
- end
40
-
41
- def update_story_state(story_id, current_state, options={})
42
- options.merge!({
43
- :headers => {
44
- "X-TrackerToken" => self.token,
45
- "User-Agent" => "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_2) AppleWebKit/537.17 (KHTML, like Gecko) Chrome/24.0.1309.0 Safari/537.17",
46
- "Content-Type" => "application/json",
47
- },
48
- body: {
49
- current_state: current_state
50
- }.to_json
51
- })
52
-
53
- response = HTTParty.put("#{Toolshed::Client::PIVOTAL_TRACKER_BASE_API_URL}projects/#{self.project_id}/stories/#{story_id}", options).response
54
- response = JSON.parse(response.body)
55
-
56
- if (response["error"].nil?)
57
- response
58
- else
59
- raise "validation errors #{response.inspect}"
60
- end
61
- end
62
-
63
- def self.username
64
- username = Toolshed::Client::pivotal_tracker_username
65
- if (username.nil?)
66
- # prompt to ask for username
67
- puts "PivotalTracker username? "
68
- username = $stdin.gets.chomp.strip
69
- end
70
-
71
- return username
72
- end
73
-
74
- def self.password
75
- password = Toolshed::Client::pivotal_tracker_password
76
- if (password.nil?)
77
- # prompt to ask for password
78
- system "stty -echo"
79
- puts "PivotalTracker password? "
80
- password = $stdin.gets.chomp.strip
81
- system "stty echo"
82
- end
83
-
84
- return password
85
- end
86
- end
87
- end