toolshed 1.0.2 → 1.0.3
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 +4 -4
- data/.gitignore +2 -0
- data/.rubocop.yml +11 -0
- data/.toolshedrc.sample +32 -0
- data/README.md +159 -2
- data/Rakefile +3 -3
- data/bin/toolshed +6 -1
- data/lib/toolshed.rb +38 -28
- data/lib/toolshed/base.rb +33 -11
- data/lib/toolshed/cli.rb +30 -38
- data/lib/toolshed/client.rb +87 -293
- data/lib/toolshed/commands/base.rb +65 -23
- data/lib/toolshed/commands/checkout_branch.rb +15 -2
- data/lib/toolshed/commands/create_branch.rb +34 -29
- data/lib/toolshed/commands/create_pivotal_tracker_note.rb +9 -3
- data/lib/toolshed/commands/create_pull_request.rb +115 -68
- data/lib/toolshed/commands/create_ticket_comment.rb +17 -1
- data/lib/toolshed/commands/delete_branch.rb +34 -3
- data/lib/toolshed/commands/get_daily_time_update.rb +20 -3
- data/lib/toolshed/commands/list_branches.rb +16 -5
- data/lib/toolshed/commands/push_branch.rb +28 -9
- data/lib/toolshed/commands/rename_branch.rb +29 -0
- data/lib/toolshed/commands/ssh.rb +44 -3
- data/lib/toolshed/commands/ticket_information.rb +30 -4
- data/lib/toolshed/commands/update_pivotal_tracker_story_status.rb +9 -3
- data/lib/toolshed/commands/update_ticket_status.rb +8 -2
- data/lib/toolshed/entry_point.rb +89 -0
- data/lib/toolshed/git.rb +59 -0
- data/lib/toolshed/git/branch.rb +224 -0
- data/lib/toolshed/git/github.rb +45 -57
- data/lib/toolshed/git/validator.rb +14 -0
- data/lib/toolshed/logger.rb +46 -0
- data/lib/toolshed/password.rb +11 -6
- data/lib/toolshed/server_administration/ssh.rb +4 -2
- data/lib/toolshed/ticket_tracking/jira.rb +8 -6
- data/lib/toolshed/ticket_tracking/pivotal_tracker.rb +8 -6
- data/lib/toolshed/time_tracking/harvest.rb +8 -14
- data/lib/toolshed/version.rb +25 -1
- data/test/commands/checkout_branch_test.rb +11 -7
- data/test/commands/create_branch_test.rb +29 -24
- data/test/commands/create_pull_request_test.rb +39 -31
- data/test/commands/delete_branch_test.rb +35 -25
- data/test/commands/get_daily_time_update_test.rb +8 -8
- data/test/commands/push_branch_test.rb +27 -15
- data/test/commands/rename_branch_test.rb +59 -0
- data/test/git/git_helper.rb +5 -5
- data/test/git/git_test.rb +36 -31
- data/test/git/github_test.rb +9 -46
- data/test/helper.rb +11 -11
- data/test/server_administration/ssh_test.rb +1 -0
- data/test/ticket_tracking/jira_test.rb +18 -16
- data/test/time_tracking/harvest_test.rb +8 -6
- data/toolshed.gemspec +23 -20
- metadata +95 -46
- data/bin/toolshed.rb +0 -261
- data/lib/toolshed/git/git.rb +0 -119
data/lib/toolshed/client.rb
CHANGED
@@ -1,308 +1,102 @@
|
|
1
|
+
require 'singleton'
|
1
2
|
require 'toolshed/version'
|
2
3
|
require 'yaml'
|
3
4
|
|
4
5
|
module Toolshed
|
6
|
+
# This is responsible for loading .toolshedrc file
|
5
7
|
class Client
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
def self.github_password=(password)
|
49
|
-
@github_password = password
|
50
|
-
end
|
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
|
-
|
60
|
-
def self.pull_from_remote_name
|
61
|
-
@pull_from_remote_name
|
62
|
-
end
|
63
|
-
|
64
|
-
def self.pull_from_remote_name=(pull_from_remote_name)
|
65
|
-
@pull_from_remote_name = pull_from_remote_name
|
66
|
-
end
|
67
|
-
|
68
|
-
def self.pull_from_repository_user
|
69
|
-
@pull_from_repository_user
|
70
|
-
end
|
71
|
-
|
72
|
-
def self.pull_from_repository_user=(pull_from_repository_user)
|
73
|
-
@pull_from_repository_user = pull_from_repository_user
|
74
|
-
end
|
75
|
-
|
76
|
-
def self.pull_from_repository_name
|
77
|
-
@pull_from_repository_name
|
78
|
-
end
|
79
|
-
|
80
|
-
def self.pull_from_repository_name=(pull_from_repository_name)
|
81
|
-
@pull_from_repository_name = pull_from_repository_name
|
82
|
-
end
|
83
|
-
|
84
|
-
def self.push_to_repository_user
|
85
|
-
@push_to_repository_user
|
86
|
-
end
|
87
|
-
|
88
|
-
def self.push_to_repository_user=(push_to_repository_user)
|
89
|
-
@push_to_repository_user = push_to_repository_user
|
90
|
-
end
|
91
|
-
|
92
|
-
def self.push_to_remote_name
|
93
|
-
@push_to_remote_name
|
94
|
-
end
|
95
|
-
|
96
|
-
def self.push_to_remote_name=(push_to_remote_name)
|
97
|
-
@push_to_remote_name = push_to_remote_name
|
98
|
-
end
|
99
|
-
|
100
|
-
def self.use_git_submodules
|
101
|
-
@use_git_submodules
|
102
|
-
end
|
103
|
-
|
104
|
-
def self.use_git_submodules=(use_git_submodules)
|
105
|
-
@use_git_submodules = use_git_submodules
|
106
|
-
end
|
107
|
-
|
108
|
-
def self.git_tool
|
109
|
-
(@git_tool.nil?) ? Toolshed::Git::DEFAULT_GIT_TOOL : @git_tool
|
110
|
-
end
|
111
|
-
|
112
|
-
def self.git_tool=(git_tool)
|
113
|
-
@git_tool = git_tool
|
114
|
-
end
|
115
|
-
|
116
|
-
|
117
|
-
# ticket tracking information
|
118
|
-
|
119
|
-
def self.pivotal_tracker_username
|
120
|
-
@pivotal_tracker_username
|
121
|
-
end
|
122
|
-
|
123
|
-
def self.pivotal_tracker_username=(username)
|
124
|
-
@pivotal_tracker_username = username
|
125
|
-
end
|
126
|
-
|
127
|
-
def self.pivotal_tracker_password
|
128
|
-
@pivotal_tracker_password
|
129
|
-
end
|
130
|
-
|
131
|
-
def self.pivotal_tracker_password=(password)
|
132
|
-
@pivotal_tracker_password = password
|
133
|
-
end
|
134
|
-
|
135
|
-
def self.default_pivotal_tracker_project_id
|
136
|
-
@default_pivotal_tracker_project_id
|
137
|
-
end
|
138
|
-
|
139
|
-
def self.default_pivotal_tracker_project_id=(default_pivotal_tracker_project_id)
|
140
|
-
@default_pivotal_tracker_project_id = default_pivotal_tracker_project_id
|
141
|
-
end
|
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
|
154
|
-
|
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
|
166
|
-
|
167
|
-
def self.ticket_tracking_tool
|
168
|
-
@ticket_tracking_tool
|
169
|
-
end
|
170
|
-
|
171
|
-
def self.ticket_tracking_tool=(ticket_tracking_tool)
|
172
|
-
@ticket_tracking_tool = ticket_tracking_tool
|
173
|
-
end
|
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
|
-
|
191
|
-
def self.default_pull_request_title_format
|
192
|
-
@default_pull_request_title_format
|
193
|
-
end
|
194
|
-
|
195
|
-
def self.default_pull_request_title_format=(default_pull_request_title_format)
|
196
|
-
@default_pull_request_title_format = default_pull_request_title_format
|
197
|
-
end
|
198
|
-
|
199
|
-
# time tracking configuration
|
200
|
-
|
201
|
-
def self.time_tracking_tool
|
202
|
-
@time_tracking_tool
|
203
|
-
end
|
204
|
-
|
205
|
-
def self.time_tracking_tool=(time_tracking_tool)
|
206
|
-
@time_tracking_tool = time_tracking_tool
|
207
|
-
end
|
208
|
-
|
209
|
-
def self.time_tracking_username
|
210
|
-
@time_tracking_username
|
211
|
-
end
|
212
|
-
|
213
|
-
def self.time_tracking_username=(time_tracking_username)
|
214
|
-
@time_tracking_username = time_tracking_username
|
215
|
-
end
|
216
|
-
|
217
|
-
def self.time_tracking_password
|
218
|
-
@time_tracking_password
|
219
|
-
end
|
220
|
-
|
221
|
-
def self.time_tracking_password=(time_tracking_password)
|
222
|
-
@time_tracking_password = time_tracking_password
|
223
|
-
end
|
224
|
-
|
225
|
-
def self.time_tracking_owner
|
226
|
-
@time_tracking_owner
|
227
|
-
end
|
228
|
-
|
229
|
-
def self.time_tracking_owner=(time_tracking_owner)
|
230
|
-
@time_tracking_owner = time_tracking_owner
|
231
|
-
end
|
232
|
-
|
233
|
-
def self.time_tracking_default_project_id
|
234
|
-
@time_tracking_default_project_id
|
235
|
-
end
|
236
|
-
|
237
|
-
def self.time_tracking_default_project_id=(time_tracking_default_project_id)
|
238
|
-
@time_tracking_default_project_id = time_tracking_default_project_id
|
239
|
-
end
|
240
|
-
|
241
|
-
def self.load_credentials_if_necessary
|
242
|
-
load_credentials unless credentials_loaded?
|
243
|
-
end
|
244
|
-
|
245
|
-
def self.config_path
|
246
|
-
ENV['TOOLSHED_CONFIG'] || '~/.toolshedrc'
|
247
|
-
end
|
8
|
+
include Singleton
|
9
|
+
|
10
|
+
attr_accessor :debug,
|
11
|
+
:git_quiet,
|
12
|
+
:use_defaults,
|
13
|
+
:github_username,
|
14
|
+
:github_password,
|
15
|
+
:github_token,
|
16
|
+
:use_defaults,
|
17
|
+
:pull_from_repository_user,
|
18
|
+
:pull_from_repository_name,
|
19
|
+
:pull_from_remote_name,
|
20
|
+
:push_to_repository_user,
|
21
|
+
:push_to_remote_name,
|
22
|
+
:use_git_submodules,
|
23
|
+
:git_tool,
|
24
|
+
:pivotal_tracker_username,
|
25
|
+
:pivotal_tracker_password,
|
26
|
+
:default_pivotal_tracker_project_id,
|
27
|
+
:ticket_tracker_username,
|
28
|
+
:ticket_tracker_password,
|
29
|
+
:default_ticket_tracker_project,
|
30
|
+
:ticket_tracking_tool,
|
31
|
+
:ticket_tracker_owner,
|
32
|
+
:ticket_status_for_complete,
|
33
|
+
:default_pull_request_title_format,
|
34
|
+
:time_tracking_tool,
|
35
|
+
:time_tracking_username,
|
36
|
+
:time_tracking_password,
|
37
|
+
:time_tracking_owner,
|
38
|
+
:time_tracking_default_project_id,
|
39
|
+
:load_credentials_if_necessary,
|
40
|
+
:log_path,
|
41
|
+
:credentials_loaded_from
|
42
|
+
|
43
|
+
GITHUB_BASE_API_URL = 'https://api.github.com/'
|
44
|
+
PIVOTAL_TRACKER_BASE_API_URL = 'https://www.pivotaltracker.com/services/v5/'
|
45
|
+
|
46
|
+
class << self
|
47
|
+
def config_path
|
48
|
+
ENV['TOOLSHED_CONFIG'] || '~/.toolshedrc'
|
49
|
+
end
|
248
50
|
|
249
|
-
|
250
|
-
|
251
|
-
|
252
|
-
|
253
|
-
|
254
|
-
|
255
|
-
|
256
|
-
|
257
|
-
|
258
|
-
|
259
|
-
|
260
|
-
|
261
|
-
|
262
|
-
|
263
|
-
|
264
|
-
|
265
|
-
|
266
|
-
|
267
|
-
|
268
|
-
|
269
|
-
|
270
|
-
|
271
|
-
|
272
|
-
|
273
|
-
|
274
|
-
|
275
|
-
|
276
|
-
|
277
|
-
|
278
|
-
|
279
|
-
|
51
|
+
def load_credentials # rubocop:disable Metrics/AbcSize, Metrics/MethodLength
|
52
|
+
credentials = Client.read_credenials
|
53
|
+
instance.github_username ||= credentials['github_username']
|
54
|
+
instance.github_password ||= credentials['github_password']
|
55
|
+
instance.github_token ||= credentials['github_token']
|
56
|
+
instance.pivotal_tracker_username ||= credentials['pivotal_tracker_username']
|
57
|
+
instance.pivotal_tracker_password ||= credentials['pivotal_tracker_password']
|
58
|
+
instance.default_pivotal_tracker_project_id ||= credentials['default_pivotal_tracker_project_id'] # rubocop:disable Metrics/LineLength
|
59
|
+
instance.ticket_tracker_username ||= credentials['ticket_tracker_username']
|
60
|
+
instance.ticket_tracker_password ||= credentials['ticket_tracker_password']
|
61
|
+
instance.ticket_tracker_owner ||= credentials['ticket_tracker_owner']
|
62
|
+
instance.ticket_status_for_complete ||= credentials['ticket_status_for_complete']
|
63
|
+
instance.default_ticket_tracker_project ||= credentials['default_ticket_tracker_project'] # rubocop:disable Metrics/LineLength
|
64
|
+
instance.pull_from_remote_name ||= credentials['pull_from_remote_name']
|
65
|
+
instance.pull_from_repository_user ||= credentials['pull_from_repository_user']
|
66
|
+
instance.pull_from_repository_name ||= credentials['pull_from_repository_name']
|
67
|
+
instance.push_to_repository_user ||= credentials['push_to_repository_user']
|
68
|
+
instance.push_to_remote_name ||= credentials['push_to_remote_name']
|
69
|
+
instance.ticket_tracking_tool ||= credentials['ticket_tracking_tool'] # rubocop:disable Metrics/LineLength
|
70
|
+
instance.use_git_submodules ||= credentials['use_git_submodules']
|
71
|
+
instance.git_tool ||= credentials['git_tool']
|
72
|
+
instance.time_tracking_username ||= credentials['time_tracking_username']
|
73
|
+
instance.time_tracking_password ||= credentials['time_tracking_password']
|
74
|
+
instance.time_tracking_owner ||= credentials['time_tracking_owner']
|
75
|
+
instance.time_tracking_default_project_id ||= credentials['time_tracking_default_project_id'] # rubocop:disable Metrics/LineLength
|
76
|
+
instance.time_tracking_tool ||= credentials['time_tracking_tool']
|
77
|
+
instance.git_quiet ||= (credentials['git_quiet']) ? '&> /dev/null' : ''
|
78
|
+
instance.use_defaults ||= credentials['use_defaults']
|
79
|
+
instance.default_pull_request_title_format ||= credentials['default_pull_request_title_format'] # rubocop:disable Metrics/LineLength
|
80
|
+
instance.log_path ||= credentials['log_path']
|
81
|
+
instance.credentials_loaded_from ||= load_credentials_from
|
82
|
+
end
|
280
83
|
|
281
|
-
|
282
|
-
|
283
|
-
|
84
|
+
def read_credenials
|
85
|
+
YAML.load_file(File.expand_path(load_credentials_from))
|
86
|
+
end
|
284
87
|
|
285
|
-
|
286
|
-
begin
|
88
|
+
def load_credentials_from
|
287
89
|
dir = Dir.pwd
|
288
|
-
while File.expand_path(dir) != '/'
|
289
|
-
|
290
|
-
|
291
|
-
|
292
|
-
elsif (File.exists? "#{dir}/.toolshed")
|
293
|
-
loaded_from_path = "#{dir}/.toolshed"
|
294
|
-
warn "[DEPRECATION] `.toolshed` file is being deprecated. Please use a `.toolshedrc` file instead."
|
295
|
-
break
|
90
|
+
while File.expand_path(dir) != '/'
|
91
|
+
unless File.exist?("#{dir}/.toolshedrc")
|
92
|
+
dir = File.join dir, '..'
|
93
|
+
next
|
296
94
|
end
|
297
|
-
|
298
|
-
|
95
|
+
credentials_loaded_from = "#{dir}/.toolshedrc"
|
96
|
+
break
|
299
97
|
end
|
300
98
|
|
301
|
-
|
302
|
-
credentials = YAML.load_file(File.expand_path(loaded_from_path))
|
303
|
-
rescue => error
|
304
|
-
puts "Error loading your credentials: #{error.message}"
|
305
|
-
exit 1
|
99
|
+
credentials_loaded_from
|
306
100
|
end
|
307
101
|
end
|
308
102
|
end
|
@@ -1,66 +1,108 @@
|
|
1
|
+
require 'toolshed/cli'
|
2
|
+
require 'optparse'
|
3
|
+
|
1
4
|
module Toolshed
|
2
5
|
module Commands
|
6
|
+
# Base class for all commands responsible for common methods
|
3
7
|
class Base
|
4
|
-
def initialize(
|
8
|
+
def initialize(_options = {})
|
9
|
+
end
|
10
|
+
|
11
|
+
def self.parse(command, cli_options = {}) # rubocop:disable Metrics/AbcSize, Metrics/MethodLength, Metrics/LineLength, Metrics/CyclomaticComplexity
|
12
|
+
options = {}
|
13
|
+
options_parser = OptionParser.new do |opts|
|
14
|
+
opts.banner = cli_options[:banner] if cli_options[:banner]
|
15
|
+
cli_options[:options].each do |option_name, option_variables|
|
16
|
+
letter_map = ('a'..'z').map { |letter| letter }
|
17
|
+
short_on = (option_variables[:short_on]) ? option_variables[:short_on] : letter_map[rand(letter_map.length)] # rubocop:disable Metrics/LineLength
|
18
|
+
on = (option_variables[:on]) ? option_variables[:on] : "--#{option_name.to_s.split('_').join('-')} [ARG]" # rubocop:disable Metrics/LineLength
|
19
|
+
opts.on(short_on, on) do |opt|
|
20
|
+
value = (option_variables[:default].nil?) ? opt : option_variables[:default]
|
21
|
+
options.merge!(option_name => value)
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
options_parser.order! if options_parser
|
26
|
+
begin
|
27
|
+
cli = Toolshed::CLI.new
|
28
|
+
cli.execute(command, ARGV, options)
|
29
|
+
rescue Toolshed::CommandNotFound => e
|
30
|
+
Toolshed.logger.fatal e.message
|
31
|
+
Toolshed.die
|
32
|
+
end
|
5
33
|
end
|
6
34
|
|
7
|
-
def read_user_input(message, options={})
|
8
|
-
return options[:default] if Toolshed::Client.use_defaults
|
9
|
-
|
35
|
+
def read_user_input(message, options = {})
|
36
|
+
return options[:default] if Toolshed::Client.instance.use_defaults
|
37
|
+
required = options[:required] || false
|
38
|
+
value = ''
|
39
|
+
if required
|
40
|
+
value = prompt_user_input(message, options) while value.empty?
|
41
|
+
else
|
42
|
+
value = prompt_user_input(message, options)
|
43
|
+
end
|
44
|
+
value
|
10
45
|
end
|
11
46
|
|
12
|
-
def read_user_input_title(message, options={})
|
13
|
-
return options[:title] if options.
|
47
|
+
def read_user_input_title(message, options = {})
|
48
|
+
return options[:title] if options.key?(:title)
|
14
49
|
read_user_input(message, options)
|
15
50
|
end
|
16
51
|
|
17
|
-
def read_user_input_body(message, options={})
|
18
|
-
return options[:body] if options.
|
52
|
+
def read_user_input_body(message, options = {})
|
53
|
+
return options[:body] if options.key?(:body)
|
19
54
|
read_user_input(message, options)
|
20
55
|
end
|
21
56
|
|
22
57
|
def use_ticket_tracker_project_id(options)
|
23
|
-
options
|
24
|
-
options.merge!({
|
58
|
+
options.merge!(
|
25
59
|
ticket_tracker_const: 'USE_PROJECT_ID',
|
26
60
|
type: :project_id,
|
27
61
|
default_method: 'default_pivotal_tracker_project_id',
|
28
|
-
default_message: "Project ID (Default: #{Toolshed::Client.default_pivotal_tracker_project_id}):"
|
29
|
-
|
30
|
-
|
62
|
+
default_message: "Project ID (Default: #{Toolshed::Client.instance.default_pivotal_tracker_project_id}):" # rubocop:disable Metrics/LineLength
|
63
|
+
)
|
64
|
+
use_ticket_tracker_by_type(options)
|
31
65
|
end
|
32
66
|
|
33
67
|
def use_ticket_tracker_project_name(options)
|
34
|
-
options.merge!(
|
68
|
+
options.merge!(
|
35
69
|
ticket_tracker_const: 'USE_PROJECT_NAME',
|
36
70
|
type: :project,
|
37
71
|
default_method: 'default_ticket_tracker_project',
|
38
|
-
default_message: "Project Name (Default: #{Toolshed::Client.default_ticket_tracker_project}):"
|
39
|
-
|
72
|
+
default_message: "Project Name (Default: #{Toolshed::Client.instance.default_ticket_tracker_project}):" # rubocop:disable Metrics/LineLength
|
73
|
+
)
|
40
74
|
use_ticket_tracker_by_type(options)
|
41
75
|
end
|
42
76
|
|
43
77
|
def use_ticket_tracker_by_type(options)
|
44
|
-
use_field = Object.const_get("#{ticket_tracker_class}::#{options[:ticket_tracker_const]}") rescue false
|
78
|
+
use_field = Object.const_get("#{ticket_tracker_class}::#{options[:ticket_tracker_const]}") rescue false # rubocop:disable Metrics/LineLength, Style/RescueModifier
|
45
79
|
if use_field
|
46
|
-
ticket_tracker_response = read_user_input(
|
47
|
-
options
|
80
|
+
ticket_tracker_response = read_user_input(
|
81
|
+
options[:default_message],
|
82
|
+
options.merge!(
|
83
|
+
default: Toolshed::Client.instance.send(options[:default_method])
|
84
|
+
)
|
48
85
|
)
|
49
|
-
options.merge!(
|
86
|
+
options.merge!(options[:type] => ticket_tracker_response)
|
50
87
|
end
|
51
88
|
options
|
52
89
|
end
|
53
90
|
|
54
91
|
def use_project_id
|
55
|
-
Object.const_get("#{ticket_tracker_class}::USE_PROJECT_ID") rescue false
|
92
|
+
Object.const_get("#{ticket_tracker_class}::USE_PROJECT_ID") rescue false # rubocop:disable Style/RescueModifier, Metrics/LineLength
|
56
93
|
end
|
57
94
|
|
58
95
|
private
|
59
96
|
|
60
|
-
def prompt_user_input(message, options)
|
97
|
+
def prompt_user_input(message, options) # rubocop:disable Metrics/AbcSize, Metrics/CyclomaticComplexity
|
98
|
+
required = options[:required] || false
|
61
99
|
puts message
|
62
100
|
value = $stdin.gets.chomp
|
63
|
-
value.
|
101
|
+
if required && value.nil? || value.empty?
|
102
|
+
puts 'Value is required please try again.'
|
103
|
+
return value
|
104
|
+
end
|
105
|
+
(value.nil? || value.empty?) ? options[:default] : value
|
64
106
|
end
|
65
107
|
end
|
66
108
|
end
|