em-systemcommand 0.0.1 → 0.0.2

Sign up to get free protection for your applications and to get access to all the features.
@@ -4,9 +4,9 @@ require File.expand_path('../lib/em-systemcommand/version', __FILE__)
4
4
  Gem::Specification.new do |gem|
5
5
  gem.authors = ["Arthur Andersen"]
6
6
  gem.email = ["leoc.git@gmail.com"]
7
- gem.description = %q{}
8
- gem.summary = %q{}
9
- gem.homepage = ""
7
+ gem.description = %q{`em-systemcommand` is a simple abstraction for invoking system commands and handling their output easily with eventmachine.}
8
+ gem.summary = %q{Sweeter popen3 for EventMachine.}
9
+ gem.homepage = "http://leoc.github.com/em-systemcommand/"
10
10
 
11
11
  gem.files = `git ls-files`.split($\)
12
12
  gem.executables = gem.files.grep(%r{^bin/}).map{ |f| File.basename(f) }
@@ -30,7 +30,7 @@ module EventMachine
30
30
  # Invoked when line was received
31
31
  def receive_line line
32
32
  receive_line_callbacks.each do |callback|
33
- callback.call line
33
+ callback.call line.dup
34
34
  end
35
35
  end
36
36
 
@@ -41,9 +41,9 @@ module EventMachine
41
41
 
42
42
  # Invoked when a line was written, but `\r` was received without
43
43
  # a line-break in the end.
44
- def receive_update line
44
+ def receive_update buffer
45
45
  receive_update_callbacks.each do |callback|
46
- callback.call line
46
+ callback.call buffer.dup
47
47
  end
48
48
  end
49
49
 
@@ -53,34 +53,38 @@ module EventMachine
53
53
  end
54
54
 
55
55
  # Invoked when data was received.
56
- def receive_data data
57
- receive_data_callbacks.each do |callback|
58
- callback.call data
56
+ def receive_data data, recursive = false
57
+ unless recursive
58
+ receive_data_callbacks.each do |callback|
59
+ callback.call data.dup
60
+ end
59
61
  end
60
-
61
62
  @lt2_linebuffer ||= []
62
63
 
63
64
  ix = data.index("\r")
64
- if ix and data[ix+1] != "\n"
65
- @lt2_linebuffer << data[0...ix]
66
- ln = @lt2_linebuffer.join
65
+ if ix && data[ix+1] != "\n"
66
+ ln = (@lt2_linebuffer << data[0...ix]).join
67
67
  @lt2_linebuffer.clear
68
+ receive_line ln
68
69
  @outputbuffer.print ln
69
70
  @outputbuffer.pos -= ln.length
70
- receive_line ln
71
- receive_update @outputbuffer.string
72
- receive_data data[(ix+1)..-1] # receive rest data
73
- elsif ix = data.index("\n")
74
- @lt2_linebuffer << data[0...ix]
75
- ln = @lt2_linebuffer.join
76
- @lt2_linebuffer.clear
77
- ln.chomp!
78
- @outputbuffer.puts ln
79
- receive_line ln
80
71
  receive_update @outputbuffer.string
81
- receive_data data[(ix+1)..-1] # receive rest data
72
+ receive_data data[(ix+1)..-1], true # receive rest data
82
73
  else
83
- @lt2_linebuffer << data
74
+ if ix = data.index("\n")
75
+ ln = (@lt2_linebuffer << data[0...ix]).join
76
+ @lt2_linebuffer.clear
77
+ ln.chomp!
78
+ receive_line ln
79
+ receive_data data[(ix+1)..-1], true # receive rest data
80
+ else
81
+ @lt2_linebuffer << data
82
+ end
83
+
84
+ unless recursive
85
+ @outputbuffer.puts data
86
+ receive_update @outputbuffer.string
87
+ end
84
88
  end
85
89
  end
86
90
 
@@ -1,5 +1,5 @@
1
1
  module Em
2
2
  module Systemcommand
3
- VERSION = "0.0.1"
3
+ VERSION = "0.0.2"
4
4
  end
5
5
  end
@@ -0,0 +1,146 @@
1
+ require 'spec_helper'
2
+
3
+ describe 'Pipe' do
4
+
5
+ context '#data callback' do
6
+
7
+ it 'should be called on data' do
8
+ received = []
9
+ EM.run do
10
+ EM::SystemCommand.new %q{echo -n "123123";} do |on|
11
+ on.stdout.data do |data|
12
+ received << data
13
+ end
14
+
15
+ on.success do
16
+ EM.stop_event_loop
17
+ received.should == ["123123"]
18
+ end
19
+ end
20
+ end
21
+ end
22
+
23
+ it 'should be called once even when there is a linebreak' do
24
+ received = []
25
+ EM.run do
26
+ EM::SystemCommand.new %Q{echo "123\n456"} do |on|
27
+ on.stdout.data do |data|
28
+ received << data
29
+ end
30
+
31
+ on.success do
32
+ EM.stop_event_loop
33
+ received.should == ["123\n456\n"]
34
+ end
35
+ end
36
+ end
37
+ end
38
+ end
39
+
40
+ context '#line callback' do
41
+
42
+ it 'should be called on readline' do
43
+ received = []
44
+ EM.run do
45
+ EM::SystemCommand.new 'echo "123"; echo "456"' do |on|
46
+ on.stdout.line do |data|
47
+ received << data
48
+ end
49
+
50
+ on.success do
51
+ EM.stop_event_loop
52
+ received.should == ["123","456"]
53
+ end
54
+ end
55
+ end
56
+ end
57
+
58
+ it 'should be called on carriage return' do
59
+ received = []
60
+ EM.run do
61
+ EM::SystemCommand.new "echo -n \"123\r\"; echo -n \"456\r\"" do |on|
62
+ on.stdout.line do |data|
63
+ received << data
64
+ end
65
+
66
+ on.success do
67
+ EM.stop_event_loop
68
+ received.should == ["123","456"]
69
+ end
70
+ end
71
+ end
72
+ end
73
+
74
+ end
75
+
76
+ context '#update callback' do
77
+
78
+ it 'should be called on receive data' do
79
+ received = []
80
+ EM.run do
81
+ EM::SystemCommand.new %q{ruby -e '$stdout.sync = true; puts "123"; puts "456"; exit 0'} do |on|
82
+ on.stdout.update do |data|
83
+ received << data
84
+ end
85
+
86
+ on.success do
87
+ EM.stop_event_loop
88
+ received.should == ["123\n456\n"]
89
+ end
90
+ end
91
+ end
92
+ end
93
+
94
+ it 'should be called on carriage return'do
95
+ received = []
96
+ EM.run do
97
+ EM::SystemCommand.new %q{ruby -e '$stdout.sync = true; print "123\r"; print "456\r"; exit 0;'} do |on|
98
+ on.stdout.update do |data|
99
+ received << data
100
+ end
101
+
102
+ on.success do
103
+ EM.stop_event_loop
104
+ received.should == ["123","456"]
105
+ end
106
+ end
107
+ end
108
+ end
109
+
110
+ end
111
+
112
+ context '#match callback' do
113
+
114
+ it 'should match in lines on receive_line' do
115
+ received = []
116
+ EM.run do
117
+ EM::SystemCommand.new 'echo "-123-"; echo "-456-"' do |on|
118
+ on.stdout.match /-([0-9]+)-/, in: :line do |match, number|
119
+ received << number
120
+ end
121
+
122
+ on.success do
123
+ EM.stop_event_loop
124
+ received.should == ["123","456"]
125
+ end
126
+ end
127
+ end
128
+ end
129
+
130
+ it 'should match in output buffer on receive_update' do
131
+ received = []
132
+ EM.run do
133
+ EM::SystemCommand.new %q{ruby -e '$stdout.sync = true; print "-123-\r"; print "-456-\r"; exit 0'} do |on|
134
+ on.stdout.match /-([0-9]+)-/, in: :output do |match, number|
135
+ received << number
136
+ end
137
+
138
+ on.success do
139
+ EM.stop_event_loop
140
+ received.should == ["123","456"]
141
+ end
142
+ end
143
+ end
144
+ end
145
+ end
146
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: em-systemcommand
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 0.0.2
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -13,7 +13,7 @@ date: 2012-05-03 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rspec
16
- requirement: &18939980 !ruby/object:Gem::Requirement
16
+ requirement: &15758320 !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ! '>='
@@ -21,10 +21,10 @@ dependencies:
21
21
  version: '0'
22
22
  type: :development
23
23
  prerelease: false
24
- version_requirements: *18939980
24
+ version_requirements: *15758320
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: guard
27
- requirement: &18939560 !ruby/object:Gem::Requirement
27
+ requirement: &15757900 !ruby/object:Gem::Requirement
28
28
  none: false
29
29
  requirements:
30
30
  - - ! '>='
@@ -32,10 +32,10 @@ dependencies:
32
32
  version: '0'
33
33
  type: :development
34
34
  prerelease: false
35
- version_requirements: *18939560
35
+ version_requirements: *15757900
36
36
  - !ruby/object:Gem::Dependency
37
37
  name: guard-rspec
38
- requirement: &18939000 !ruby/object:Gem::Requirement
38
+ requirement: &15757480 !ruby/object:Gem::Requirement
39
39
  none: false
40
40
  requirements:
41
41
  - - ! '>='
@@ -43,10 +43,10 @@ dependencies:
43
43
  version: '0'
44
44
  type: :development
45
45
  prerelease: false
46
- version_requirements: *18939000
46
+ version_requirements: *15757480
47
47
  - !ruby/object:Gem::Dependency
48
48
  name: eventmachine
49
- requirement: &18938420 !ruby/object:Gem::Requirement
49
+ requirement: &15757060 !ruby/object:Gem::Requirement
50
50
  none: false
51
51
  requirements:
52
52
  - - ! '>='
@@ -54,8 +54,9 @@ dependencies:
54
54
  version: '0'
55
55
  type: :runtime
56
56
  prerelease: false
57
- version_requirements: *18938420
58
- description: ''
57
+ version_requirements: *15757060
58
+ description: ! '`em-systemcommand` is a simple abstraction for invoking system commands
59
+ and handling their output easily with eventmachine.'
59
60
  email:
60
61
  - leoc.git@gmail.com
61
62
  executables: []
@@ -75,9 +76,10 @@ files:
75
76
  - lib/em-systemcommand/pipe.rb
76
77
  - lib/em-systemcommand/pipe_handler.rb
77
78
  - lib/em-systemcommand/version.rb
79
+ - spec/em-systemcommand/pipe_spec.rb
78
80
  - spec/em-systmcommand_spec.rb
79
81
  - spec/spec_helper.rb
80
- homepage: ''
82
+ homepage: http://leoc.github.com/em-systemcommand/
81
83
  licenses: []
82
84
  post_install_message:
83
85
  rdoc_options: []
@@ -91,7 +93,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
91
93
  version: '0'
92
94
  segments:
93
95
  - 0
94
- hash: -1466650369422800238
96
+ hash: 1032531485384539131
95
97
  required_rubygems_version: !ruby/object:Gem::Requirement
96
98
  none: false
97
99
  requirements:
@@ -100,13 +102,14 @@ required_rubygems_version: !ruby/object:Gem::Requirement
100
102
  version: '0'
101
103
  segments:
102
104
  - 0
103
- hash: -1466650369422800238
105
+ hash: 1032531485384539131
104
106
  requirements: []
105
107
  rubyforge_project:
106
108
  rubygems_version: 1.8.17
107
109
  signing_key:
108
110
  specification_version: 3
109
- summary: ''
111
+ summary: Sweeter popen3 for EventMachine.
110
112
  test_files:
113
+ - spec/em-systemcommand/pipe_spec.rb
111
114
  - spec/em-systmcommand_spec.rb
112
115
  - spec/spec_helper.rb