toolshed 0.0.9 → 1.0.0

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 2735e0a05ef49646976753969a095916a4f00324
4
- data.tar.gz: aa781e23427a9534108d1d0727ea3b27fa90f142
3
+ metadata.gz: 54a3e26a9cf4670879ed25c97435e8561787c511
4
+ data.tar.gz: b8f2a24202d44ad03349477e54d2ce1216ebfe61
5
5
  SHA512:
6
- metadata.gz: aae5bc491f329b09cf07dd0768ae979b8f7883b5b67e3db2a57c26a11419ccb3da8538f8b8907a0b30627c30a6973bf16a357ba3855c7dd7c45cbc7b164def0d
7
- data.tar.gz: 473ce7fb64bf9394874fc726fe5b8730297c3604d7a6ebdc8e761f06f6d790905cf1e536bd6e00337c157aa6f2e8301958cfb5cc7f218f2ec40d694cca6ea81a
6
+ metadata.gz: cf484481408ec9dbac5b35d93e19e3dc39f907aec6c5e6fe5f908135b794a401498cd5e9353b6556aeab016a02bf6b32bf1e515de1e9f2e58f8d5a4aff16ca04
7
+ data.tar.gz: 1b4833ba97542589fb44a81a358f250eaafe730d80e49b9c3339cee24b7df171dadb3f5bad726723df62984a6a176e4ee86565b053384aa87bc875c802ba0252
data/.travis.yml CHANGED
@@ -10,5 +10,8 @@ before_script:
10
10
  language: ruby
11
11
  rvm:
12
12
  - 2.0.0
13
+ addons:
14
+ code_climate:
15
+ repo_token: c94c0c00c0b1bf210f41515822ea072c639ccdb86b7debabc9c60572ce4f39f0
13
16
  env:
14
17
  - RUNNING_ON_CI=true
data/README.md CHANGED
@@ -1,3 +1,6 @@
1
+ [![Build Status](https://travis-ci.org/wallerjake/toolshed.svg?branch=master)](https://travis-ci.org/wallerjake/toolshed)
2
+ [![Code Climate](https://codeclimate.com/github/wallerjake/toolshed.png)](https://codeclimate.com/github/wallerjake/toolshed)
3
+
1
4
  # Toolshed
2
5
 
3
6
  Toolshed is a utility gem meant to make small tasks faster. This includes things like making a pull request up to Github all the way to creating a branch. This gem can be extended to used else where also.
data/bin/toolshed.rb CHANGED
@@ -20,9 +20,11 @@ Note that it will only read one file which ever file is closest to the directory
20
20
  pivotal_tracker_username: [pivotal_tracker_username] (optional)
21
21
  pivotal_tracker_password: [pivotal_tracker_password] (optional)
22
22
  default_pivotal_tracker_project_id: [project_id] (optional)
23
+ ticket_status_for_complete: [status] (required (only if using pull requests)) example: "Code Review"
23
24
 
24
- github_username: [github_username] (optional)
25
- github_password: [github_password] (optional)
25
+ github_username: [github_username] (optional)
26
+ github_password: [github_password] (optional)
27
+ github_token: [github_token] (optional) - create the token if your account require two factor you can disable token or enable through Github. See https://github.com/settings/tokens/new for details.
26
28
  git_tool: github (optional default `github`)
27
29
  use_git_submodules: false (optional default `false`)
28
30
  pull_from_remote_name: [pull_from_remote_name] (required)
@@ -36,7 +38,7 @@ Note that it will only read one file which ever file is closest to the directory
36
38
  time_tracking_password: [password] (optional)
37
39
  time_tracking_owner: [owner] (optional)
38
40
  time_tracking_default_project_id: [project_id] (optional)
39
- time_tracking_tool: [tool] (optional)
41
+ time_tracking_tool: [tool] (required unless you are not going to be doing time tracking)
40
42
 
41
43
  == Commands
42
44
 
@@ -73,6 +75,8 @@ push_branch [ # Push your current working branch to yo
73
75
  ]
74
76
  get_daily_time_update [ # Get a daily update from your time tracking toolset currently harvest is supported
75
77
  --format="html|text" # Format you want if you want html it will open html page in broswer otherwise puts out plain text
78
+ --use-defaults="true|false" # If you want to use your default project_id instead of entering it
79
+ --project-id="1234" # If you want to use a project id other than your defaults
76
80
  ]
77
81
  list_branches [ # List branches for your remote repository
78
82
  --repository-name "depot" # The repository name you want to list branches for if not passed pull_from_repository_name is used
@@ -80,6 +84,11 @@ list_branches [ # List branches for your remote reposito
80
84
  delete_branch [ # Delete a branch both locally and to your push to remote
81
85
  --branch-name "134_mybranch" | "134" # Either the full branch name or some unique string in the branch i.e. ticket id
82
86
  ]
87
+ create_ticket_comment [ # Add a comment to a specific ticket
88
+ --use-defaults "true" # use defaults instead of getting prompts if you don't want to supply project name
89
+ ]
90
+ update_ticket_status [ # Update a specific tickets status
91
+ ]
83
92
  EOF
84
93
  end
85
94
 
@@ -93,6 +102,9 @@ if $0.split("/").last == 'toolshed'
93
102
  opts.on("-p", "--github-password [ARG]") do |password|
94
103
  Toolshed::Client.github_password = password
95
104
  end
105
+ opts.on("-t", "--github-token [ARG]") do |token|
106
+ Toolshed::Client.github_token = token
107
+ end
96
108
  opts.on("-u", "--pivotal-tracker-username [ARG]") do |username|
97
109
  Toolshed::Client.pivotal_tracker_username = username
98
110
  end
@@ -160,6 +172,12 @@ if $0.split("/").last == 'toolshed'
160
172
  opts.on("--format [ARG]") do |opt|
161
173
  options[:format] = opt
162
174
  end
175
+ opts.on("--use-defaults [ARG]") do |opt|
176
+ Toolshed::Client.use_defaults = opt
177
+ end
178
+ opts.on("--project-id [ARG]") do |opt|
179
+ options[:project_id] = opt
180
+ end
163
181
  end,
164
182
  'ticket_information' => OptionParser.new do |opts|
165
183
  opts.on("--use-defaults [ARG]") do |opt|
@@ -175,6 +193,11 @@ if $0.split("/").last == 'toolshed'
175
193
  options[:formatted_string] = opt
176
194
  end
177
195
  end,
196
+ 'create_ticket_comment' => OptionParser.new do |opts|
197
+ opts.on("--use-defaults [ARG]") do |opt|
198
+ Toolshed::Client.use_defaults = opt
199
+ end
200
+ end,
178
201
  }
179
202
 
180
203
  global.order!
data/lib/toolshed/cli.rb CHANGED
@@ -31,6 +31,8 @@ module Toolshed
31
31
  'get_daily_time_update' => Toolshed::Commands::GetDailyTimeUpdate,
32
32
  'list_branches' => Toolshed::Commands::ListBranches,
33
33
  'delete_branch' => Toolshed::Commands::DeleteBranch,
34
+ 'create_ticket_comment' => Toolshed::Commands::CreateTicketComment,
35
+ 'update_ticket_status' => Toolshed::Commands::UpdateTicketStatus,
34
36
  }
35
37
  end
36
38
  end
@@ -47,3 +49,5 @@ require 'toolshed/commands/get_daily_time_update'
47
49
  require 'toolshed/commands/get_daily_time_update'
48
50
  require 'toolshed/commands/list_branches'
49
51
  require 'toolshed/commands/delete_branch'
52
+ require 'toolshed/commands/create_ticket_comment'
53
+ require 'toolshed/commands/update_ticket_status'
@@ -49,6 +49,14 @@ module Toolshed
49
49
  @github_password = password
50
50
  end
51
51
 
52
+ def self.github_token
53
+ @github_token
54
+ end
55
+
56
+ def self.github_token=(token)
57
+ @github_token = token
58
+ end
59
+
52
60
  def self.pull_from_remote_name
53
61
  @pull_from_remote_name
54
62
  end
@@ -106,7 +114,8 @@ module Toolshed
106
114
  end
107
115
 
108
116
 
109
- # pivotal tracker config
117
+ # ticket tracking information
118
+
110
119
  def self.pivotal_tracker_username
111
120
  @pivotal_tracker_username
112
121
  end
@@ -131,8 +140,29 @@ module Toolshed
131
140
  @default_pivotal_tracker_project_id = default_pivotal_tracker_project_id
132
141
  end
133
142
 
143
+ def self.ticket_tracker_username
144
+ @ticket_tracker_username
145
+ end
146
+
147
+ def self.ticket_tracker_username=(username)
148
+ @ticket_tracker_username = username
149
+ end
150
+
151
+ def self.ticket_tracker_password
152
+ @ticket_tracker_password
153
+ end
134
154
 
135
- # ticket tracking configuration
155
+ def self.ticket_tracker_password=(password)
156
+ @ticket_tracker_password = password
157
+ end
158
+
159
+ def self.default_ticket_tracker_project
160
+ @default_ticket_tracker_project
161
+ end
162
+
163
+ def self.default_ticket_tracker_project=(default_ticket_tracker_project)
164
+ @default_ticket_tracker_project = default_ticket_tracker_project
165
+ end
136
166
 
137
167
  def self.ticket_tracking_tool
138
168
  @ticket_tracking_tool
@@ -142,6 +172,22 @@ module Toolshed
142
172
  @ticket_tracking_tool = ticket_tracking_tool
143
173
  end
144
174
 
175
+ def self.ticket_tracker_owner
176
+ @ticket_tracker_owner
177
+ end
178
+
179
+ def self.ticket_tracker_owner=(owner)
180
+ @ticket_tracker_owner = owner
181
+ end
182
+
183
+ def self.ticket_status_for_complete
184
+ @ticket_status_for_complete
185
+ end
186
+
187
+ def self.ticket_status_for_complete=(status)
188
+ @ticket_status_for_complete = status
189
+ end
190
+
145
191
  # time tracking configuration
146
192
 
147
193
  def self.time_tracking_tool
@@ -213,9 +259,15 @@ module Toolshed
213
259
  credentials = YAML.load_file(File.expand_path(loaded_from_path))
214
260
  self.github_username ||= credentials['github_username']
215
261
  self.github_password ||= credentials['github_password']
262
+ self.github_token ||= credentials['github_token']
216
263
  self.pivotal_tracker_username ||= credentials['pivotal_tracker_username']
217
264
  self.pivotal_tracker_password ||= credentials['pivotal_tracker_password']
218
265
  self.default_pivotal_tracker_project_id ||= credentials['default_pivotal_tracker_project_id']
266
+ self.ticket_tracker_username ||= credentials['ticket_tracker_username']
267
+ self.ticket_tracker_password ||= credentials['ticket_tracker_password']
268
+ self.ticket_tracker_owner ||= credentials['ticket_tracker_owner']
269
+ self.ticket_status_for_complete ||= credentials['ticket_status_for_complete']
270
+ self.default_ticket_tracker_project ||= credentials['default_ticket_tracker_project']
219
271
  self.pull_from_remote_name ||= credentials['pull_from_remote_name']
220
272
  self.pull_from_repository_user ||= credentials['pull_from_repository_user']
221
273
  self.pull_from_repository_name ||= credentials['pull_from_repository_name']
@@ -44,6 +44,11 @@ module Toolshed
44
44
  def read_user_input_branch_from(message, options)
45
45
  return options[:branch_from] if (options.has_key?(:branch_from))
46
46
 
47
+ # if branch-name was supplied then default to master if not supplied
48
+ if (options.has_key?(:branch_name))
49
+ return Toolshed::Git::DEFAULT_BRANCH_FROM
50
+ end
51
+
47
52
  puts message
48
53
  value = $stdin.gets.chomp
49
54
 
@@ -7,7 +7,7 @@ module Toolshed
7
7
  puts "Branched From: #{Toolshed::Git::Base.branched_from}"
8
8
  puts "Using Defaults: #{(Toolshed::Client.use_defaults.nil?) ? 'No' : 'Yes'}"
9
9
 
10
- unless (Toolshed::Client.ticket_tracking_tool.empty?)
10
+ unless (Toolshed::Client.ticket_tracking_tool.nil? || Toolshed::Client.ticket_tracking_tool.empty?)
11
11
  ticket_tracking_url = ''
12
12
  ticket_tracking_title = ''
13
13
  ticket_id = ''
@@ -15,25 +15,52 @@ module Toolshed
15
15
  begin
16
16
  ticket_tracker_class = Object.const_get("Toolshed::TicketTracking::#{Toolshed::Client.ticket_tracking_tool.camel_case}")
17
17
 
18
- if Object.const_get("#{ticket_tracker_class}::USE_PROJECT_ID")
19
- ticket_tracker_project_id = read_user_input_ticket_tracker_project_id("Project ID (Default: #{Toolshed::Client.default_pivotal_tracker_project_id}):", { default: Toolshed::Client.default_pivotal_tracker_project_id })
20
- options.merge!({ project_id: ticket_tracker_project_id })
18
+ use_project_id = Object.const_get("#{ticket_tracker_class}::USE_PROJECT_ID") rescue false
19
+ if use_project_id
20
+ ticket_tracker_project_id = read_user_input_project(
21
+ "Project ID (Default: #{Toolshed::Client.default_pivotal_tracker_project_id}):",
22
+ options.merge!({
23
+ default: Toolshed::Client.default_pivotal_tracker_project_id,
24
+ })
25
+ )
26
+ options.merge!({
27
+ project_id: ticket_tracker_project_id,
28
+ })
21
29
  end
22
30
 
23
- ticket_tracker = ticket_tracker_class.create_instance(options)
31
+ use_project_name = Object.const_get("#{ticket_tracker_class}::USE_PROJECT_NAME") rescue false
32
+ if use_project_name
33
+ ticket_tracker_project_name = read_user_input_project(
34
+ "Project Name (Default: #{Toolshed::Client.default_ticket_tracker_project}):", options.merge!({
35
+ default: Toolshed::Client.default_ticket_tracker_project,
36
+ })
37
+ )
38
+ options.merge!({
39
+ project: ticket_tracker_project_name,
40
+ })
41
+ end
24
42
 
25
43
  # @TODO - refactor this code into the git module seems more appropriate since it's performing git functions
26
- ticket_id = read_user_input_ticket_tracker_ticket_id("Ticket ID (Default: #{Toolshed::TicketTracking::PivotalTracker::story_id_from_branch_name(Toolshed::Git::Base.branch_name)}):", { default: Toolshed::TicketTracking::PivotalTracker::story_id_from_branch_name(Toolshed::Git::Base.branch_name) })
27
- ticket_information = ticket_tracker.story_information(ticket_id)
44
+ ticket_id = read_user_input_ticket_tracker_ticket_id(
45
+ "Ticket ID (Default: #{Toolshed::TicketTracking::story_id_from_branch_name(Toolshed::Git::Base.branch_name)}):", {
46
+ default: Toolshed::TicketTracking::story_id_from_branch_name(Toolshed::Git::Base.branch_name),
47
+ }
48
+ )
49
+ options.merge!({
50
+ ticket_id: ticket_id,
51
+ })
52
+
53
+ ticket_tracker = ticket_tracker_class.create_instance(options)
28
54
 
29
- ticket_tracking_url = ticket_information.url
30
- ticket_tracking_title = ticket_tracker_class.clean(ticket_information.name)
31
- ticket_id = ticket_information.id
55
+ ticket_tracking_url = ticket_tracker.url
56
+ ticket_tracking_title = ticket_tracker.title
57
+ ticket_id = ticket_id
32
58
 
33
59
  puts "Ticket Tracking URL: #{ticket_tracking_url}"
34
60
  puts "Ticket Tracking title: #{ticket_tracking_title}"
35
61
  puts "Ticket ID: #{ticket_id}"
36
62
  rescue Exception => e
63
+ puts e.inspect
37
64
  puts "Ticket tracking tool is not supported at this time"
38
65
  return
39
66
  end
@@ -45,17 +72,35 @@ module Toolshed
45
72
  git_tool = git_tool_class.create_instance
46
73
 
47
74
  # create the pull request prompt when needed
48
- title = read_user_input_pull_request_title("Pull request title (Default: #{ticket_tracking_title}):", options.merge!({ default: ticket_tracking_title }))
49
- body = read_user_input_pull_request_body("Pull request body (Default: #{ticket_tracking_url}):", options.merge!({ default: ticket_tracking_url }))
75
+ title = read_user_input_pull_request_title(
76
+ "Pull request title (Default: #{ticket_tracking_title}):",
77
+ options.merge!({
78
+ default: ticket_tracking_title,
79
+ })
80
+ )
81
+ body = read_user_input_pull_request_body(
82
+ "Pull request body (Default: #{ticket_tracking_url}):",
83
+ options.merge!({
84
+ default: ticket_tracking_url
85
+ })
86
+ )
50
87
 
51
88
  puts "Pull request being created"
52
89
  git_pull_request_result = git_tool.create_pull_request(title, body)
53
90
  pull_request_url = git_pull_request_result["html_url"]
54
91
 
55
- add_note_to_ticket = read_user_input_add_note_to_ticket("Would you like to add a note with the pull request url?")
56
- if (add_note_to_ticket)
57
- result = ticket_tracker.add_note(ticket_id, pull_request_url)
58
- result = ticket_tracker.update_ticket_status(ticket_id, Object.const_get("#{ticket_tracker_class}::DEFAULT_COMPLETED_STATUS"))
92
+ unless (Toolshed::Client.ticket_tracking_tool.nil? || Toolshed::Client.ticket_tracking_tool.empty?)
93
+ add_note_to_ticket = read_user_input_add_note_to_ticket("Would you like to add a note with the pull request url?")
94
+ if (add_note_to_ticket)
95
+ result = ticket_tracker.add_note(pull_request_url)
96
+
97
+ default_completed_status = Object.const_get("#{ticket_tracker_class}::DEFAULT_COMPLETED_STATUS") rescue false
98
+ unless (default_completed_status)
99
+ default_completed_status = Toolshed::Client.ticket_status_for_complete
100
+ end
101
+
102
+ result = ticket_tracker.update_ticket_status(default_completed_status)
103
+ end
59
104
  end
60
105
 
61
106
  puts "Created Pull Request: #{pull_request_url}"
@@ -107,7 +152,7 @@ module Toolshed
107
152
  value
108
153
  end
109
154
 
110
- def read_user_input_ticket_tracker_project_id(message, options)
155
+ def read_user_input_project(message, options)
111
156
  return options[:default] if (Toolshed::Client.use_defaults)
112
157
 
113
158
  puts message
@@ -0,0 +1,85 @@
1
+ module Toolshed
2
+ module Commands
3
+ class CreateTicketComment
4
+ def execute(args, options = {})
5
+ ticket_tracker_class = Object.const_get("Toolshed::TicketTracking::#{Toolshed::Client.ticket_tracking_tool.camel_case}")
6
+
7
+ use_project_id = Object.const_get("#{ticket_tracker_class}::USE_PROJECT_ID") rescue false
8
+ if use_project_id
9
+ ticket_tracker_project_id = read_user_input_project(
10
+ "Project ID (Default: #{Toolshed::Client.default_pivotal_tracker_project_id}):",
11
+ options.merge!({
12
+ default: Toolshed::Client.default_pivotal_tracker_project_id,
13
+ })
14
+ )
15
+ options.merge!({
16
+ project_id: ticket_tracker_project_id
17
+ })
18
+ end
19
+
20
+ use_project_name = Object.const_get("#{ticket_tracker_class}::USE_PROJECT_NAME") rescue false
21
+ if use_project_name
22
+ ticket_tracker_project_name = read_user_input_project(
23
+ "Project Name (Default: #{Toolshed::Client.default_ticket_tracker_project}):",
24
+ options.merge!({ default: Toolshed::Client.default_ticket_tracker_project })
25
+ )
26
+ options.merge!({
27
+ project: ticket_tracker_project_name
28
+ })
29
+ end
30
+
31
+ default_ticket_id = Toolshed::TicketTracking::story_id_from_branch_name(Toolshed::Git::Base.branch_name)
32
+ ticket_id = read_user_input_ticket_id("Ticket ID (Default: #{default_ticket_id}):", options.merge!({ default: default_ticket_id }))
33
+ options.merge!({ ticket_id: ticket_id })
34
+
35
+ ticket_tracker = ticket_tracker_class.create_instance(options)
36
+
37
+ if use_project_id
38
+ puts "Using Project: #{ticket_tracker_project_id}"
39
+ end
40
+ puts "Using Ticket: #{ticket_id}"
41
+
42
+ puts "Note? "
43
+ note_text = $stdin.gets.chomp.strip
44
+
45
+ begin
46
+ result = ticket_tracker.add_note(note_text)
47
+ if (result)
48
+ puts "Comment has been added to ticket"
49
+ else
50
+ puts "Unable to add comment #{result.inspect}"
51
+ end
52
+ rescue => e
53
+ puts e.message
54
+ exit
55
+ end
56
+ end
57
+
58
+ def read_user_input_project(message, options)
59
+ return options[:default] if (options.has_key?(:use_defaults))
60
+
61
+ puts message
62
+ value = $stdin.gets.chomp
63
+
64
+ if (value.empty?)
65
+ value = options[:default]
66
+ end
67
+
68
+ value
69
+ end
70
+
71
+ def read_user_input_ticket_id(message, options)
72
+ return options[:default] if (options.has_key?(:use_defaults))
73
+
74
+ puts message
75
+ value = $stdin.gets.chomp
76
+
77
+ if (value.empty?)
78
+ value = options[:default]
79
+ end
80
+
81
+ value
82
+ end
83
+ end
84
+ end
85
+ end
@@ -2,29 +2,32 @@ module Toolshed
2
2
  module Commands
3
3
  class GetDailyTimeUpdate
4
4
  def execute(args, options = {})
5
- if (Toolshed::Client.time_tracking_tool == 'harvest')
6
- harvest = Toolshed::TimeTracking::Harvest.new(options)
5
+ begin
6
+ time_tracking_class = Object.const_get("Toolshed::TimeTracking::#{Toolshed::Client.time_tracking_tool.camel_case}")
7
+
8
+ time_tracking_project_id = read_user_input_project_id("Project ID (Default: #{Toolshed::Client.time_tracking_default_project_id}):", options.merge!({ default: Toolshed::Client.time_tracking_default_project_id }))
9
+ options.merge!({ project_id: time_tracking_project_id })
10
+ time_tracker = time_tracking_class.create_instance(options)
7
11
 
8
12
  puts "Getting time entries:"
9
-
10
- notes = harvest.previous
11
- notes = "#{notes}#{harvest.line_break}#{harvest.line_break}#{harvest.today}"
12
- notes = "#{notes}#{harvest.brought_to_you_by_message}"
13
+ time_tracker.display
14
+ rescue Exception => e
15
+ puts "Time tracking tool is undefined implementation needed or an error occured #{e.inspect}"
16
+ return
17
+ end
18
+ end
13
19
 
14
- if (harvest.format == 'html')
15
- FileUtils.rm_rf(Toolshed::TimeTracking::Harvest::GENERATED_HTML_FILE_LOCATION)
16
- File.open(Toolshed::TimeTracking::Harvest::GENERATED_HTML_FILE_LOCATION, 'w') {|f| f.write(notes) }
17
- Launchy.open( Toolshed::TimeTracking::Harvest::GENERATED_HTML_FILE_LOCATION ) do |exception|
18
- puts "Attempted to open #{uri} and failed because #{exception}"
19
- end
20
- puts "Checkout out your default or open browser!"
21
- else
22
- puts notes
23
- end
24
- else
25
- puts "Time tracking tool is undefined implementation needed"
26
- exit
20
+ def read_user_input_project_id(message, options)
21
+ return options[:project_id] if (options.has_key?(:project_id))
22
+ return options[:default] if (Toolshed::Client.use_defaults)
23
+
24
+ puts message
25
+ value = $stdin.gets.chomp
26
+ if (value.empty?)
27
+ value = options[:default]
27
28
  end
29
+
30
+ value
28
31
  end
29
32
  end
30
33
  end
@@ -5,22 +5,30 @@ module Toolshed
5
5
  begin
6
6
  ticket_tracker_class = Object.const_get("Toolshed::TicketTracking::#{Toolshed::Client.ticket_tracking_tool.camel_case}")
7
7
 
8
- if Object.const_get("#{ticket_tracker_class}::USE_PROJECT_ID")
9
- ticket_tracker_project_id = read_user_input_project_id("Project ID (Default: #{Toolshed::Client.default_pivotal_tracker_project_id}):", options.merge!({ default: Toolshed::Client.default_pivotal_tracker_project_id }))
8
+ use_project_id = Object.const_get("#{ticket_tracker_class}::USE_PROJECT_ID") rescue false
9
+ if use_project_id
10
+ ticket_tracker_project_id = read_user_input_project("Project ID (Default: #{Toolshed::Client.default_pivotal_tracker_project_id}):", options.merge!({ default: Toolshed::Client.default_pivotal_tracker_project_id }))
10
11
  options.merge!({ project_id: ticket_tracker_project_id })
11
12
  end
12
13
 
13
- ticket_tracker = ticket_tracker_class.create_instance(options)
14
+ use_project_name = Object.const_get("#{ticket_tracker_class}::USE_PROJECT_NAME") rescue false
15
+ if use_project_name
16
+ ticket_tracker_project_name = read_user_input_project("Project Name (Default: #{Toolshed::Client.default_ticket_tracker_project}):", options.merge!({ default: Toolshed::Client.default_ticket_tracker_project }))
17
+ options.merge!({ project: ticket_tracker_project_name })
18
+ end
14
19
 
15
- default_ticket_id = Toolshed::TicketTracking::PivotalTracker::story_id_from_branch_name(Toolshed::Git::Base.branch_name)
20
+ default_ticket_id = Toolshed::TicketTracking::story_id_from_branch_name(Toolshed::Git::Base.branch_name)
16
21
  ticket_id = read_user_input_ticket_id("Story ID (Default: #{default_ticket_id}):", options.merge!({ default: default_ticket_id }))
22
+ options.merge!({ ticket_id: ticket_id })
23
+
24
+ ticket_tracker = ticket_tracker_class.create_instance(options)
17
25
 
18
- if Object.const_get("#{ticket_tracker_class}::USE_PROJECT_ID")
26
+ if use_project_id
19
27
  puts "Using Project: #{ticket_tracker_project_id}"
20
28
  end
21
29
  puts "Using Ticket: #{ticket_id}"
22
30
 
23
- result = ticket_tracker.story_information(ticket_id)
31
+ result = ticket_tracker.ticket
24
32
 
25
33
  if (options[:field])
26
34
  field_value = result.send(options[:field])
@@ -49,7 +57,7 @@ module Toolshed
49
57
  end
50
58
  end
51
59
 
52
- def read_user_input_project_id(message, options)
60
+ def read_user_input_project(message, options)
53
61
  return options[:default] if (options.has_key?(:use_defaults))
54
62
 
55
63
  puts message
@@ -0,0 +1,74 @@
1
+ module Toolshed
2
+ module Commands
3
+ class UpdateTicketStatus
4
+ def execute(args, options = {})
5
+ ticket_tracker_class = Object.const_get("Toolshed::TicketTracking::#{Toolshed::Client.ticket_tracking_tool.camel_case}")
6
+
7
+ use_project_id = Object.const_get("#{ticket_tracker_class}::USE_PROJECT_ID") rescue false
8
+ if use_project_id
9
+ ticket_tracker_project_id = read_user_input_project("Project ID (Default: #{Toolshed::Client.default_pivotal_tracker_project_id}):", options.merge!({ default: Toolshed::Client.default_pivotal_tracker_project_id }))
10
+ options.merge!({ project_id: ticket_tracker_project_id })
11
+ end
12
+
13
+ use_project_name = Object.const_get("#{ticket_tracker_class}::USE_PROJECT_NAME") rescue false
14
+ if use_project_name
15
+ ticket_tracker_project_name = read_user_input_project("Project Name (Default: #{Toolshed::Client.default_ticket_tracker_project}):", options.merge!({ default: Toolshed::Client.default_ticket_tracker_project }))
16
+ options.merge!({ project: ticket_tracker_project_name })
17
+ end
18
+
19
+ default_ticket_id = Toolshed::TicketTracking::story_id_from_branch_name(Toolshed::Git::Base.branch_name)
20
+ ticket_id = read_user_input_ticket_id("Ticket ID (Default: #{default_ticket_id}):", options.merge!({ default: default_ticket_id }))
21
+ options.merge!({ ticket_id: ticket_id })
22
+
23
+ ticket_tracker = ticket_tracker_class.create_instance(options)
24
+
25
+ status = read_user_input_status("Status:")
26
+
27
+ begin
28
+ result = ticket_tracker.update_ticket_status(status)
29
+ puts result
30
+ rescue => e
31
+ puts e.message
32
+ exit
33
+ end
34
+ end
35
+
36
+ def read_user_input_project(message, options)
37
+ return options[:default] if (options.has_key?(:use_defaults))
38
+
39
+ puts message
40
+ value = $stdin.gets.chomp
41
+
42
+ if (value.empty?)
43
+ value = options[:default]
44
+ end
45
+
46
+ value
47
+ end
48
+
49
+ def read_user_input_ticket_id(message, options)
50
+ return options[:default] if (options.has_key?(:use_defaults))
51
+
52
+ puts message
53
+ value = $stdin.gets.chomp
54
+
55
+ if (value.empty?)
56
+ value = options[:default]
57
+ end
58
+
59
+ value
60
+ end
61
+
62
+ def read_user_input_status(message)
63
+ puts message
64
+ value = $stdin.gets.chomp
65
+
66
+ until (!value.blank?)
67
+ puts "Status must be passed in"
68
+ puts message
69
+ value = $stdin.gets.chomp
70
+ end
71
+ end
72
+ end
73
+ end
74
+ end
@@ -1,6 +1,7 @@
1
1
  module Toolshed
2
2
  module Git
3
- DEFAULT_GIT_TOOL = 'github'
3
+ DEFAULT_GIT_TOOL = 'github'
4
+ DEFAULT_BRANCH_FROM = 'master'
4
5
 
5
6
  def branch_name
6
7
  # branch information
@@ -49,7 +50,7 @@ module Toolshed
49
50
  end
50
51
 
51
52
  def clean_branch_name(branch_name)
52
- branch_name.strip.downcase.tr(" ", "_").gsub("-", "").gsub("&", "").gsub("/", "_").gsub(".", "_").gsub("'", "").gsub("__", "_").gsub(":", "")
53
+ branch_name.strip.downcase.tr(" ", "_").gsub("&", "").gsub("/", "_").gsub(".", "_").gsub("'", "").gsub("__", "_").gsub(":", "").gsub(",", "")
53
54
  end
54
55
 
55
56
  def push(options = {})
@@ -9,8 +9,9 @@ module Toolshed
9
9
  def initialize(options={})
10
10
  super(options)
11
11
 
12
- username = Toolshed::Client::github_username
13
- password = Toolshed::Client::github_password
12
+ username = Toolshed::Client::github_username
13
+ password = Toolshed::Client::github_password
14
+ token = Toolshed::Client::github_token
14
15
 
15
16
  unless (options[:username].nil?)
16
17
  username = options[:username]
@@ -20,10 +21,20 @@ module Toolshed
20
21
  password = options[:password]
21
22
  end
22
23
 
24
+ unless (token.nil?)
25
+ username = token
26
+ password = nil
27
+ end
28
+
29
+ unless (options[:token].nil?)
30
+ username = options[:token]
31
+ password = nil
32
+ end
33
+
23
34
  @auth = { username: username, password: password }
24
35
  self.default_options = {
25
36
  :headers => {
26
- "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"
37
+ "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",
27
38
  },
28
39
  basic_auth: @auth,
29
40
  }