em-systemcommand 0.0.2 → 0.0.3

Sign up to get free protection for your applications and to get access to all the features.
@@ -59,31 +59,50 @@ module EventMachine
59
59
  callback.call data.dup
60
60
  end
61
61
  end
62
- @lt2_linebuffer ||= []
63
-
64
- ix = data.index("\r")
65
- if ix && data[ix+1] != "\n"
66
- ln = (@lt2_linebuffer << data[0...ix]).join
67
- @lt2_linebuffer.clear
68
- receive_line ln
69
- @outputbuffer.print ln
70
- @outputbuffer.pos -= ln.length
71
- receive_update @outputbuffer.string
72
- receive_data data[(ix+1)..-1], true # receive rest data
73
- else
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
62
+ @linebuffer ||= []
63
+ @cr_offset = 0
64
+
65
+ parse_crlf data
66
+
67
+ receive_update @outputbuffer.string unless recursive
68
+ end
69
+
70
+ def parse_cr data, ix
71
+ ln = (@linebuffer << data[0...ix]).join
72
+ @linebuffer.clear
73
+ receive_line ln
74
+ @outputbuffer.print ln
75
+ @outputbuffer.pos = @cr_offset
76
+ parse_crlf data[(ix+1)..-1] # receive rest data
77
+ end
78
+
79
+ def parse_lf data, ix
80
+ ln = (@linebuffer << data[0...ix]).join
81
+ @linebuffer.clear
82
+ ln.chomp!
83
+ receive_line ln
84
+ @outputbuffer.print ln
85
+ @outputbuffer.pos = @outputbuffer.length
86
+ @outputbuffer.puts
87
+ @cr_offset = @outputbuffer.pos
88
+ parse_crlf data[(ix+1)..-1] # receive rest data
89
+ end
90
+
91
+ def parse_crlf data
92
+ if ilf = data.index("\n")
93
+ # if we find a LF and that LF is after a CR we first handle
94
+ # the CR
95
+ if icr = data.index("\r") and ilf != (icr+1) and icr < ilf
96
+ parse_cr data, icr
80
97
  else
81
- @lt2_linebuffer << data
98
+ parse_lf data, ilf
82
99
  end
83
-
84
- unless recursive
85
- @outputbuffer.puts data
86
- receive_update @outputbuffer.string
100
+ else
101
+ if icr = data.index("\r")
102
+ parse_cr data, icr
103
+ else
104
+ @linebuffer << data
105
+ @outputbuffer.print data
87
106
  end
88
107
  end
89
108
  end
@@ -1,5 +1,5 @@
1
1
  module Em
2
2
  module Systemcommand
3
- VERSION = "0.0.2"
3
+ VERSION = "0.0.3"
4
4
  end
5
5
  end
@@ -45,9 +45,9 @@ module EventMachine
45
45
  pipes.delete name
46
46
  if pipes.empty?
47
47
  if status.exitstatus == 0
48
- succeed
48
+ succeed self
49
49
  else
50
- fail status
50
+ fail self
51
51
  end
52
52
  end
53
53
  end
@@ -2,6 +2,19 @@ require 'spec_helper'
2
2
 
3
3
  describe 'Pipe' do
4
4
 
5
+ context '#receive_data' do
6
+ it 'should correctly do a carriage return in the output buffer' do
7
+ EM.run do
8
+ EM::SystemCommand.new %q{ruby -e '$stdout.sync = true; print "12345\r"; puts "321"; print "123"; print "\r3210"; exit 0;'} do |on|
9
+ on.success do |process|
10
+ EM.stop_event_loop
11
+ process.stdout.output.should == "32145\n3210"
12
+ end
13
+ end
14
+ end
15
+ end
16
+ end
17
+
5
18
  context '#data callback' do
6
19
 
7
20
  it 'should be called on data' do
@@ -58,7 +71,7 @@ describe 'Pipe' do
58
71
  it 'should be called on carriage return' do
59
72
  received = []
60
73
  EM.run do
61
- EM::SystemCommand.new "echo -n \"123\r\"; echo -n \"456\r\"" do |on|
74
+ EM::SystemCommand.new %q{ruby -e '$stdout.sync = true; print "123\r"; print "456\r"; exit 0;'} do |on|
62
75
  on.stdout.line do |data|
63
76
  received << data
64
77
  end
@@ -94,7 +107,7 @@ describe 'Pipe' do
94
107
  it 'should be called on carriage return'do
95
108
  received = []
96
109
  EM.run do
97
- EM::SystemCommand.new %q{ruby -e '$stdout.sync = true; print "123\r"; print "456\r"; exit 0;'} do |on|
110
+ EM::SystemCommand.new %q{ruby -e '$stdout.sync = true; print "123\r"; sleep 0.1; print "456\r"; exit 0;'} do |on|
98
111
  on.stdout.update do |data|
99
112
  received << data
100
113
  end
@@ -130,7 +143,7 @@ describe 'Pipe' do
130
143
  it 'should match in output buffer on receive_update' do
131
144
  received = []
132
145
  EM.run do
133
- EM::SystemCommand.new %q{ruby -e '$stdout.sync = true; print "-123-\r"; print "-456-\r"; exit 0'} do |on|
146
+ EM::SystemCommand.new %q{ruby -e '$stdout.sync = true; print "-123-\r"; sleep 0.1; print "-456-\r"; exit 0'} do |on|
134
147
  on.stdout.match /-([0-9]+)-/, in: :output do |match, number|
135
148
  received << number
136
149
  end
@@ -2,10 +2,10 @@ require 'spec_helper'
2
2
 
3
3
  describe EM::SystemCommand do
4
4
 
5
- it 'should take a success callback' do
5
+ it 'should call a success callback when process succeeds' do
6
6
  called = false
7
7
  EM.run do
8
- EM::SystemCommand.new 'echo "123"; exit 0;' do |on|
8
+ EM::SystemCommand.new 'exit 0;' do |on|
9
9
  on.success do |ps|
10
10
  called = true
11
11
  end
@@ -17,7 +17,18 @@ describe EM::SystemCommand do
17
17
  end
18
18
  end
19
19
 
20
- it 'should take a failure callback' do
20
+ it 'should take a success callback with process as parameter' do
21
+ EM.run do
22
+ EM::SystemCommand.new 'exit 0;' do |on|
23
+ on.success do |ps|
24
+ EM.stop_event_loop
25
+ ps.should be_a EM::SystemCommand
26
+ end
27
+ end
28
+ end
29
+ end
30
+
31
+ it 'should call a failure callback when process fails' do
21
32
  called = false
22
33
  EM.run do
23
34
  EM::SystemCommand.new 'echo "123"; exit 1;' do |on|
@@ -32,6 +43,17 @@ describe EM::SystemCommand do
32
43
  end
33
44
  end
34
45
 
46
+ it 'should take a failure callback with process as parameter' do
47
+ EM.run do
48
+ EM::SystemCommand.new 'exit 1;' do |on|
49
+ on.failure do |ps|
50
+ EM.stop_event_loop
51
+ ps.should be_a EM::SystemCommand
52
+ end
53
+ end
54
+ end
55
+ end
56
+
35
57
  it 'should have stdin pipe' do
36
58
  EM.run do
37
59
  ps = EM::SystemCommand.new 'echo "123"; exit 1;'
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.2
4
+ version: 0.0.3
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: &15758320 !ruby/object:Gem::Requirement
16
+ requirement: &17785880 !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: *15758320
24
+ version_requirements: *17785880
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: guard
27
- requirement: &15757900 !ruby/object:Gem::Requirement
27
+ requirement: &17785460 !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: *15757900
35
+ version_requirements: *17785460
36
36
  - !ruby/object:Gem::Dependency
37
37
  name: guard-rspec
38
- requirement: &15757480 !ruby/object:Gem::Requirement
38
+ requirement: &17785040 !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: *15757480
46
+ version_requirements: *17785040
47
47
  - !ruby/object:Gem::Dependency
48
48
  name: eventmachine
49
- requirement: &15757060 !ruby/object:Gem::Requirement
49
+ requirement: &17784620 !ruby/object:Gem::Requirement
50
50
  none: false
51
51
  requirements:
52
52
  - - ! '>='
@@ -54,7 +54,7 @@ dependencies:
54
54
  version: '0'
55
55
  type: :runtime
56
56
  prerelease: false
57
- version_requirements: *15757060
57
+ version_requirements: *17784620
58
58
  description: ! '`em-systemcommand` is a simple abstraction for invoking system commands
59
59
  and handling their output easily with eventmachine.'
60
60
  email:
@@ -93,7 +93,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
93
93
  version: '0'
94
94
  segments:
95
95
  - 0
96
- hash: 1032531485384539131
96
+ hash: -941213243736516933
97
97
  required_rubygems_version: !ruby/object:Gem::Requirement
98
98
  none: false
99
99
  requirements:
@@ -102,7 +102,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
102
102
  version: '0'
103
103
  segments:
104
104
  - 0
105
- hash: 1032531485384539131
105
+ hash: -941213243736516933
106
106
  requirements: []
107
107
  rubyforge_project:
108
108
  rubygems_version: 1.8.17