iprocess 3.0.2 → 3.1.0

Sign up to get free protection for your applications and to get access to all the features.
data/README.md CHANGED
@@ -10,11 +10,10 @@ __OVERVIEW__
10
10
 
11
11
  __DESCRIPTION__
12
12
 
13
- IProcess makes InterProcess Communication(IPC) easy by providing a number of
14
- abstractions on top of spawning subprocesses and interprocess communication.
15
- It has a simple and easy to use API that supports synchronous and asynchronous
16
- method calls plus a few other useful features that will become
17
- obvious in the examples below. :-)
13
+ Provides a number of abstractions on top of spawning subprocesses and interprocess
14
+ communication. It has a simple and easy to use API that supports synchronous and
15
+ asynchronous method calls plus one or two other useful features shown in the
16
+ examples below.
18
17
 
19
18
  __EXAMPLES__
20
19
 
@@ -23,10 +22,12 @@ those(3) demos the asynchronous API.
23
22
 
24
23
  __1.__
25
24
 
26
- A subprocess is spawned:
25
+ Three subprocesses are spawned. The return value of the block, even though executed
26
+ in a subprocess, is returned to the parent process as long as it may be serialized
27
+ by Marshal:
27
28
 
28
- messages = IProcess.spawn { {msg: "hello"} }
29
- p messages # => [{msg: "hello"}]
29
+ messages = IProcess.spawn(3) { {msg: "hello"} }
30
+ p messages # => [{msg: "hello"}, {msg: "hello"}, {msg: "hello"}]
30
31
 
31
32
  __2.__
32
33
 
@@ -62,6 +63,13 @@ A subprocess is spawned asynchronously.
62
63
  jobs = IProcess.spawn! { Process.pid }
63
64
  jobs.map { |job| job.report_to(inbox) }
64
65
 
66
+ __SERIALIZERS__
67
+
68
+ A serializer is any object that implements load & dump.
69
+ You can choose what serializer you'd like to use through
70
+ the `IProcess.serializer=` method:
71
+
72
+ IProcess.serializer = JSON
65
73
 
66
74
  __PLATFORM SUPPORT__
67
75
 
@@ -1,12 +1,16 @@
1
1
  class IProcess::Channel
2
2
 
3
+ #
4
+ # @param [#dump,#load}] serializer
5
+ # Any object that implements dump, & load.
6
+ # Defaults to {IProcess.serializer}.
3
7
  #
4
8
  # @yieldparam [IProcess::Channel] _self
5
9
  # Yields self.
6
10
  #
7
- def initialize
11
+ def initialize(serializer = IProcess.serializer)
8
12
  @reader, @writer = IO.pipe
9
-
13
+ @serializer = serializer
10
14
  if block_given?
11
15
  yield self
12
16
  end
@@ -41,7 +45,7 @@ class IProcess::Channel
41
45
  def write object
42
46
  if open?
43
47
  @reader.close
44
- @writer.write Marshal.dump(object)
48
+ @writer.write @serializer.dump(object)
45
49
  @writer.close
46
50
  end
47
51
  end
@@ -55,7 +59,7 @@ class IProcess::Channel
55
59
  def recv
56
60
  if open?
57
61
  @writer.close
58
- obj = Marshal.load(@reader.read)
62
+ obj = @serializer.load @reader.read
59
63
  @reader.close
60
64
  obj
61
65
  end
@@ -1,3 +1,3 @@
1
1
  class IProcess
2
- VERSION = '3.0.2'
2
+ VERSION = '3.1.0'
3
3
  end
data/lib/iprocess.rb CHANGED
@@ -3,6 +3,23 @@ class IProcess
3
3
  require_relative 'iprocess/channel'
4
4
 
5
5
  class << self
6
+ #
7
+ # @return [#load,#dump]
8
+ # Returns the serializer used by IProcess.
9
+ #
10
+ def serializer
11
+ @serializer || Marshal
12
+ end
13
+
14
+ #
15
+ # @param [#load,#dump] obj
16
+ # Any object that implements #load, & #dump.
17
+ # Examples could be JSON & Marshal.
18
+ #
19
+ def serializer=(obj)
20
+ @serializer = obj
21
+ end
22
+
6
23
  #
7
24
  # @overload spawn(number_of = 1, worker)
8
25
  #
@@ -47,10 +64,10 @@ class IProcess
47
64
 
48
65
  #
49
66
  # @param [#call] worker
50
- # The unit of work to execute in a subprocess.
67
+ # A block or any object that responds to #call.
51
68
  #
52
69
  # @raise [ArgumentError]
53
- # If a worker does not respond to _#call_.
70
+ # If 'worker' does not respond to #call.
54
71
  #
55
72
  # @return [IProcess]
56
73
  # Returns self.
@@ -58,7 +75,7 @@ class IProcess
58
75
  def initialize(worker)
59
76
  @worker = worker
60
77
  @channel = nil
61
- @pid = nil
78
+ @pid = nil
62
79
  unless @worker.respond_to?(:call)
63
80
  raise ArgumentError,
64
81
  "Expected worker to implement #{@worker.class}#call"
@@ -67,7 +84,7 @@ class IProcess
67
84
 
68
85
  #
69
86
  # @param [#recv] obj
70
- # An object that will receive a msg.
87
+ # An object that will receive messages.
71
88
  #
72
89
  # @return [void]
73
90
  #
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: 3.0.2
4
+ version: 3.1.0
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-10-25 00:00:00.000000000 Z
12
+ date: 2012-10-27 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: yard