rush 0.4.1 → 0.4.2

Sign up to get free protection for your applications and to get access to all the features.
data/Rakefile CHANGED
@@ -31,7 +31,7 @@ require 'rake/rdoctask'
31
31
  require 'fileutils'
32
32
  include FileUtils
33
33
 
34
- version = "0.4.1"
34
+ version = "0.4.2"
35
35
  name = "rush"
36
36
 
37
37
  spec = Gem::Specification.new do |s|
@@ -46,7 +46,6 @@ spec = Gem::Specification.new do |s|
46
46
  s.rubyforge_project = "ruby-shell"
47
47
 
48
48
  s.add_dependency 'mongrel'
49
- s.add_dependency 'rspec'
50
49
  s.add_dependency 'session'
51
50
 
52
51
  s.platform = Gem::Platform::RUBY
@@ -22,6 +22,8 @@ class Rush::File < Rush::Entry
22
22
  connection.file_contents(full_path)
23
23
  end
24
24
 
25
+ alias :read :contents
26
+
25
27
  # Write to the file, overwriting whatever was already in it.
26
28
  #
27
29
  # Example: file.write "hello, world\n"
@@ -29,6 +31,12 @@ class Rush::File < Rush::Entry
29
31
  connection.write_file(full_path, new_contents)
30
32
  end
31
33
 
34
+ # Append new contents to the end of the file, keeping what was in it.
35
+ def append(contents)
36
+ connection.append_to_file(full_path, contents)
37
+ end
38
+ alias_method :<<, :append
39
+
32
40
  # Return an array of lines from the file, similar to stdlib's File#readlines.
33
41
  def lines
34
42
  contents.split("\n")
@@ -21,6 +21,14 @@ class Rush::Connection::Local
21
21
  true
22
22
  end
23
23
 
24
+ # Append contents to a file
25
+ def append_to_file(full_path, contents)
26
+ ::File.open(full_path, 'a') do |f|
27
+ f.write contents
28
+ end
29
+ true
30
+ end
31
+
24
32
  # Read raw bytes from a file.
25
33
  def file_contents(full_path)
26
34
  ::File.read(full_path)
@@ -310,26 +318,34 @@ class Rush::Connection::Local
310
318
  end
311
319
 
312
320
  def bash_background(command, user)
313
- inpipe, outpipe = IO.pipe
314
-
315
321
  pid = fork do
322
+ inpipe, outpipe = IO.pipe
323
+
316
324
  outpipe.write command
317
325
  outpipe.close
318
326
  STDIN.reopen(inpipe)
319
327
 
328
+ close_all_descriptors([inpipe.to_i])
329
+
320
330
  if user and user != ''
321
331
  exec "cd /; sudo -H -u #{user} bash"
322
332
  else
323
333
  exec "bash"
324
334
  end
325
335
  end
326
- outpipe.close
327
336
 
328
337
  Process::detach pid
329
338
 
330
339
  pid
331
340
  end
332
341
 
342
+ def close_all_descriptors(keep_open = [])
343
+ 3.upto(256) do |fd|
344
+ next if keep_open.include?(fd)
345
+ IO::new(fd).close rescue nil
346
+ end
347
+ end
348
+
333
349
  ####################################
334
350
 
335
351
  # Raised when the action passed in by RushServer is not known.
@@ -342,6 +358,7 @@ class Rush::Connection::Local
342
358
  def receive(params)
343
359
  case params[:action]
344
360
  when 'write_file' then write_file(params[:full_path], params[:payload])
361
+ when 'append_to_file' then append_to_file(params[:full_path], params[:payload])
345
362
  when 'file_contents' then file_contents(params[:full_path])
346
363
  when 'destroy' then destroy(params[:full_path])
347
364
  when 'purge' then purge(params[:full_path])
@@ -18,6 +18,10 @@ class Rush::Connection::Remote
18
18
  transmit(:action => 'write_file', :full_path => full_path, :payload => contents)
19
19
  end
20
20
 
21
+ def append_to_file(full_path, contents)
22
+ transmit(:action => 'append_to_file', :full_path => full_path, :payload => contents)
23
+ end
24
+
21
25
  def file_contents(full_path)
22
26
  transmit(:action => 'file_contents', :full_path => full_path)
23
27
  end
@@ -39,6 +39,10 @@ describe Rush::File do
39
39
  @file.contents.should == @contents
40
40
  end
41
41
 
42
+ it "read is an alias for contents" do
43
+ @file.read.should == @contents
44
+ end
45
+
42
46
  it "can write new contents" do
43
47
  @file.write('write test')
44
48
  @file.contents.should == 'write test'
@@ -17,6 +17,11 @@ describe Rush::Connection::Local do
17
17
  @con.receive(:action => 'write_file', :full_path => 'file', :payload => 'contents')
18
18
  end
19
19
 
20
+ it "receive -> append_to_file(file, contents)" do
21
+ @con.should_receive(:append_to_file).with('file', 'contents')
22
+ @con.receive(:action => 'append_to_file', :full_path => 'file', :payload => 'contents')
23
+ end
24
+
20
25
  it "receive -> file_contents(file)" do
21
26
  @con.should_receive(:file_contents).with('file').and_return('the contents')
22
27
  @con.receive(:action => 'file_contents', :full_path => 'file').should == 'the contents'
@@ -116,6 +121,13 @@ describe Rush::Connection::Local do
116
121
  File.read(fname).should == data
117
122
  end
118
123
 
124
+ it "append_to_file appends contents to a file" do
125
+ fname = "#{@sandbox_dir}/a_file"
126
+ system "echo line1 > #{fname}"
127
+ @con.append_to_file(fname, 'line2')
128
+ File.read(fname).should == "line1\nline2"
129
+ end
130
+
119
131
  it "file_contents reads a file's contents" do
120
132
  fname = "#{@sandbox_dir}/a_file"
121
133
  system "echo stuff > #{fname}"
@@ -17,6 +17,11 @@ describe Rush::Connection::Local do
17
17
  @con.write_file('file', 'contents')
18
18
  end
19
19
 
20
+ it "transmits append_to_file" do
21
+ @con.should_receive(:transmit).with(:action => 'append_to_file', :full_path => 'file', :payload => 'contents')
22
+ @con.append_to_file('file', 'contents')
23
+ end
24
+
20
25
  it "transmits file_contents" do
21
26
  @con.should_receive(:transmit).with(:action => 'file_contents', :full_path => 'file').and_return('contents')
22
27
  @con.file_contents('file').should == 'contents'
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rush
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.1
4
+ version: 0.4.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Adam Wiggins
@@ -9,7 +9,7 @@ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
11
 
12
- date: 2008-09-10 00:00:00 -07:00
12
+ date: 2008-10-22 00:00:00 -07:00
13
13
  default_executable:
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
@@ -22,16 +22,6 @@ dependencies:
22
22
  - !ruby/object:Gem::Version
23
23
  version: "0"
24
24
  version:
25
- - !ruby/object:Gem::Dependency
26
- name: rspec
27
- type: :runtime
28
- version_requirement:
29
- version_requirements: !ruby/object:Gem::Requirement
30
- requirements:
31
- - - ">="
32
- - !ruby/object:Gem::Version
33
- version: "0"
34
- version:
35
25
  - !ruby/object:Gem::Dependency
36
26
  name: session
37
27
  type: :runtime