elf 0.0.1 → 0.0.2

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.
data/lib/elf.rb CHANGED
@@ -5,5 +5,5 @@ require "elf/fork"
5
5
  require "elf/sync"
6
6
 
7
7
  module Elf
8
- # Your code goes here...
8
+
9
9
  end
@@ -2,8 +2,9 @@ module Elf
2
2
  class Child
3
3
  attr_reader :success
4
4
 
5
- def initialize(cmd)
5
+ def initialize(cmd, comment)
6
6
  @cmd = cmd
7
+ @comment = comment
7
8
  end
8
9
 
9
10
  def on_success(&blk)
@@ -14,18 +15,18 @@ module Elf
14
15
  end
15
16
 
16
17
  def fire_success
17
- puts "Success: #{@cmd}"
18
+ puts "Success: #{@cmd} # #{@comment}"
18
19
  if @success
19
20
  @success.call
20
21
  end
21
22
  end
22
23
 
23
24
  def fire_error
24
- puts "Failed: #{@cmd}"
25
+ puts "Failed: #{@cmd} # #{@comment}"
25
26
  end
26
27
 
27
28
  def fire
28
- puts "Fired: #{@cmd}"
29
+ puts "Fired: #{@cmd} # #{@comment}"
29
30
  fork_pid = ::Process.fork do
30
31
  exec @cmd
31
32
  end
@@ -1,20 +1,33 @@
1
1
  module Elf
2
2
  class Process
3
3
  def initialize(&blk)
4
- pid = blk.call(self)
4
+ @pids = []
5
+ @pids << blk.call(self)
5
6
  ::Process.waitall
7
+ ensure
8
+ # killall!
6
9
  end
7
10
 
8
- def fork(cmd)
9
- elf = Elf::Fork.new(cmd)
11
+ def fork(cmd, comment=nil)
12
+ elf = Elf::Fork.new(cmd, comment)
10
13
  yield elf if block_given?
11
- pid = elf.fire
14
+ @pids << elf.fire
12
15
  end
13
16
 
14
- def sync(cmd)
15
- elf = Elf::Sync.new(cmd)
17
+ def sync(cmd, comment=nil)
18
+ elf = Elf::Sync.new(cmd, comment)
16
19
  yield elf if block_given?
17
- elf.fire
20
+ @pids << elf.fire
21
+ end
22
+
23
+ def killall!
24
+ @pids.each do |pid|
25
+ begin
26
+ ::Process.kill(9, pid)
27
+ rescue ::Errno::ESRCH
28
+ # ok
29
+ end
30
+ end
18
31
  end
19
32
  end
20
33
  end
@@ -1,3 +1,3 @@
1
1
  module Elf
2
- VERSION = "0.0.1"
2
+ VERSION = "0.0.2"
3
3
  end
@@ -95,4 +95,28 @@ describe Elf::Process do
95
95
  end
96
96
  (Time.now-start).to_i.must_equal(6)
97
97
  end
98
+
99
+ it "should work with sync jobs in success callback" do
100
+ start = Time.now
101
+ Elf::Process.new do |elf|
102
+ elf.fork("sleep 1", "first async") do |f|
103
+ f.on_success do
104
+ elf.sync("sleep 1", "first sync callback")
105
+ elf.sync("sleep 1", "second sync callback")
106
+ end
107
+ end
108
+ elf.fork("sleep 1", "second async") do |f|
109
+ f.on_success do
110
+ elf.fork("sleep 1", "first async callback") do |f1|
111
+ f1.on_success do
112
+ elf.fork("sleep 1", "one more async call")
113
+ elf.sync("sleep 1", "one more sync call")
114
+ end
115
+ end
116
+ elf.fork("sleep 1", "second async callback")
117
+ end
118
+ end
119
+ end
120
+ (Time.now-start).to_i.must_equal(4)
121
+ end
98
122
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: elf
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:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-04-18 00:00:00.000000000Z
12
+ date: 2012-04-19 00:00:00.000000000Z
13
13
  dependencies: []
14
14
  description: Elves are creatures to manage background processes
15
15
  email: