remote-session 0.0.3 → 0.0.4
Sign up to get free protection for your applications and to get access to all the features.
- data/lib/remote/session/send.rb +51 -0
- data/lib/remote/session/send_file.rb +4 -28
- data/lib/remote/session/send_string.rb +27 -0
- data/lib/remote/session/version.rb +4 -1
- data/lib/remote/session.rb +5 -6
- data/spec/unit/send_file_spec.rb +14 -6
- data/spec/unit/send_spec.rb +33 -0
- data/spec/unit/send_string_spec.rb +32 -0
- data/spec/unit/session_spec.rb +2 -2
- metadata +9 -3
@@ -0,0 +1,51 @@
|
|
1
|
+
module Remote
|
2
|
+
|
3
|
+
class Session
|
4
|
+
|
5
|
+
class Send
|
6
|
+
|
7
|
+
attr_accessor :remote_path
|
8
|
+
attr_accessor :chunk_size
|
9
|
+
|
10
|
+
def initialize( remote_path )
|
11
|
+
@remote_path = remote_path
|
12
|
+
@chunk_size = 1024
|
13
|
+
@file = nil
|
14
|
+
end
|
15
|
+
|
16
|
+
def read
|
17
|
+
open if ! open?
|
18
|
+
|
19
|
+
@file.read( @chunk_size )
|
20
|
+
end
|
21
|
+
|
22
|
+
def eof?
|
23
|
+
return true if ! open?
|
24
|
+
@file.eof?
|
25
|
+
end
|
26
|
+
|
27
|
+
def open?
|
28
|
+
! @file.nil?
|
29
|
+
end
|
30
|
+
|
31
|
+
def open
|
32
|
+
if open?
|
33
|
+
@file.rewind
|
34
|
+
return
|
35
|
+
end
|
36
|
+
|
37
|
+
_open
|
38
|
+
end
|
39
|
+
|
40
|
+
def close
|
41
|
+
return if ! open?
|
42
|
+
@file.close
|
43
|
+
@file = nil
|
44
|
+
end
|
45
|
+
|
46
|
+
end
|
47
|
+
|
48
|
+
end
|
49
|
+
|
50
|
+
end
|
51
|
+
|
@@ -2,42 +2,18 @@ module Remote
|
|
2
2
|
|
3
3
|
class Session
|
4
4
|
|
5
|
-
class SendFile
|
5
|
+
class SendFile < Send
|
6
6
|
|
7
7
|
attr_accessor :local_path
|
8
|
-
attr_accessor :remote_path
|
9
|
-
attr_accessor :chunk_size
|
10
8
|
|
11
9
|
def initialize( local_path, remote_path )
|
12
10
|
@local_path = local_path
|
13
|
-
|
14
|
-
@chunk_size = 1024
|
15
|
-
@file = nil
|
11
|
+
super( remote_path )
|
16
12
|
end
|
17
13
|
|
18
|
-
|
19
|
-
! @file.nil?
|
20
|
-
end
|
21
|
-
|
22
|
-
def eof?
|
23
|
-
return true if ! open?
|
24
|
-
@file.eof?
|
25
|
-
end
|
26
|
-
|
27
|
-
def read
|
28
|
-
open if ! open?
|
29
|
-
|
30
|
-
@file.read( @chunk_size )
|
31
|
-
end
|
32
|
-
|
33
|
-
def close
|
34
|
-
return if ! open?
|
35
|
-
@file.close
|
36
|
-
@file = nil
|
37
|
-
end
|
14
|
+
private
|
38
15
|
|
39
|
-
def
|
40
|
-
close if open?
|
16
|
+
def _open
|
41
17
|
@file = File.open( @local_path, 'r' )
|
42
18
|
end
|
43
19
|
|
@@ -0,0 +1,27 @@
|
|
1
|
+
require 'stringio'
|
2
|
+
|
3
|
+
module Remote
|
4
|
+
|
5
|
+
class Session
|
6
|
+
|
7
|
+
class SendString < Send
|
8
|
+
|
9
|
+
attr_accessor :string
|
10
|
+
|
11
|
+
def initialize( string, remote_path )
|
12
|
+
@string = string
|
13
|
+
super( remote_path )
|
14
|
+
end
|
15
|
+
|
16
|
+
private
|
17
|
+
|
18
|
+
def _open
|
19
|
+
@file = StringIO.new( @string )
|
20
|
+
end
|
21
|
+
|
22
|
+
end
|
23
|
+
|
24
|
+
end
|
25
|
+
|
26
|
+
end
|
27
|
+
|
data/lib/remote/session.rb
CHANGED
@@ -1,4 +1,6 @@
|
|
1
|
+
require 'remote/session/send'
|
1
2
|
require 'remote/session/send_file'
|
3
|
+
require 'remote/session/send_string'
|
2
4
|
require 'remote/session/version'
|
3
5
|
require 'net/sftp'
|
4
6
|
require 'net/ssh'
|
@@ -45,7 +47,7 @@ module Remote
|
|
45
47
|
|
46
48
|
def sudo( commands )
|
47
49
|
raise "Session is closed" if @session.nil?
|
48
|
-
commands = [ *commands ]
|
50
|
+
commands = [ *commands ] + [ 'exit' ]
|
49
51
|
|
50
52
|
@session.open_channel do |ch|
|
51
53
|
ch.request_pty do |ch, success|
|
@@ -113,13 +115,10 @@ module Remote
|
|
113
115
|
|
114
116
|
$stdout.write( data )
|
115
117
|
|
116
|
-
if ch[ :commands ].size == 0
|
117
|
-
ch.send_data "exit\n"
|
118
|
-
return
|
119
|
-
end
|
118
|
+
return if ch[ :commands ].size == 0
|
120
119
|
|
121
120
|
command = ch[ :commands ].shift
|
122
|
-
if command.is_a?( Remote::Session::
|
121
|
+
if command.is_a?( Remote::Session::Send )
|
123
122
|
send_file_chunk( ch, command )
|
124
123
|
else
|
125
124
|
ch.send_data "#{command}\n"
|
data/spec/unit/send_file_spec.rb
CHANGED
@@ -5,7 +5,7 @@ describe Remote::Session::SendFile do
|
|
5
5
|
|
6
6
|
context '#initialize' do
|
7
7
|
|
8
|
-
it 'should require two parameters'do
|
8
|
+
it 'should require two parameters' do
|
9
9
|
expect do
|
10
10
|
Remote::Session::SendFile.new( 'foo' )
|
11
11
|
end.to raise_error( ArgumentError, 'wrong number of arguments (1 for 2)' )
|
@@ -18,16 +18,12 @@ describe Remote::Session::SendFile do
|
|
18
18
|
|
19
19
|
specify( 'local_path' ) { subject.local_path.should == 'foo' }
|
20
20
|
specify( 'remote_path' ) { subject.remote_path.should == 'bar' }
|
21
|
-
specify( 'chunk_size' ) { subject.chunk_size.should == 1024
|
21
|
+
specify( 'chunk_size' ) { subject.chunk_size.should == 1024 }
|
22
22
|
end
|
23
23
|
|
24
24
|
context 'instance_methods' do
|
25
25
|
subject { Remote::Session::SendFile.new( '/local/path', '/remote/path' ) }
|
26
26
|
|
27
|
-
context '#open?' do
|
28
|
-
specify { subject.open?.should be_false }
|
29
|
-
end
|
30
|
-
|
31
27
|
context '#eof?' do
|
32
28
|
specify { subject.eof?.should be_true }
|
33
29
|
|
@@ -42,6 +38,18 @@ describe Remote::Session::SendFile do
|
|
42
38
|
end
|
43
39
|
end
|
44
40
|
|
41
|
+
context '#open' do
|
42
|
+
it 'should rewind the file, if already open' do
|
43
|
+
@file = stub( 'file', :eof? => false )
|
44
|
+
File.should_receive( :open ).with( '/local/path', 'r' ).and_return( @file )
|
45
|
+
@file.should_receive( :rewind )
|
46
|
+
|
47
|
+
subject.open
|
48
|
+
|
49
|
+
subject.open
|
50
|
+
end
|
51
|
+
end
|
52
|
+
|
45
53
|
context '#close' do
|
46
54
|
|
47
55
|
before :each do
|
@@ -0,0 +1,33 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
load File.expand_path( '../spec_helper.rb', File.dirname(__FILE__) )
|
3
|
+
|
4
|
+
describe Remote::Session::Send do
|
5
|
+
|
6
|
+
context '#initialize' do
|
7
|
+
|
8
|
+
it 'should require one parameter'do
|
9
|
+
expect do
|
10
|
+
Remote::Session::Send.new( 'foo', 'bar' )
|
11
|
+
end.to raise_error( ArgumentError, 'wrong number of arguments (2 for 1)' )
|
12
|
+
end
|
13
|
+
|
14
|
+
end
|
15
|
+
|
16
|
+
context 'attributes' do
|
17
|
+
subject { Remote::Session::Send.new( 'foo' ) }
|
18
|
+
|
19
|
+
specify( 'remote_path' ) { subject.remote_path.should == 'foo' }
|
20
|
+
specify( 'chunk_size' ) { subject.chunk_size.should == 1024 }
|
21
|
+
end
|
22
|
+
|
23
|
+
context 'instance_methods' do
|
24
|
+
subject { Remote::Session::Send.new( '/remote/path' ) }
|
25
|
+
|
26
|
+
context '#open?' do
|
27
|
+
specify { subject.open?.should be_false }
|
28
|
+
end
|
29
|
+
|
30
|
+
end
|
31
|
+
|
32
|
+
end
|
33
|
+
|
@@ -0,0 +1,32 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
load File.expand_path( '../spec_helper.rb', File.dirname(__FILE__) )
|
3
|
+
|
4
|
+
describe Remote::Session::SendString do
|
5
|
+
|
6
|
+
context 'attributes' do
|
7
|
+
subject { Remote::Session::SendString.new( 'foo', 'bar' ) }
|
8
|
+
|
9
|
+
specify( 'string' ) { subject.string.should == 'foo' }
|
10
|
+
specify( 'remote_path' ) { subject.remote_path.should == 'bar' }
|
11
|
+
specify( 'chunk_size' ) { subject.chunk_size.should == 1024 }
|
12
|
+
end
|
13
|
+
|
14
|
+
context 'instance_methods' do
|
15
|
+
|
16
|
+
subject { Remote::Session::SendString.new( 'foo', 'remote/path' ) }
|
17
|
+
|
18
|
+
context '#open' do
|
19
|
+
|
20
|
+
it 'should instantiate a StringIO' do
|
21
|
+
@stringio = stub( 'stringio' )
|
22
|
+
StringIO.should_receive( :new ).with( 'foo' ).and_return( @stringio )
|
23
|
+
|
24
|
+
subject.open
|
25
|
+
end
|
26
|
+
|
27
|
+
end
|
28
|
+
|
29
|
+
end
|
30
|
+
|
31
|
+
end
|
32
|
+
|
data/spec/unit/session_spec.rb
CHANGED
@@ -288,7 +288,7 @@ describe Remote::Session do
|
|
288
288
|
block.call( @ch, 'root_prompt#' )
|
289
289
|
end
|
290
290
|
|
291
|
-
@sf.should_receive( :is_a? ).with( Remote::Session::
|
291
|
+
@sf.should_receive( :is_a? ).with( Remote::Session::Send ).twice.and_return( true )
|
292
292
|
@sf.should_receive( :remote_path ).twice.and_return( '/remote/path' )
|
293
293
|
|
294
294
|
chunk = 0
|
@@ -338,7 +338,7 @@ describe Remote::Session do
|
|
338
338
|
block.call( @ch, 'root_prompt#' )
|
339
339
|
end
|
340
340
|
|
341
|
-
@sf.stub!( :is_a? ).with( Remote::Session::
|
341
|
+
@sf.stub!( :is_a? ).with( Remote::Session::Send ).and_return( true )
|
342
342
|
@sf.stub!( :open? => false )
|
343
343
|
@sf.stub!( :remote_path ).and_return( '/remote/path' )
|
344
344
|
@sf.stub!( :eof? => true )
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: remote-session
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 23
|
5
5
|
prerelease:
|
6
6
|
segments:
|
7
7
|
- 0
|
8
8
|
- 0
|
9
|
-
-
|
10
|
-
version: 0.0.
|
9
|
+
- 4
|
10
|
+
version: 0.0.4
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Joe Yates
|
@@ -110,12 +110,16 @@ files:
|
|
110
110
|
- README.md
|
111
111
|
- Rakefile
|
112
112
|
- lib/remote/session.rb
|
113
|
+
- lib/remote/session/send.rb
|
113
114
|
- lib/remote/session/send_file.rb
|
115
|
+
- lib/remote/session/send_string.rb
|
114
116
|
- lib/remote/session/version.rb
|
115
117
|
- remote-session.gemspec
|
116
118
|
- spec/gather_rspec_coverage.rb
|
117
119
|
- spec/spec_helper.rb
|
118
120
|
- spec/unit/send_file_spec.rb
|
121
|
+
- spec/unit/send_spec.rb
|
122
|
+
- spec/unit/send_string_spec.rb
|
119
123
|
- spec/unit/session_spec.rb
|
120
124
|
homepage: ""
|
121
125
|
licenses: []
|
@@ -154,4 +158,6 @@ test_files:
|
|
154
158
|
- spec/gather_rspec_coverage.rb
|
155
159
|
- spec/spec_helper.rb
|
156
160
|
- spec/unit/send_file_spec.rb
|
161
|
+
- spec/unit/send_spec.rb
|
162
|
+
- spec/unit/send_string_spec.rb
|
157
163
|
- spec/unit/session_spec.rb
|