mux 0.0.1 → 0.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.
@@ -0,0 +1,37 @@
1
+ require 'rake'
2
+ require 'rake/testtask'
3
+ require 'rake/gempackagetask'
4
+
5
+ PKG_NAME = 'mux'
6
+ PKG_VERSION = '0.0.3'
7
+
8
+ desc "Default task"
9
+ task :default => [:test]
10
+
11
+ Rake::TestTask.new do |t|
12
+ t.pattern = 'test/*_test.rb'
13
+ t.verbose = true
14
+ t.warning = true
15
+ end
16
+
17
+ GEM_SPEC = eval(File.read("#{File.dirname(__FILE__)}/#{PKG_NAME}.gemspec"))
18
+
19
+ Rake::GemPackageTask.new(GEM_SPEC) do |p|
20
+ p.gem_spec = GEM_SPEC
21
+ p.need_tar = true
22
+ p.need_zip = true
23
+ end
24
+
25
+ desc "Clean up generated files"
26
+ task :clean do
27
+ rm_rf "pkg"
28
+ rm_rf "doc/mux.1.gz"
29
+ end
30
+
31
+ desc "Zip manpage"
32
+ task :man do
33
+ sh "gzip -c doc/mux.1 >doc/mux.1.gz"
34
+ end
35
+
36
+ desc "Build and package for release"
37
+ task :release => [:man, :package]
data/bin/mux CHANGED
@@ -28,7 +28,8 @@
28
28
  # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
29
29
  # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
30
30
  # SOFTWARE.
31
- require 'rubygems'
31
+ #require 'rubygems'
32
+ $:.unshift File.join(File.dirname(__FILE__), '..', 'lib')
32
33
  require 'mux'
33
34
 
34
- Mux.run(ARGV)
35
+ Mux.new.run(ARGV)
Binary file
data/lib/mux.rb CHANGED
@@ -30,47 +30,39 @@
30
30
  require 'optparse'
31
31
  require 'ostruct'
32
32
 
33
- class Mux
34
- def self.run(args)
33
+ class Mux
34
+
35
+ M = { :pipe => {:class => 'IO', :method => 'popen', :mode => 'w'},
36
+ :funnel => {:class => 'File', :method => 'open', :mode => 'w'},
37
+ :append => {:class => 'File', :method => 'open', :mode => 'a'} }
38
+
39
+ def run(args)
35
40
  options = Mux::Options.parse(args)
36
41
 
37
- streams = []
42
+ streams = options.to_stdout ? [$stdout] : []
38
43
 
39
- if options.to_stdout
40
- streams << $stdout
44
+ # this is silly and rather non-intuitive (at least tonight), but is fun
45
+ # nonetheless... i'll keep it around for a while and see what i think.
46
+ # ps. IT TOTALLY WORKS!
47
+ M.each_key do |k|
48
+ o = lambda { eval("options.#{k}s") }
49
+ streams.concat(open_streams(o.call, k)) if o.call
41
50
  end
42
-
43
- streams.concat(open_streams(options.pipes, 'pipe'))
44
- streams.concat(open_streams(options.funnels, 'funnel'))
45
- streams.concat(open_streams(options.appends, 'append'))
46
51
 
47
- while buffer = $stdin.gets
48
- streams.each do |stream|
49
- stream.puts buffer
50
- end
52
+ $stdin.each_line do |b|
53
+ streams.each {|s| s.write b }
51
54
  end
52
55
 
53
- streams.each do |stream|
54
- stream.close
55
- end
56
-
56
+ streams.each {|s| s.close }
57
57
  end
58
58
 
59
- def self.open_streams(targets, type)
60
- handles = []
61
- targets.each do |target|
62
- case type
63
- when 'pipe'
64
- handles << IO.popen(target, 'w')
65
- when 'funnel'
66
- handles << File.open(target, 'w')
67
- when 'append'
68
- handles << File.open(target, 'a')
69
- end
70
- end
71
- handles
59
+ def open_streams(targets, type)
60
+ targets.map {|t| open_stream(t,type) }
72
61
  end
73
62
 
63
+ def open_stream(target, type)
64
+ eval("#{M[type][:class]}.#{M[type][:method]}(target,'#{M[type][:mode]}')")
65
+ end
74
66
  end
75
67
 
76
68
  class Mux::Options
@@ -78,9 +70,6 @@ class Mux::Options
78
70
  options = OpenStruct.new
79
71
  options.verbose = false
80
72
  options.to_stdout = false
81
- options.pipes = []
82
- options.appends = []
83
- options.funnels = []
84
73
 
85
74
  opts = OptionParser.new do |opts|
86
75
  opts.banner = "Usage: mux [options]"
@@ -118,6 +107,6 @@ class Mux::Options
118
107
  end
119
108
 
120
109
  opts.parse!(args)
121
- options
110
+ return options
122
111
  end
123
112
  end
@@ -0,0 +1,17 @@
1
+ require 'rake'
2
+
3
+
4
+ Gem::Specification.new do |s|
5
+ s.name = 'mux'
6
+ s.version = PKG_VERSION
7
+ s.platform = Gem::Platform::RUBY
8
+ s.summary = 'tee(1) on crack'
9
+ s.files = FileList['Rakefile', 'bin/mux', 'lib/*.rb', 'README', 'doc/mux.1.gz', 'test/*.rb', 'mux.gemspec']
10
+ s.require_path = 'lib'
11
+ s.autorequire = 'mux'
12
+ s.bindir = 'bin'
13
+ s.executables << 'mux'
14
+ s.author = 'Jerome Harrington'
15
+ s.email = 'jharrington@awk-fu.com'
16
+ s.homepage = 'http://www.awk-fu.com/software/mux'
17
+ end
@@ -0,0 +1,51 @@
1
+ $:.unshift File.join(File.dirname(__FILE__), '..', 'lib')
2
+
3
+ require 'test/unit'
4
+ require 'mux'
5
+
6
+ class Mux::ExecutableTest < Test::Unit::TestCase
7
+
8
+ MUX = 'ruby ' + File.join(File.dirname(__FILE__), '..', 'bin', 'mux')
9
+
10
+ OUT_FILE = '/tmp/mux_executable_test.txt'
11
+
12
+ def setup
13
+ remove_out_file
14
+ end
15
+
16
+ def teardown
17
+ remove_out_file
18
+ end
19
+
20
+ def remove_out_file
21
+ if File.exists?(OUT_FILE)
22
+ File.delete(OUT_FILE)
23
+ end
24
+ end
25
+
26
+ def test_pipe
27
+ r = `echo "blah" | #{MUX} -p 'cat'`
28
+ assert_equal "blah\n", r
29
+ end
30
+
31
+ def test_stdout
32
+ r = `echo "blah" | #{MUX} -s`
33
+ assert_equal "blah\n", r
34
+ end
35
+
36
+ def test_funnel
37
+ r = `echo "blah" | #{MUX} -f #{OUT_FILE}`
38
+ r = File.read(OUT_FILE)
39
+ assert_equal "blah\n", r
40
+ end
41
+
42
+ def test_append
43
+ 2.times do
44
+ `echo "blah" | #{MUX} -a #{OUT_FILE}`
45
+ end
46
+
47
+ r = File.read(OUT_FILE)
48
+ assert_equal "blah\nblah\n", r
49
+ end
50
+
51
+ end
metadata CHANGED
@@ -1,10 +1,10 @@
1
1
  --- !ruby/object:Gem::Specification
2
- rubygems_version: 0.9.0
2
+ rubygems_version: 0.9.1
3
3
  specification_version: 1
4
4
  name: mux
5
5
  version: !ruby/object:Gem::Version
6
- version: 0.0.1
7
- date: 2006-11-05 00:00:00 -05:00
6
+ version: 0.0.3
7
+ date: 2007-02-08 00:00:00 -05:00
8
8
  summary: tee(1) on crack
9
9
  require_paths:
10
10
  - lib
@@ -29,9 +29,13 @@ post_install_message:
29
29
  authors:
30
30
  - Jerome Harrington
31
31
  files:
32
+ - Rakefile
32
33
  - bin/mux
33
34
  - lib/mux.rb
34
35
  - README
36
+ - doc/mux.1.gz
37
+ - test/executable_test.rb
38
+ - mux.gemspec
35
39
  test_files: []
36
40
 
37
41
  rdoc_options: []