iprocess 1.0.3 → 1.0.4
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/Rakefile +0 -1
- data/lib/iprocess/version.rb +1 -1
- data/lib/iprocess.rb +7 -7
- data/test/test_IProcess_Job_class.rb +6 -12
- data/test/test_IProcess_class.rb +37 -25
- metadata +11 -11
data/Rakefile
CHANGED
data/lib/iprocess/version.rb
CHANGED
data/lib/iprocess.rb
CHANGED
@@ -1,5 +1,11 @@
|
|
1
1
|
class IProcess
|
2
2
|
|
3
|
+
require 'set'
|
4
|
+
require_relative 'iprocess/version'
|
5
|
+
require_relative 'iprocess/channel'
|
6
|
+
require_relative 'iprocess/job'
|
7
|
+
require_relative 'iprocess/delegator'
|
8
|
+
|
3
9
|
#
|
4
10
|
# @return [IProcess]
|
5
11
|
#
|
@@ -64,7 +70,7 @@ class IProcess
|
|
64
70
|
#
|
65
71
|
def fork &block
|
66
72
|
unless block_given?
|
67
|
-
raise ArgumentError, "
|
73
|
+
raise ArgumentError, "Wrong number of arguments (0 for 1)"
|
68
74
|
end
|
69
75
|
|
70
76
|
scope = @scope || block.binding
|
@@ -89,9 +95,3 @@ class IProcess
|
|
89
95
|
end
|
90
96
|
|
91
97
|
end
|
92
|
-
|
93
|
-
require 'set'
|
94
|
-
require 'iprocess/version'
|
95
|
-
require 'iprocess/channel'
|
96
|
-
require 'iprocess/job'
|
97
|
-
require 'iprocess/delegator'
|
@@ -1,12 +1,13 @@
|
|
1
1
|
context IProcess::Job do
|
2
2
|
context 'spawn' do
|
3
|
-
it '
|
3
|
+
it 'spawns two Proc workers.' do
|
4
4
|
topic = IProcess::Job.spawn(2) { :ok }
|
5
5
|
topic.must_equal([:ok, :ok])
|
6
6
|
end
|
7
7
|
|
8
|
-
it '
|
9
|
-
worker =
|
8
|
+
it 'spawns two non-Proc workers.' do
|
9
|
+
worker =
|
10
|
+
Class.new do
|
10
11
|
def call
|
11
12
|
:ok
|
12
13
|
end
|
@@ -15,18 +16,11 @@ context IProcess::Job do
|
|
15
16
|
topic = IProcess::Job.spawn(2, worker.new)
|
16
17
|
topic.must_equal([:ok, :ok])
|
17
18
|
end
|
18
|
-
|
19
|
-
it 'must accept any object responding to #call.' do
|
20
|
-
mock = MiniTest::Mock.new
|
21
|
-
mock.expect(:call, :ok)
|
22
|
-
|
23
|
-
IProcess::Job.spawn(1, mock)
|
24
|
-
end
|
25
19
|
end
|
26
20
|
|
27
21
|
context 'initialize' do
|
28
|
-
it "
|
29
|
-
proc { IProcess::Job.new(
|
22
|
+
it "raises if given an object who cannot respond to #call." do
|
23
|
+
proc { IProcess::Job.new(nil) }.must_raise(ArgumentError)
|
30
24
|
end
|
31
25
|
end
|
32
26
|
end
|
data/test/test_IProcess_class.rb
CHANGED
@@ -1,25 +1,27 @@
|
|
1
1
|
context IProcess do
|
2
2
|
|
3
3
|
context 'initialize' do
|
4
|
-
it '
|
4
|
+
it 'calls a block, if given.' do
|
5
5
|
mock = MiniTest::Mock.new
|
6
6
|
mock.expect :ok, nil
|
7
|
-
|
7
|
+
|
8
8
|
IProcess.new do
|
9
9
|
mock.ok
|
10
10
|
end
|
11
|
+
|
12
|
+
mock.verify
|
11
13
|
end
|
12
14
|
end
|
13
15
|
|
14
16
|
context 'share' do
|
15
|
-
it '
|
17
|
+
it 'shares a variable.' do
|
16
18
|
IProcess.new do
|
17
19
|
share :a
|
18
20
|
variables.must_equal [:a]
|
19
21
|
end
|
20
22
|
end
|
21
23
|
|
22
|
-
it "
|
24
|
+
it "does not store duplicate variables" do
|
23
25
|
IProcess.new do
|
24
26
|
share :a, :a
|
25
27
|
variables.must_equal [:a]
|
@@ -28,7 +30,7 @@ context IProcess do
|
|
28
30
|
end
|
29
31
|
|
30
32
|
context 'unshare' do
|
31
|
-
it "
|
33
|
+
it "unshares a variable." do
|
32
34
|
IProcess.new do
|
33
35
|
share :a
|
34
36
|
unshare :a
|
@@ -38,58 +40,68 @@ context IProcess do
|
|
38
40
|
end
|
39
41
|
|
40
42
|
context 'fork' do
|
41
|
-
it '
|
43
|
+
it 'returns the Process ID(PID) on success.' do
|
42
44
|
pid = IProcess.new.fork { }
|
43
45
|
assert_equal Fixnum, pid.class
|
44
46
|
end
|
45
47
|
|
46
|
-
it '
|
48
|
+
it 'raises if no block is given.' do
|
47
49
|
obj = IProcess.new
|
48
50
|
|
49
|
-
assert_raises
|
51
|
+
assert_raises(ArgumentError) do
|
50
52
|
obj.fork
|
51
53
|
end
|
52
54
|
end
|
53
55
|
|
54
|
-
it '
|
55
|
-
|
56
|
+
it 'synchronizes a shared variable.' do
|
57
|
+
local = 1
|
56
58
|
|
57
59
|
IProcess.new do
|
58
|
-
share :
|
59
|
-
fork {
|
60
|
+
share :local
|
61
|
+
fork { local = 2 }
|
60
62
|
end
|
61
63
|
|
62
|
-
|
64
|
+
local.must_equal(2)
|
63
65
|
end
|
64
66
|
|
65
|
-
it '
|
66
|
-
|
67
|
-
variable2 = :UnF
|
67
|
+
it 'synchronizes two shared variables.' do
|
68
|
+
local1, local2 = 1, 2
|
68
69
|
|
69
70
|
IProcess.new do
|
70
|
-
share :
|
71
|
+
share :local1, :local2
|
72
|
+
|
71
73
|
fork do
|
72
|
-
|
73
|
-
|
74
|
+
local1 = 5
|
75
|
+
local2 = 9
|
74
76
|
end
|
75
77
|
end
|
76
78
|
|
77
|
-
|
78
|
-
|
79
|
+
local1.must_equal(5)
|
80
|
+
local2.must_equal(9)
|
79
81
|
end
|
80
82
|
|
81
|
-
it '
|
82
|
-
@ivar = :
|
83
|
+
it 'synchronizes a instance variable.' do
|
84
|
+
@ivar = :ivar
|
83
85
|
|
84
86
|
IProcess.new do
|
85
87
|
share :@ivar
|
86
88
|
|
87
89
|
fork do
|
88
|
-
@ivar =
|
90
|
+
@ivar = 2
|
89
91
|
end
|
90
92
|
end
|
91
93
|
|
92
|
-
@ivar.must_equal(
|
94
|
+
@ivar.must_equal(2)
|
95
|
+
end
|
96
|
+
|
97
|
+
it 'provide access to surrounding local variables.' do
|
98
|
+
local = :local
|
99
|
+
|
100
|
+
IProcess.new do
|
101
|
+
fork do
|
102
|
+
local.must_equal(:local)
|
103
|
+
end
|
104
|
+
end
|
93
105
|
end
|
94
106
|
end
|
95
107
|
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: iprocess
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0.
|
4
|
+
version: 1.0.4
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,11 +9,11 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2012-03-
|
12
|
+
date: 2012-03-11 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: yard
|
16
|
-
requirement: &
|
16
|
+
requirement: &70123289432540 !ruby/object:Gem::Requirement
|
17
17
|
none: false
|
18
18
|
requirements:
|
19
19
|
- - ~>
|
@@ -21,10 +21,10 @@ dependencies:
|
|
21
21
|
version: '0.7'
|
22
22
|
type: :development
|
23
23
|
prerelease: false
|
24
|
-
version_requirements: *
|
24
|
+
version_requirements: *70123289432540
|
25
25
|
- !ruby/object:Gem::Dependency
|
26
26
|
name: redcarpet
|
27
|
-
requirement: &
|
27
|
+
requirement: &70123289429380 !ruby/object:Gem::Requirement
|
28
28
|
none: false
|
29
29
|
requirements:
|
30
30
|
- - ~>
|
@@ -32,10 +32,10 @@ dependencies:
|
|
32
32
|
version: '1.17'
|
33
33
|
type: :development
|
34
34
|
prerelease: false
|
35
|
-
version_requirements: *
|
35
|
+
version_requirements: *70123289429380
|
36
36
|
- !ruby/object:Gem::Dependency
|
37
37
|
name: minitest
|
38
|
-
requirement: &
|
38
|
+
requirement: &70123289427480 !ruby/object:Gem::Requirement
|
39
39
|
none: false
|
40
40
|
requirements:
|
41
41
|
- - ~>
|
@@ -43,10 +43,10 @@ dependencies:
|
|
43
43
|
version: '2.6'
|
44
44
|
type: :development
|
45
45
|
prerelease: false
|
46
|
-
version_requirements: *
|
46
|
+
version_requirements: *70123289427480
|
47
47
|
- !ruby/object:Gem::Dependency
|
48
48
|
name: rake
|
49
|
-
requirement: &
|
49
|
+
requirement: &70123285324240 !ruby/object:Gem::Requirement
|
50
50
|
none: false
|
51
51
|
requirements:
|
52
52
|
- - ~>
|
@@ -54,7 +54,7 @@ dependencies:
|
|
54
54
|
version: 0.9.2
|
55
55
|
type: :development
|
56
56
|
prerelease: false
|
57
|
-
version_requirements: *
|
57
|
+
version_requirements: *70123285324240
|
58
58
|
description: A Domain Specific Language(DSL) for sharing Ruby objectsbetween processes
|
59
59
|
on UNIX-like operating systems.
|
60
60
|
email: rob@flowof.info
|
@@ -99,7 +99,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
99
99
|
version: 1.3.6
|
100
100
|
requirements: []
|
101
101
|
rubyforge_project: ! '[none]'
|
102
|
-
rubygems_version: 1.8.
|
102
|
+
rubygems_version: 1.8.11
|
103
103
|
signing_key:
|
104
104
|
specification_version: 3
|
105
105
|
summary: A Domain Specific Language(DSL) for sharing Ruby objectsbetween processes
|