rye 0.6.4 → 0.6.5

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 (50) hide show
  1. data/CHANGES.txt +7 -0
  2. data/README.rdoc +2 -0
  3. data/bin/rye +1 -0
  4. data/lib/rye.rb +8 -6
  5. data/lib/rye/box.rb +1 -1
  6. data/rye.gemspec +8 -47
  7. metadata +29 -52
  8. data/bin/try +0 -201
  9. data/lib/sys.rb +0 -302
  10. data/try/copying.rb +0 -18
  11. data/try/keys.rb +0 -141
  12. data/tst/10-key1 +0 -27
  13. data/tst/10-key1.pub +0 -1
  14. data/tst/10-key2 +0 -30
  15. data/tst/10-key2.pub +0 -1
  16. data/tst/10_keys_test.rb +0 -88
  17. data/tst/50_rset_test.rb +0 -54
  18. data/tst/60-file.mp3 +0 -0
  19. data/tst/60_rbox_transfer_test.rb +0 -53
  20. data/tst/70_rbox_env_test.rb +0 -19
  21. data/vendor/highline-1.5.1/CHANGELOG +0 -222
  22. data/vendor/highline-1.5.1/INSTALL +0 -35
  23. data/vendor/highline-1.5.1/LICENSE +0 -7
  24. data/vendor/highline-1.5.1/README +0 -63
  25. data/vendor/highline-1.5.1/Rakefile +0 -82
  26. data/vendor/highline-1.5.1/TODO +0 -6
  27. data/vendor/highline-1.5.1/examples/ansi_colors.rb +0 -38
  28. data/vendor/highline-1.5.1/examples/asking_for_arrays.rb +0 -18
  29. data/vendor/highline-1.5.1/examples/basic_usage.rb +0 -75
  30. data/vendor/highline-1.5.1/examples/color_scheme.rb +0 -32
  31. data/vendor/highline-1.5.1/examples/limit.rb +0 -12
  32. data/vendor/highline-1.5.1/examples/menus.rb +0 -65
  33. data/vendor/highline-1.5.1/examples/overwrite.rb +0 -19
  34. data/vendor/highline-1.5.1/examples/page_and_wrap.rb +0 -322
  35. data/vendor/highline-1.5.1/examples/password.rb +0 -7
  36. data/vendor/highline-1.5.1/examples/trapping_eof.rb +0 -22
  37. data/vendor/highline-1.5.1/examples/using_readline.rb +0 -17
  38. data/vendor/highline-1.5.1/lib/highline.rb +0 -758
  39. data/vendor/highline-1.5.1/lib/highline/color_scheme.rb +0 -120
  40. data/vendor/highline-1.5.1/lib/highline/compatibility.rb +0 -17
  41. data/vendor/highline-1.5.1/lib/highline/import.rb +0 -43
  42. data/vendor/highline-1.5.1/lib/highline/menu.rb +0 -395
  43. data/vendor/highline-1.5.1/lib/highline/question.rb +0 -463
  44. data/vendor/highline-1.5.1/lib/highline/system_extensions.rb +0 -193
  45. data/vendor/highline-1.5.1/setup.rb +0 -1360
  46. data/vendor/highline-1.5.1/test/tc_color_scheme.rb +0 -56
  47. data/vendor/highline-1.5.1/test/tc_highline.rb +0 -823
  48. data/vendor/highline-1.5.1/test/tc_import.rb +0 -54
  49. data/vendor/highline-1.5.1/test/tc_menu.rb +0 -429
  50. data/vendor/highline-1.5.1/test/ts_all.rb +0 -15
@@ -6,6 +6,13 @@ TODO
6
6
  * Fingerprints: ssh-keygen -l -f id_rsa_repos.pub
7
7
 
8
8
 
9
+ #### 0.6.5 (2009-05-10) #############################
10
+
11
+ * CHANGE: Default exit code is now 0 instead of -1
12
+ * CHANGE: Removed Sys (using sysinfo gem)
13
+ * CHANGE: Removed vendor/highline-1.5.1 (it's now available via gem)
14
+
15
+
9
16
  #### 0.6.4 (2009-05-04) #############################
10
17
 
11
18
  * FIXED: authorize_remote was not returning to the directory it started with.
@@ -103,6 +103,8 @@ Rye permits only a limited number of system commands to be run. This default whi
103
103
  * net-scp
104
104
  * highline
105
105
  * drydock
106
+ * sysinfo
107
+ * storable
106
108
 
107
109
 
108
110
  == Known Issues
data/bin/rye CHANGED
@@ -9,6 +9,7 @@
9
9
  #
10
10
 
11
11
  $:.unshift File.join(File.dirname(__FILE__), '..', 'lib')
12
+ #%w{net-ssh sysinfo drydock}.each { |dir| $:.unshift File.join(File.dirname(__FILE__), '..', '..', dir, 'lib') }
12
13
 
13
14
  require 'stringio'
14
15
  require 'yaml'
data/lib/rye.rb CHANGED
@@ -3,17 +3,19 @@
3
3
  # a the issue with Ruby 1.9 that causes the prompts to hang.
4
4
  $:.unshift File.join(File.dirname(__FILE__), '..', 'vendor', 'highline-1.5.1', 'lib')
5
5
 
6
- require 'tempfile'
7
6
  require 'logger'
7
+ require 'thread'
8
+ require 'base64'
8
9
  require 'net/ssh'
9
10
  require 'net/scp'
10
- require 'thread'
11
- require 'highline'
12
11
  require 'openssl'
13
- require 'base64'
12
+ require 'tempfile'
13
+ require 'highline'
14
+
15
+ require 'storable'
16
+ require 'sysinfo'
14
17
 
15
18
  require 'esc'
16
- require 'sys'
17
19
 
18
20
  # = Rye
19
21
  #
@@ -45,7 +47,7 @@ module Rye
45
47
 
46
48
  unless defined?(SYSINFO)
47
49
  VERSION = 0.6.freeze
48
- SYSINFO = SystemInfo.new.freeze
50
+ SYSINFO = SysInfo.new.freeze
49
51
  end
50
52
 
51
53
  @@agent_env = Hash.new # holds ssh-agent env vars
@@ -597,7 +597,7 @@ module Rye
597
597
  block ||= Proc.new do |channel, type, data|
598
598
  channel[:stdout] ||= ""
599
599
  channel[:stderr] ||= ""
600
- channel[:exit_code] ||= -1
600
+ channel[:exit_code] ||= 0
601
601
  channel[:stdout] << data if type == :stdout
602
602
  channel[:stderr] << data if type == :stderr
603
603
  channel.on_request("exit-status") do |ch, data|
@@ -1,7 +1,7 @@
1
1
  @spec = Gem::Specification.new do |s|
2
2
  s.name = "rye"
3
3
  s.rubyforge_project = "rye"
4
- s.version = "0.6.4"
4
+ s.version = "0.6.5"
5
5
  s.summary = "Rye: Safely run SSH commands on a bunch of machines at the same time (from Ruby)."
6
6
  s.description = s.summary
7
7
  s.author = "Delano Mandelbaum"
@@ -10,10 +10,14 @@
10
10
 
11
11
  # = DEPENDENCIES =
12
12
  # Add all gem dependencies
13
- s.add_dependency 'net-ssh'
14
- s.add_dependency 'net-scp'
15
- s.add_dependency 'highline'
16
13
  s.add_dependency 'drydock'
14
+ s.add_dependency 'highline', '>= 1.5.1'
15
+ s.add_dependency 'sysinfo', '>= 0.5.1'
16
+ s.add_dependency 'storable', '>= 0.5.1'
17
+ s.add_dependency 'net-ssh', '>= 2.0.9'
18
+ s.add_dependency 'net-scp', '>= 1.0.2'
19
+ #s.add_dependency 'net-ssh-gateway'
20
+ #s.add_dependency 'net-ssh-multi'
17
21
 
18
22
  # = EXECUTABLES =
19
23
  # The list of executables in your project (if any). Don't include the path,
@@ -32,7 +36,6 @@
32
36
  README.rdoc
33
37
  Rakefile
34
38
  bin/rye
35
- bin/try
36
39
  lib/esc.rb
37
40
  lib/rye.rb
38
41
  lib/rye/box.rb
@@ -40,49 +43,7 @@
40
43
  lib/rye/key.rb
41
44
  lib/rye/rap.rb
42
45
  lib/rye/set.rb
43
- lib/sys.rb
44
46
  rye.gemspec
45
- try/copying.rb
46
- try/keys.rb
47
- tst/10-key1
48
- tst/10-key1.pub
49
- tst/10-key2
50
- tst/10-key2.pub
51
- tst/10_keys_test.rb
52
- tst/50_rset_test.rb
53
- tst/60-file.mp3
54
- tst/60_rbox_transfer_test.rb
55
- tst/70_rbox_env_test.rb
56
- vendor/highline-1.5.1/CHANGELOG
57
- vendor/highline-1.5.1/INSTALL
58
- vendor/highline-1.5.1/LICENSE
59
- vendor/highline-1.5.1/README
60
- vendor/highline-1.5.1/Rakefile
61
- vendor/highline-1.5.1/TODO
62
- vendor/highline-1.5.1/examples/ansi_colors.rb
63
- vendor/highline-1.5.1/examples/asking_for_arrays.rb
64
- vendor/highline-1.5.1/examples/basic_usage.rb
65
- vendor/highline-1.5.1/examples/color_scheme.rb
66
- vendor/highline-1.5.1/examples/limit.rb
67
- vendor/highline-1.5.1/examples/menus.rb
68
- vendor/highline-1.5.1/examples/overwrite.rb
69
- vendor/highline-1.5.1/examples/page_and_wrap.rb
70
- vendor/highline-1.5.1/examples/password.rb
71
- vendor/highline-1.5.1/examples/trapping_eof.rb
72
- vendor/highline-1.5.1/examples/using_readline.rb
73
- vendor/highline-1.5.1/lib/highline.rb
74
- vendor/highline-1.5.1/lib/highline/color_scheme.rb
75
- vendor/highline-1.5.1/lib/highline/compatibility.rb
76
- vendor/highline-1.5.1/lib/highline/import.rb
77
- vendor/highline-1.5.1/lib/highline/menu.rb
78
- vendor/highline-1.5.1/lib/highline/question.rb
79
- vendor/highline-1.5.1/lib/highline/system_extensions.rb
80
- vendor/highline-1.5.1/setup.rb
81
- vendor/highline-1.5.1/test/tc_color_scheme.rb
82
- vendor/highline-1.5.1/test/tc_highline.rb
83
- vendor/highline-1.5.1/test/tc_import.rb
84
- vendor/highline-1.5.1/test/tc_menu.rb
85
- vendor/highline-1.5.1/test/ts_all.rb
86
47
  )
87
48
 
88
49
  s.extra_rdoc_files = %w[README.rdoc LICENSE.txt]
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rye
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.6.4
4
+ version: 0.6.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - Delano Mandelbaum
@@ -9,11 +9,11 @@ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
11
 
12
- date: 2009-05-03 00:00:00 -04:00
12
+ date: 2009-05-20 00:00:00 -04:00
13
13
  default_executable:
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
- name: net-ssh
16
+ name: drydock
17
17
  type: :runtime
18
18
  version_requirement:
19
19
  version_requirements: !ruby/object:Gem::Requirement
@@ -23,34 +23,54 @@ dependencies:
23
23
  version: "0"
24
24
  version:
25
25
  - !ruby/object:Gem::Dependency
26
- name: net-scp
26
+ name: highline
27
27
  type: :runtime
28
28
  version_requirement:
29
29
  version_requirements: !ruby/object:Gem::Requirement
30
30
  requirements:
31
31
  - - ">="
32
32
  - !ruby/object:Gem::Version
33
- version: "0"
33
+ version: 1.5.1
34
34
  version:
35
35
  - !ruby/object:Gem::Dependency
36
- name: highline
36
+ name: sysinfo
37
37
  type: :runtime
38
38
  version_requirement:
39
39
  version_requirements: !ruby/object:Gem::Requirement
40
40
  requirements:
41
41
  - - ">="
42
42
  - !ruby/object:Gem::Version
43
- version: "0"
43
+ version: 0.5.1
44
44
  version:
45
45
  - !ruby/object:Gem::Dependency
46
- name: drydock
46
+ name: storable
47
47
  type: :runtime
48
48
  version_requirement:
49
49
  version_requirements: !ruby/object:Gem::Requirement
50
50
  requirements:
51
51
  - - ">="
52
52
  - !ruby/object:Gem::Version
53
- version: "0"
53
+ version: 0.5.1
54
+ version:
55
+ - !ruby/object:Gem::Dependency
56
+ name: net-ssh
57
+ type: :runtime
58
+ version_requirement:
59
+ version_requirements: !ruby/object:Gem::Requirement
60
+ requirements:
61
+ - - ">="
62
+ - !ruby/object:Gem::Version
63
+ version: 2.0.9
64
+ version:
65
+ - !ruby/object:Gem::Dependency
66
+ name: net-scp
67
+ type: :runtime
68
+ version_requirement:
69
+ version_requirements: !ruby/object:Gem::Requirement
70
+ requirements:
71
+ - - ">="
72
+ - !ruby/object:Gem::Version
73
+ version: 1.0.2
54
74
  version:
55
75
  description: "Rye: Safely run SSH commands on a bunch of machines at the same time (from Ruby)."
56
76
  email: delano@solutious.com
@@ -67,7 +87,6 @@ files:
67
87
  - README.rdoc
68
88
  - Rakefile
69
89
  - bin/rye
70
- - bin/try
71
90
  - lib/esc.rb
72
91
  - lib/rye.rb
73
92
  - lib/rye/box.rb
@@ -75,49 +94,7 @@ files:
75
94
  - lib/rye/key.rb
76
95
  - lib/rye/rap.rb
77
96
  - lib/rye/set.rb
78
- - lib/sys.rb
79
97
  - rye.gemspec
80
- - try/copying.rb
81
- - try/keys.rb
82
- - tst/10-key1
83
- - tst/10-key1.pub
84
- - tst/10-key2
85
- - tst/10-key2.pub
86
- - tst/10_keys_test.rb
87
- - tst/50_rset_test.rb
88
- - tst/60-file.mp3
89
- - tst/60_rbox_transfer_test.rb
90
- - tst/70_rbox_env_test.rb
91
- - vendor/highline-1.5.1/CHANGELOG
92
- - vendor/highline-1.5.1/INSTALL
93
- - vendor/highline-1.5.1/LICENSE
94
- - vendor/highline-1.5.1/README
95
- - vendor/highline-1.5.1/Rakefile
96
- - vendor/highline-1.5.1/TODO
97
- - vendor/highline-1.5.1/examples/ansi_colors.rb
98
- - vendor/highline-1.5.1/examples/asking_for_arrays.rb
99
- - vendor/highline-1.5.1/examples/basic_usage.rb
100
- - vendor/highline-1.5.1/examples/color_scheme.rb
101
- - vendor/highline-1.5.1/examples/limit.rb
102
- - vendor/highline-1.5.1/examples/menus.rb
103
- - vendor/highline-1.5.1/examples/overwrite.rb
104
- - vendor/highline-1.5.1/examples/page_and_wrap.rb
105
- - vendor/highline-1.5.1/examples/password.rb
106
- - vendor/highline-1.5.1/examples/trapping_eof.rb
107
- - vendor/highline-1.5.1/examples/using_readline.rb
108
- - vendor/highline-1.5.1/lib/highline.rb
109
- - vendor/highline-1.5.1/lib/highline/color_scheme.rb
110
- - vendor/highline-1.5.1/lib/highline/compatibility.rb
111
- - vendor/highline-1.5.1/lib/highline/import.rb
112
- - vendor/highline-1.5.1/lib/highline/menu.rb
113
- - vendor/highline-1.5.1/lib/highline/question.rb
114
- - vendor/highline-1.5.1/lib/highline/system_extensions.rb
115
- - vendor/highline-1.5.1/setup.rb
116
- - vendor/highline-1.5.1/test/tc_color_scheme.rb
117
- - vendor/highline-1.5.1/test/tc_highline.rb
118
- - vendor/highline-1.5.1/test/tc_import.rb
119
- - vendor/highline-1.5.1/test/tc_menu.rb
120
- - vendor/highline-1.5.1/test/ts_all.rb
121
98
  has_rdoc: true
122
99
  homepage: http://solutious.com/
123
100
  licenses: []
data/bin/try DELETED
@@ -1,201 +0,0 @@
1
- #!/usr/bin/ruby
2
-
3
- # Rye -- A working example
4
- #
5
- # If your reading this via the rdocs you won't be able to see the code
6
- # See: http://github.com/delano/rye/blob/master/bin/try
7
- #
8
- # Usage: bin/try
9
- #
10
-
11
- RYE_HOME = File.join(File.dirname(__FILE__), '..')
12
- $:.unshift File.join(RYE_HOME, 'lib')
13
-
14
- require 'stringio'
15
- require 'yaml'
16
- require 'rye'
17
-
18
-
19
- puts %Q(
20
- # ------------------------------------------------------------------
21
- # EXAMPLE 1 -- Basic Usage
22
- #)
23
-
24
- rbox = Rye::Box.new('localhost')
25
-
26
- # Commands are run as methods on the Rye::Box object
27
- puts rbox.uptime # => 11:02 up 16:01, 3 users
28
-
29
- # The response value for all commands is a Rye::Rap object. The rap is a
30
- # subclass of Array so you can treat it as an Array, but it can also act
31
- # like a String if there's only one element.
32
- p rbox.ls(:a, '/') # => ['.', '..', 'bin', 'etc', ...]
33
-
34
- # You can change directories
35
- puts rbox.pwd # => /home/rye
36
- puts rbox['/usr/bin'].pwd # => /usr/bin
37
- puts rbox.pwd # => /usr/bin
38
-
39
- # You can specify environment variables
40
- rbox.setenv(:RYE, "Forty Creek")
41
- rbox.env # => ['HOME=/home/rye', 'RYE=Forty Creek', ...]
42
-
43
- # The commands method returns an Array of available commands:
44
- puts rbox.commands.join(', ') # => pwd, touch, echo, wc, ...
45
-
46
- # When you're done you can disconnect explicitly.
47
- # (Although Rye does this automatically at exit.)
48
- rbox.disconnect
49
-
50
-
51
- puts %Q(
52
- # ------------------------------------------------------------------
53
- # EXAMPLE 2 -- Disabling Safe-Mode
54
- #)
55
-
56
- rbox_safe = Rye::Box.new('localhost')
57
- rbox_wild = Rye::Box.new('localhost', :safe => false)
58
-
59
- # Safe-mode is enabled by default. In safe-mode, all command
60
- # arguments are thoroughly escaped. This prevents access to
61
- # environment variables and file globs (among other things).
62
- p rbox_safe.echo('$HOME') # => "$HOME"
63
- p rbox_safe['/etc'].ls('host*') rescue Rye::CommandError # Doesn't exist
64
- p rbox_safe.ls('-l | wc -l') rescue Rye::CommandError # => '|' is not a valid ls arg
65
-
66
- # Here's the same commands with safe-mode disabled:
67
- p rbox_wild.echo('$HOME') # => "/home/rye"
68
- p rbox_wild['/etc'].ls('host*') # => ["hostconfig", "hosts"]
69
- p rbox_wild.ls('-l | wc -l') # => 110
70
- p rbox_wild.echo('$HOME > /tmp/rye-home') # =>
71
- p rbox_wild.cat('/tmp/rye-home') # => "/home/rye"
72
-
73
-
74
-
75
- puts %Q(
76
- # ------------------------------------------------------------------
77
- # EXAMPLE 3 -- Custom Commands
78
- #)
79
-
80
- rbox = Rye::Box.new('localhost')
81
- rbox.add_keys('/private/key/path') # Specify additional private keys
82
-
83
- # There's currently no rye900 command
84
- p rbox.commands.member?('rye9000') # => false
85
-
86
- # But we can add our own commands to the Rye::Cmd class. They
87
- # automatically become available to all Rye::Box objects.
88
- module Rye::Cmd
89
- def rye9000(*args)
90
- run_command("ls", args)
91
- end
92
- def somescript(*args)
93
- run_command("/path/to/my/script", args)
94
- end
95
- end
96
-
97
- # We can now run rye9000 (with arguments)
98
- p rbox.rye9000('-a') # => [".", "..", ".bashrc", ...]
99
- p rbox.commands.member?('rye9000') # => true
100
-
101
-
102
- puts %Q(
103
- # ------------------------------------------------------------------
104
- # EXAMPLE 4 -- Accessing Multiple Machines
105
- #)
106
-
107
- rset = Rye::Set.new('default', :parallel => true)
108
- rbox = Rye::Box.new
109
- p rbox
110
-
111
- rset.add_keys('/private/key/path') # For passwordless logins
112
- rset.add_boxes(rbox, '127.0.0.1') # Add boxes as hostnames or objects
113
-
114
- # Calling methods on Rye::Set objects is very similar to calling them on
115
- # Rye::Box objects. In fact, it's identical:
116
- p rset.uptime # => [[14:19:02 up 32 days, 19:35 ...], [14:19:02 up 30 days, 01:35]]
117
- p rset['/usr'].ls # => [['bin', 'etc', ...], ['bin', 'etc', ...]]
118
-
119
- # Like Rye::Box, the response value is a Rye::Rap object containing the
120
- # responses from each box. Each response is itself a Rye::Rap object.
121
- unames = rset.uname
122
- p unames # => [["Darwin"], ["Darwin"]]
123
- puts unames.class # => Rye::Rap
124
-
125
- # The Rye::Rap object also keeps a reference to the object that called the
126
- # command. In this case, it will keep a reference to Rye::Set:
127
- puts unames.set.class # => Rye::Set
128
- puts unames.set == rset # => true
129
- puts unames.size # => 2
130
- puts unames.first # => Darwin
131
- puts unames.first.class # => Rye::Rap
132
- puts unames.first.box.class # => Rye::Box
133
- puts unames.first.box == rbox # => true
134
-
135
- # Envrionment variables can be set the same way as with Rye::Box
136
- rset.setenv(:RYE, "Forty Creek")
137
- p rset.env.first.select { |env| env =~ /RYE/ } # => ["RYE=Forty Creek"]
138
-
139
-
140
- puts %Q(
141
- # ------------------------------------------------------------------
142
- # EXAMPLE 5 -- ERROR HANDLING
143
- #)
144
-
145
- rbox = Rye::Box.new('localhost', :safe => false) # Note: safe mode is off
146
-
147
- # Rye follows the standard convention of taking exception to a non-zero
148
- # exit code by raising a Rye::CommandError. In this case, rye9000.test
149
- # is not found by the ls command.
150
- begin
151
- rbox.ls('rye.test')
152
- rescue Rye::CommandError => ex
153
- puts ex.exit_code # => 1
154
- puts ex.stderr # => ls: rye.test: No such file or directory
155
- end
156
-
157
- # The Rye:Rap response objects also give you the STDOUT and STDERR
158
- # content separately. Here we redirect STDOUT to STDERR, so this
159
- # will return nothing:
160
- puts rbox.uname('-a 1>&2').stdout # =>
161
-
162
- # It all went to STDERR:
163
- puts rbox.uname('-a 1>&2').stderr # => Darwin ryehost 9.6.0 ...
164
-
165
- # There were no actual errors so the exit code should be 0.
166
- puts rbox.uname('-a 1>&2').exit_code # => 0
167
-
168
-
169
- puts %Q(
170
- # ------------------------------------------------------------------
171
- # EXAMPLE 6 -- FILE TRANSFERS
172
- #)
173
-
174
- dir_upload = "#{Rye.sysinfo.tmpdir}/rye-upload/"
175
- dir_download = "#{Rye.sysinfo.tmpdir}/rye-download/"
176
-
177
- rbox = Rye::Box.new("localhost", :info => false)
178
-
179
- # Rye ships without an rm method (for safety!). Here
180
- # we add the rm method only to this instance of rbox.
181
- def rbox.rm(*args); cmd('rm', args); end
182
-
183
- rbox.rm(:r, :f, dir_upload) # Silently delete test dirs
184
- rbox.rm(:r, :f, dir_download)
185
-
186
- rbox.upload("#{RYE_HOME}/README.rdoc",
187
- "#{RYE_HOME}/LICENSE.txt", dir_upload)
188
-
189
- applejack = StringIO.new("Some in-memory content")
190
- rbox.upload(applejack, "#{dir_upload}/applejack.txt")
191
-
192
- p rbox.ls(dir_upload) # => [README.rdoc, LICENSE.txt, applejack.txt]
193
- p rbox.cat("#{dir_upload}/applejack.txt") # => "Some in-memory content"
194
-
195
- filecontent = StringIO.new
196
- rbox.download("#{dir_upload}/applejack.txt", filecontent)
197
- filecontent.rewind
198
- p filecontent.read
199
-
200
-
201
-