toolshed 1.0.0 → 1.0.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 54a3e26a9cf4670879ed25c97435e8561787c511
4
- data.tar.gz: b8f2a24202d44ad03349477e54d2ce1216ebfe61
3
+ metadata.gz: 6ba93e5a10749583bb6eaf60cbca9fba6b511514
4
+ data.tar.gz: a02953709a3fee4e24755aaf6a5011b6ed74dfb4
5
5
  SHA512:
6
- metadata.gz: cf484481408ec9dbac5b35d93e19e3dc39f907aec6c5e6fe5f908135b794a401498cd5e9353b6556aeab016a02bf6b32bf1e515de1e9f2e58f8d5a4aff16ca04
7
- data.tar.gz: 1b4833ba97542589fb44a81a358f250eaafe730d80e49b9c3339cee24b7df171dadb3f5bad726723df62984a6a176e4ee86565b053384aa87bc875c802ba0252
6
+ metadata.gz: 30b6e833386c13ff5806389dbe8b704e99979f1b4dae0af54de61bfb6c341bed85fff197ce42ce66f33461118e76fab4daf746593dc200f41f167fe5f0118192
7
+ data.tar.gz: bb95e2a36220f302baa4ce1c08c80558283d2d279fe661e41ce508846eb1f0a353f742094ceae6dcfc2116361c03be16000766b734e2e3a227bfb20654dec937
data/Rakefile CHANGED
@@ -5,7 +5,7 @@ require File.expand_path(File.dirname(__FILE__)) + "/test/config"
5
5
 
6
6
  Rake::TestTask.new do |t|
7
7
  t.libs << 'test'
8
- t.test_files = FileList['test/**/*_test.rb']
8
+ t.test_files = FileList['test/**/*_test.rb', 'test/*_test.rb']
9
9
  end
10
10
 
11
11
  desc "Run tests"
data/bin/toolshed.rb CHANGED
@@ -89,6 +89,18 @@ create_ticket_comment [ # Add a comment to a specific ticket
89
89
  ]
90
90
  update_ticket_status [ # Update a specific tickets status
91
91
  ]
92
+ ssh [
93
+ --use-sudo "true|false" # If you want the command to run under sudo i.e. sudo ssh ..
94
+ --host "ip_address" # The host you want to connect to
95
+ --connection-string-options "-p 4000" # A string of options that will be added onto the command
96
+ --commands 'command1;command2' # A list of commands either a string array "["command1", "command2"]" or "command1;command2" or put string into toolshedrc file and call it "main_server_commands"
97
+ --password "password1" # The password you are using to login to the server
98
+ --prompt-for-password "true|false" # If you want to be more secure and just prompt for passwords
99
+ --user "username" # The user you want to connect with
100
+ --keys "path/to/file" # IdentityFile you want to use for authentication if passed no password will be asked
101
+ --sudo-password "password1" # If you need to use sudo provide a sudo password this can be taken from toolshedrc file also
102
+ --verbose-output "true|flase" # If you want to see commands being ran and other verbose output set this flag to true
103
+ ]
92
104
  EOF
93
105
  end
94
106
 
@@ -198,6 +210,38 @@ if $0.split("/").last == 'toolshed'
198
210
  Toolshed::Client.use_defaults = opt
199
211
  end
200
212
  end,
213
+ 'ssh' => OptionParser.new do |opts|
214
+ opts.on("--use-sudo [ARG]") do |opt|
215
+ options[:use_sudo] = opt
216
+ end
217
+ opts.on("--host [ARG]") do |opt|
218
+ options[:host] = opt
219
+ end
220
+ opts.on("--connection-string-options [ARG]") do |opt|
221
+ options[:connection_string_options] = opt
222
+ end
223
+ opts.on("--commands [ARG]") do |opt|
224
+ options[:commands] = opt
225
+ end
226
+ opts.on("--password [ARG]") do |opt|
227
+ options[:password] = opt
228
+ end
229
+ opts.on("--prompt-for-password [ARG]") do |opt|
230
+ options[:prompt_for_password] = opt
231
+ end
232
+ opts.on("--user [ARG]") do |opt|
233
+ options[:user] = opt
234
+ end
235
+ opts.on("--keys [ARG]") do |opt|
236
+ options[:keys] = opt
237
+ end
238
+ opts.on("--sudo-password [ARG]") do |opt|
239
+ options[:sudo_password] = opt
240
+ end
241
+ opts.on("--verbose-output [ARG]") do |opt|
242
+ options[:verbose_output] = opt
243
+ end
244
+ end,
201
245
  }
202
246
 
203
247
  global.order!
data/lib/toolshed.rb CHANGED
@@ -33,3 +33,5 @@ require 'toolshed/ticket_tracking/jira'
33
33
  require 'toolshed/time_tracking/time_tracking'
34
34
  require 'toolshed/time_tracking/harvest'
35
35
  require 'toolshed/error'
36
+ require 'toolshed/password'
37
+ require 'toolshed/server_administration/ssh'
data/lib/toolshed/cli.rb CHANGED
@@ -33,6 +33,7 @@ module Toolshed
33
33
  'delete_branch' => Toolshed::Commands::DeleteBranch,
34
34
  'create_ticket_comment' => Toolshed::Commands::CreateTicketComment,
35
35
  'update_ticket_status' => Toolshed::Commands::UpdateTicketStatus,
36
+ 'ssh' => Toolshed::Commands::SSH,
36
37
  }
37
38
  end
38
39
  end
@@ -51,3 +52,4 @@ require 'toolshed/commands/list_branches'
51
52
  require 'toolshed/commands/delete_branch'
52
53
  require 'toolshed/commands/create_ticket_comment'
53
54
  require 'toolshed/commands/update_ticket_status'
55
+ require 'toolshed/commands/ssh'
@@ -230,17 +230,50 @@ module Toolshed
230
230
  @time_tracking_default_project_id = time_tracking_default_project_id
231
231
  end
232
232
 
233
-
234
-
235
233
  def self.load_credentials_if_necessary
236
234
  load_credentials unless credentials_loaded?
237
235
  end
238
236
 
239
237
  def self.config_path
240
- ENV['TOOLSHED_CONFIG'] || '~/.toolshed'
238
+ ENV['TOOLSHED_CONFIG'] || '~/.toolshedrc'
241
239
  end
242
240
 
243
241
  def self.load_credentials(path = config_path)
242
+ credentials = Client.read_credenials(config_path)
243
+ self.github_username ||= credentials['github_username']
244
+ self.github_password ||= credentials['github_password']
245
+ self.github_token ||= credentials['github_token']
246
+ self.pivotal_tracker_username ||= credentials['pivotal_tracker_username']
247
+ self.pivotal_tracker_password ||= credentials['pivotal_tracker_password']
248
+ self.default_pivotal_tracker_project_id ||= credentials['default_pivotal_tracker_project_id']
249
+ self.ticket_tracker_username ||= credentials['ticket_tracker_username']
250
+ self.ticket_tracker_password ||= credentials['ticket_tracker_password']
251
+ self.ticket_tracker_owner ||= credentials['ticket_tracker_owner']
252
+ self.ticket_status_for_complete ||= credentials['ticket_status_for_complete']
253
+ self.default_ticket_tracker_project ||= credentials['default_ticket_tracker_project']
254
+ self.pull_from_remote_name ||= credentials['pull_from_remote_name']
255
+ self.pull_from_repository_user ||= credentials['pull_from_repository_user']
256
+ self.pull_from_repository_name ||= credentials['pull_from_repository_name']
257
+ self.push_to_repository_user ||= credentials['push_to_repository_user']
258
+ self.push_to_remote_name ||= credentials['push_to_remote_name']
259
+ self.ticket_tracking_tool ||= credentials['ticket_tracking_tool']
260
+ self.use_git_submodules ||= credentials['use_git_submodules']
261
+ self.git_tool ||= credentials['git_tool']
262
+ self.time_tracking_username ||= credentials['time_tracking_username']
263
+ self.time_tracking_password ||= credentials['time_tracking_password']
264
+ self.time_tracking_owner ||= credentials['time_tracking_owner']
265
+ self.time_tracking_default_project_id ||= credentials['time_tracking_default_project_id']
266
+ self.time_tracking_tool ||= credentials['time_tracking_tool']
267
+ self.git_quiet ||= (credentials['git_quiet']) ? '&> /dev/null' : ''
268
+ self.use_defaults ||= credentials['use_defaults']
269
+ @credentials_loaded = true
270
+ end
271
+
272
+ def self.credentials_loaded?
273
+ (@credentials_loaded ||= false)
274
+ end
275
+
276
+ def self.read_credenials(path = Client.config_path)
244
277
  begin
245
278
  dir = Dir.pwd
246
279
  while File.expand_path(dir) != '/' do
@@ -256,43 +289,12 @@ module Toolshed
256
289
  dir = File.join dir, '..'
257
290
  end
258
291
 
259
- credentials = YAML.load_file(File.expand_path(loaded_from_path))
260
- self.github_username ||= credentials['github_username']
261
- self.github_password ||= credentials['github_password']
262
- self.github_token ||= credentials['github_token']
263
- self.pivotal_tracker_username ||= credentials['pivotal_tracker_username']
264
- self.pivotal_tracker_password ||= credentials['pivotal_tracker_password']
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']
271
- self.pull_from_remote_name ||= credentials['pull_from_remote_name']
272
- self.pull_from_repository_user ||= credentials['pull_from_repository_user']
273
- self.pull_from_repository_name ||= credentials['pull_from_repository_name']
274
- self.push_to_repository_user ||= credentials['push_to_repository_user']
275
- self.push_to_remote_name ||= credentials['push_to_remote_name']
276
- self.ticket_tracking_tool ||= credentials['ticket_tracking_tool']
277
- self.use_git_submodules ||= credentials['use_git_submodules']
278
- self.git_tool ||= credentials['git_tool']
279
- self.time_tracking_username ||= credentials['time_tracking_username']
280
- self.time_tracking_password ||= credentials['time_tracking_password']
281
- self.time_tracking_owner ||= credentials['time_tracking_owner']
282
- self.time_tracking_default_project_id ||= credentials['time_tracking_default_project_id']
283
- self.time_tracking_tool ||= credentials['time_tracking_tool']
284
- self.git_quiet ||= (credentials['git_quiet']) ? '&> /dev/null' : ''
285
- self.use_defaults ||= credentials['use_defaults']
286
- @credentials_loaded = true
287
292
  puts "Credentials loaded from #{File.absolute_path(loaded_from_path)}"
293
+ credentials = YAML.load_file(File.expand_path(loaded_from_path))
288
294
  rescue => error
289
295
  puts "Error loading your credentials: #{error.message}"
290
296
  exit 1
291
297
  end
292
298
  end
293
-
294
- def self.credentials_loaded?
295
- (@credentials_loaded ||= false)
296
- end
297
299
  end
298
300
  end
@@ -0,0 +1,16 @@
1
+ module Toolshed
2
+ module Commands
3
+ class SSH
4
+ def execute(args, options = {})
5
+ puts "running ssh command with options #{options.inspect}" unless options[:verbose_output].blank?
6
+ begin
7
+ ssh = Toolshed::ServerAdministration::SSH.new(options)
8
+ ssh.execute
9
+ rescue => e
10
+ puts e.inspect
11
+ puts "Unable to connect to #{options[:host]}"
12
+ end
13
+ end
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,42 @@
1
+ module Toolshed
2
+ class Password
3
+ attr_accessor :password, :sudo_password
4
+
5
+ def initialize(options={})
6
+ self.password = options[:password] ||= ''
7
+ self.sudo_password = options[:sudo_password] ||= ''
8
+ end
9
+
10
+ def read_user_input_password(type, prompt_message='Password:')
11
+ unless self.send(type).blank?
12
+ read_password_from_configuration(type)
13
+ else
14
+ prompt_user_to_input_password(prompt_message)
15
+ end
16
+ end
17
+
18
+ protected
19
+
20
+ def prompt_user_to_input_password(message)
21
+ system "stty -echo"
22
+ puts message
23
+ value = get_password_input
24
+ system "stty echo"
25
+
26
+ value
27
+ end
28
+
29
+ def get_password_input
30
+ $stdin.gets.chomp.strip
31
+ end
32
+
33
+ def read_password_from_configuration(type)
34
+ credentials = Toolshed::Client.read_credenials
35
+ if credentials[self.send(type)]
36
+ credentials[self.send(type)]
37
+ else
38
+ self.send(type)
39
+ end
40
+ end
41
+ end
42
+ end
@@ -0,0 +1,89 @@
1
+ require 'net/ssh'
2
+
3
+ module Toolshed
4
+ module ServerAdministration
5
+ class SSH
6
+ attr_accessor :keys, :password, :sudo_password, :host, :user, :ssh_options, :channel, :commands, :password
7
+
8
+ def initialize(options={})
9
+ self.password = options[:password] ||= ''
10
+ self.sudo_password = options[:sudo_password] ||= ''
11
+ self.keys = options[:keys] ||= ''
12
+ self.host = options[:host] ||= ''
13
+ self.user = options[:user] ||= ''
14
+ self.ssh_options = options[:ssh_options] ||= {}
15
+ self.commands = options[:commands] ||= ''
16
+ self.password = Toolshed::Password.new(options)
17
+
18
+ set_ssh_options
19
+ end
20
+
21
+ def execute
22
+ Net::SSH.start(self.host, self.user, self.ssh_options) do |ssh|
23
+ ssh.open_channel do |channel|
24
+ self.channel = channel
25
+ request_pty
26
+ run_commands
27
+ end
28
+ ssh.loop
29
+ end
30
+ end
31
+
32
+ protected
33
+
34
+ def run_commands
35
+ # @TODO fix this so it does not just pass in the commands option but converts to a string i.e. command1;command2
36
+ self.channel.exec(self.commands) do |ch, success|
37
+ abort "Could not execute commands!" unless success
38
+
39
+ on_data
40
+ on_extended_data
41
+ on_close
42
+ end
43
+ end
44
+
45
+ def request_pty
46
+ self.channel.request_pty do |ch, success|
47
+ puts (success) ? "Successfully obtained pty" : "Could not obtain pty"
48
+ end
49
+ end
50
+
51
+ def on_close
52
+ self.channel.on_close do |ch|
53
+ puts "Channel is closing!"
54
+ end
55
+ end
56
+
57
+ def on_extended_data
58
+ self.channel.on_extended_data do |ch, type, data|
59
+ puts "stderr: #{data}"
60
+ end
61
+ end
62
+
63
+ def on_data
64
+ self.channel.on_data do |ch, data|
65
+ puts "#{data}"
66
+ send_data(data)
67
+ end
68
+ end
69
+
70
+ def send_data(data)
71
+ send_password_data if data =~ /password/
72
+ send_yes_no_data if data =~ /Do you want to continue \[Y\/n\]?/
73
+ end
74
+
75
+ def send_password_data
76
+ self.channel.send_data "#{@password.read_user_input_password('sudo_password')}\n"
77
+ end
78
+
79
+ def send_yes_no_data
80
+ self.channel.send_data "Y\n"
81
+ end
82
+
83
+ def set_ssh_options
84
+ self.ssh_options.merge!({ keys: [self.keys] }) unless self.keys.blank?
85
+ self.ssh_options.merge!({ password: self.password.read_user_input_password('password') }) if self.keys.blank?
86
+ end
87
+ end
88
+ end
89
+ end
@@ -1,3 +1,3 @@
1
1
  module Toolshed
2
- VERSION = "1.0.0"
2
+ VERSION = "1.0.1"
3
3
  end
data/test/.toolshedrc ADDED
@@ -0,0 +1 @@
1
+ server_password: "tester1234"
@@ -0,0 +1,24 @@
1
+ require 'helper'
2
+
3
+ class PasswordTest < Test::Unit::TestCase
4
+ def test_read_user_input_password
5
+ password = Toolshed::Password.new({ password: 'test1234' })
6
+ assert_equal password.read_user_input_password('password'), 'test1234'
7
+ end
8
+
9
+ def test_read_user_input_password_sudo
10
+ password = Toolshed::Password.new({ sudo_password: 'test12345' })
11
+ assert_equal password.read_user_input_password('sudo_password'), 'test12345'
12
+ end
13
+
14
+ def test_read_user_input_password_prompt
15
+ password = Toolshed::Password.new({})
16
+ password.expects(:get_password_input).returns('readin1234')
17
+ assert_equal password.read_user_input_password('password'), 'readin1234'
18
+ end
19
+
20
+ def test_read_user_input_from_toolshedrc
21
+ password = Toolshed::Password.new({ password: 'server_password' })
22
+ assert_equal password.read_user_input_password('password'), 'tester1234'
23
+ end
24
+ end
@@ -0,0 +1,23 @@
1
+ require 'helper'
2
+
3
+ class SSHTest < Test::Unit::TestCase
4
+ def test_setting_ssh_options
5
+ ssh = Toolshed::ServerAdministration::SSH.new({ keys: 'testing1234' })
6
+ assert_equal Set.new(ssh.ssh_options), Set.new({ keys: ['testing1234'] })
7
+ end
8
+
9
+ def test_execute
10
+ params = { keys: 'testing1234', host: 'localhost', user: 'localhost' }
11
+
12
+ net_ssh_connection_mock = mock('Net::SSH::Connection::Session')
13
+ net_ssh_connection_mock.stubs({ connection: true })
14
+
15
+ net_ssh_connection_channel_mock = mock('Net::SSH::Connection::Channel')
16
+ net_ssh_connection_channel_mock.stubs({ request_pty: [net_ssh_connection_mock, 'good'] })
17
+
18
+ Net::SSH.expects(:start).with(params[:host], params[:user], { keys: [params[:keys]] }).returns(net_ssh_connection_mock)
19
+
20
+ ssh = Toolshed::ServerAdministration::SSH.new(params)
21
+ ssh.execute
22
+ end
23
+ end
data/toolshed.gemspec CHANGED
@@ -27,6 +27,7 @@ Gem::Specification.new do |spec|
27
27
  spec.add_dependency "launchy"
28
28
  spec.add_dependency "clipboard"
29
29
  spec.add_dependency "jira-ruby"
30
+ spec.add_dependency "net-ssh"
30
31
 
31
32
  spec.add_development_dependency "bundler", "~> 1.3"
32
33
  spec.add_development_dependency "rake"
metadata CHANGED
@@ -1,251 +1,265 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: toolshed
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.0
4
+ version: 1.0.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - test
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-06-08 00:00:00.000000000 Z
11
+ date: 2014-07-29 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: httparty
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - '>='
17
+ - - ">="
18
18
  - !ruby/object:Gem::Version
19
19
  version: '0'
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
- - - '>='
24
+ - - ">="
25
25
  - !ruby/object:Gem::Version
26
26
  version: '0'
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: json
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
- - - '>='
31
+ - - ">="
32
32
  - !ruby/object:Gem::Version
33
33
  version: '0'
34
34
  type: :runtime
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
- - - '>='
38
+ - - ">="
39
39
  - !ruby/object:Gem::Version
40
40
  version: '0'
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: pivotal-tracker
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
- - - '>='
45
+ - - ">="
46
46
  - !ruby/object:Gem::Version
47
47
  version: '0'
48
48
  type: :runtime
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
- - - '>='
52
+ - - ">="
53
53
  - !ruby/object:Gem::Version
54
54
  version: '0'
55
55
  - !ruby/object:Gem::Dependency
56
56
  name: harvested
57
57
  requirement: !ruby/object:Gem::Requirement
58
58
  requirements:
59
- - - '>='
59
+ - - ">="
60
60
  - !ruby/object:Gem::Version
61
61
  version: '0'
62
62
  type: :runtime
63
63
  prerelease: false
64
64
  version_requirements: !ruby/object:Gem::Requirement
65
65
  requirements:
66
- - - '>='
66
+ - - ">="
67
67
  - !ruby/object:Gem::Version
68
68
  version: '0'
69
69
  - !ruby/object:Gem::Dependency
70
70
  name: veto
71
71
  requirement: !ruby/object:Gem::Requirement
72
72
  requirements:
73
- - - '>='
73
+ - - ">="
74
74
  - !ruby/object:Gem::Version
75
75
  version: '0'
76
76
  type: :runtime
77
77
  prerelease: false
78
78
  version_requirements: !ruby/object:Gem::Requirement
79
79
  requirements:
80
- - - '>='
80
+ - - ">="
81
81
  - !ruby/object:Gem::Version
82
82
  version: '0'
83
83
  - !ruby/object:Gem::Dependency
84
84
  name: launchy
85
85
  requirement: !ruby/object:Gem::Requirement
86
86
  requirements:
87
- - - '>='
87
+ - - ">="
88
88
  - !ruby/object:Gem::Version
89
89
  version: '0'
90
90
  type: :runtime
91
91
  prerelease: false
92
92
  version_requirements: !ruby/object:Gem::Requirement
93
93
  requirements:
94
- - - '>='
94
+ - - ">="
95
95
  - !ruby/object:Gem::Version
96
96
  version: '0'
97
97
  - !ruby/object:Gem::Dependency
98
98
  name: clipboard
99
99
  requirement: !ruby/object:Gem::Requirement
100
100
  requirements:
101
- - - '>='
101
+ - - ">="
102
102
  - !ruby/object:Gem::Version
103
103
  version: '0'
104
104
  type: :runtime
105
105
  prerelease: false
106
106
  version_requirements: !ruby/object:Gem::Requirement
107
107
  requirements:
108
- - - '>='
108
+ - - ">="
109
109
  - !ruby/object:Gem::Version
110
110
  version: '0'
111
111
  - !ruby/object:Gem::Dependency
112
112
  name: jira-ruby
113
113
  requirement: !ruby/object:Gem::Requirement
114
114
  requirements:
115
- - - '>='
115
+ - - ">="
116
116
  - !ruby/object:Gem::Version
117
117
  version: '0'
118
118
  type: :runtime
119
119
  prerelease: false
120
120
  version_requirements: !ruby/object:Gem::Requirement
121
121
  requirements:
122
- - - '>='
122
+ - - ">="
123
+ - !ruby/object:Gem::Version
124
+ version: '0'
125
+ - !ruby/object:Gem::Dependency
126
+ name: net-ssh
127
+ requirement: !ruby/object:Gem::Requirement
128
+ requirements:
129
+ - - ">="
130
+ - !ruby/object:Gem::Version
131
+ version: '0'
132
+ type: :runtime
133
+ prerelease: false
134
+ version_requirements: !ruby/object:Gem::Requirement
135
+ requirements:
136
+ - - ">="
123
137
  - !ruby/object:Gem::Version
124
138
  version: '0'
125
139
  - !ruby/object:Gem::Dependency
126
140
  name: bundler
127
141
  requirement: !ruby/object:Gem::Requirement
128
142
  requirements:
129
- - - ~>
143
+ - - "~>"
130
144
  - !ruby/object:Gem::Version
131
145
  version: '1.3'
132
146
  type: :development
133
147
  prerelease: false
134
148
  version_requirements: !ruby/object:Gem::Requirement
135
149
  requirements:
136
- - - ~>
150
+ - - "~>"
137
151
  - !ruby/object:Gem::Version
138
152
  version: '1.3'
139
153
  - !ruby/object:Gem::Dependency
140
154
  name: rake
141
155
  requirement: !ruby/object:Gem::Requirement
142
156
  requirements:
143
- - - '>='
157
+ - - ">="
144
158
  - !ruby/object:Gem::Version
145
159
  version: '0'
146
160
  type: :development
147
161
  prerelease: false
148
162
  version_requirements: !ruby/object:Gem::Requirement
149
163
  requirements:
150
- - - '>='
164
+ - - ">="
151
165
  - !ruby/object:Gem::Version
152
166
  version: '0'
153
167
  - !ruby/object:Gem::Dependency
154
168
  name: mocha
155
169
  requirement: !ruby/object:Gem::Requirement
156
170
  requirements:
157
- - - '>='
171
+ - - ">="
158
172
  - !ruby/object:Gem::Version
159
173
  version: '0'
160
174
  type: :development
161
175
  prerelease: false
162
176
  version_requirements: !ruby/object:Gem::Requirement
163
177
  requirements:
164
- - - '>='
178
+ - - ">="
165
179
  - !ruby/object:Gem::Version
166
180
  version: '0'
167
181
  - !ruby/object:Gem::Dependency
168
182
  name: faker
169
183
  requirement: !ruby/object:Gem::Requirement
170
184
  requirements:
171
- - - '>='
185
+ - - ">="
172
186
  - !ruby/object:Gem::Version
173
187
  version: '0'
174
188
  type: :development
175
189
  prerelease: false
176
190
  version_requirements: !ruby/object:Gem::Requirement
177
191
  requirements:
178
- - - '>='
192
+ - - ">="
179
193
  - !ruby/object:Gem::Version
180
194
  version: '0'
181
195
  - !ruby/object:Gem::Dependency
182
196
  name: test-unit
183
197
  requirement: !ruby/object:Gem::Requirement
184
198
  requirements:
185
- - - ~>
199
+ - - "~>"
186
200
  - !ruby/object:Gem::Version
187
201
  version: 2.5.5
188
202
  type: :development
189
203
  prerelease: false
190
204
  version_requirements: !ruby/object:Gem::Requirement
191
205
  requirements:
192
- - - ~>
206
+ - - "~>"
193
207
  - !ruby/object:Gem::Version
194
208
  version: 2.5.5
195
209
  - !ruby/object:Gem::Dependency
196
210
  name: debugger
197
211
  requirement: !ruby/object:Gem::Requirement
198
212
  requirements:
199
- - - '>='
213
+ - - ">="
200
214
  - !ruby/object:Gem::Version
201
215
  version: '0'
202
216
  type: :development
203
217
  prerelease: false
204
218
  version_requirements: !ruby/object:Gem::Requirement
205
219
  requirements:
206
- - - '>='
220
+ - - ">="
207
221
  - !ruby/object:Gem::Version
208
222
  version: '0'
209
223
  - !ruby/object:Gem::Dependency
210
224
  name: ci_reporter
211
225
  requirement: !ruby/object:Gem::Requirement
212
226
  requirements:
213
- - - '>='
227
+ - - ">="
214
228
  - !ruby/object:Gem::Version
215
229
  version: '0'
216
230
  type: :development
217
231
  prerelease: false
218
232
  version_requirements: !ruby/object:Gem::Requirement
219
233
  requirements:
220
- - - '>='
234
+ - - ">="
221
235
  - !ruby/object:Gem::Version
222
236
  version: '0'
223
237
  - !ruby/object:Gem::Dependency
224
238
  name: simplecov
225
239
  requirement: !ruby/object:Gem::Requirement
226
240
  requirements:
227
- - - '>='
241
+ - - ">="
228
242
  - !ruby/object:Gem::Version
229
243
  version: '0'
230
244
  type: :development
231
245
  prerelease: false
232
246
  version_requirements: !ruby/object:Gem::Requirement
233
247
  requirements:
234
- - - '>='
248
+ - - ">="
235
249
  - !ruby/object:Gem::Version
236
250
  version: '0'
237
251
  - !ruby/object:Gem::Dependency
238
252
  name: codeclimate-test-reporter
239
253
  requirement: !ruby/object:Gem::Requirement
240
254
  requirements:
241
- - - '>='
255
+ - - ">="
242
256
  - !ruby/object:Gem::Version
243
257
  version: '0'
244
258
  type: :development
245
259
  prerelease: false
246
260
  version_requirements: !ruby/object:Gem::Requirement
247
261
  requirements:
248
- - - '>='
262
+ - - ">="
249
263
  - !ruby/object:Gem::Version
250
264
  version: '0'
251
265
  description: Utility that will automate simple daily tasks developers perform like
@@ -258,8 +272,8 @@ executables:
258
272
  extensions: []
259
273
  extra_rdoc_files: []
260
274
  files:
261
- - .gitignore
262
- - .travis.yml
275
+ - ".gitignore"
276
+ - ".travis.yml"
263
277
  - Gemfile
264
278
  - LICENSE.txt
265
279
  - README.md
@@ -279,18 +293,22 @@ files:
279
293
  - lib/toolshed/commands/get_daily_time_update.rb
280
294
  - lib/toolshed/commands/list_branches.rb
281
295
  - lib/toolshed/commands/push_branch.rb
296
+ - lib/toolshed/commands/ssh.rb
282
297
  - lib/toolshed/commands/ticket_information.rb
283
298
  - lib/toolshed/commands/update_pivotal_tracker_story_status.rb
284
299
  - lib/toolshed/commands/update_ticket_status.rb
285
300
  - lib/toolshed/error.rb
286
301
  - lib/toolshed/git/git.rb
287
302
  - lib/toolshed/git/github.rb
303
+ - lib/toolshed/password.rb
304
+ - lib/toolshed/server_administration/ssh.rb
288
305
  - lib/toolshed/ticket_tracking/jira.rb
289
306
  - lib/toolshed/ticket_tracking/pivotal_tracker.rb
290
307
  - lib/toolshed/ticket_tracking/ticket_tracking.rb
291
308
  - lib/toolshed/time_tracking/harvest.rb
292
309
  - lib/toolshed/time_tracking/time_tracking.rb
293
310
  - lib/toolshed/version.rb
311
+ - test/.toolshedrc
294
312
  - test/commands/checkout_branch_test.rb
295
313
  - test/commands/commands_helper.rb
296
314
  - test/commands/create_branch_test.rb
@@ -303,6 +321,8 @@ files:
303
321
  - test/git/git_test.rb
304
322
  - test/git/github_test.rb
305
323
  - test/helper.rb
324
+ - test/password_test.rb
325
+ - test/server_administration/ssh_test.rb
306
326
  - test/ticket_tracking/jira_test.rb
307
327
  - test/time_tracking/harvest_test.rb
308
328
  - toolshed.gemspec
@@ -316,12 +336,12 @@ require_paths:
316
336
  - lib
317
337
  required_ruby_version: !ruby/object:Gem::Requirement
318
338
  requirements:
319
- - - '>='
339
+ - - ">="
320
340
  - !ruby/object:Gem::Version
321
341
  version: '0'
322
342
  required_rubygems_version: !ruby/object:Gem::Requirement
323
343
  requirements:
324
- - - '>='
344
+ - - ">="
325
345
  - !ruby/object:Gem::Version
326
346
  version: '0'
327
347
  requirements: []
@@ -332,6 +352,7 @@ specification_version: 4
332
352
  summary: Create a Github pull request with minimal work. Will automatically read ticket
333
353
  information from pivotal tracker if you use that.
334
354
  test_files:
355
+ - test/.toolshedrc
335
356
  - test/commands/checkout_branch_test.rb
336
357
  - test/commands/commands_helper.rb
337
358
  - test/commands/create_branch_test.rb
@@ -344,5 +365,7 @@ test_files:
344
365
  - test/git/git_test.rb
345
366
  - test/git/github_test.rb
346
367
  - test/helper.rb
368
+ - test/password_test.rb
369
+ - test/server_administration/ssh_test.rb
347
370
  - test/ticket_tracking/jira_test.rb
348
371
  - test/time_tracking/harvest_test.rb