iprocess 3.2.0 → 4.0.0

Sign up to get free protection for your applications and to get access to all the features.
data/.travis.yml CHANGED
@@ -1,9 +1,9 @@
1
1
  rvm:
2
2
  - 1.9.2
3
3
  - 1.9.3
4
- - rbx-19mode
5
4
  - ruby-head
6
-
5
+ # Rubinius does not implement UNIXSocket#recvmsg, yet.
6
+ # - rbx-19mode
7
7
  notifications:
8
8
  irc: "irc.freenode.org#ruby-bridge"
9
9
  email: false
data/README.md CHANGED
@@ -11,18 +11,20 @@ __OVERVIEW__
11
11
 
12
12
  __DESCRIPTION__
13
13
 
14
- Provides a number of abstractions on top of spawning subprocesses and
15
- interprocess communication. It has a simple and easy to use API that
16
- supports synchronous and asynchronous method calls plus one or two other
17
- useful features shown in the examples below.
14
+ Provides a number of abstractions on top of spawning subprocesses and
15
+ interprocess communication. The API is simple, easy to use & supports
16
+ both synchronous and asynchronous(non-blocking) dispatch of subprocesses.
17
+ It also supports implicit interprocess communication that can be easily
18
+ configured to use the serializer of your choice(default is the
19
+ [Marshal](http://rdoc.info/stdlib/core/Marshal) module) if needs be.
18
20
 
19
21
  __EXAMPLES__
20
22
 
21
23
  __1.__
22
24
 
23
- Three subprocesses are spawned. The return value of the block, even though
24
- executed in a subprocess, is returned to the parent process as long as it may
25
- be serialized by Marshal(or the serializer of your choice, this is
25
+ In this example three subprocesses are spawned. The return value of the block,
26
+ even though executed in a subprocess, is returned to the parent process as long
27
+ as it may be serialized by Marshal(or the serializer of your choice, this is
26
28
  configurable):
27
29
 
28
30
  messages = IProcess.spawn(3) { {msg: "hello"} }
@@ -91,19 +93,26 @@ __PLATFORM SUPPORT__
91
93
 
92
94
  _supported_
93
95
 
94
- * Rubinius (1.9 mode)
95
- * CRuby (1.9)
96
+ * CRuby (1.9+)
96
97
 
97
98
  _unsupported_
98
99
 
99
100
  * CRuby 1.8
100
101
  * MacRuby
101
102
  * JRuby
102
-
103
- __LICENSE__
104
-
105
- MIT. See LICENSE.txt.
103
+ * Rubinius (support for Rubinius will come sometime in the future).
106
104
 
107
105
  __INSTALL__
108
106
 
109
107
  $ gem install iprocess
108
+
109
+ __SEE ALSO__
110
+
111
+ - [XPool](https://github.com/robgleeson/xpool)
112
+ XPool is a UNIX process pool that was born inside IProcess but later extracted
113
+ into its own project. It might be interesting to you if you're interested in
114
+ concurrency and/or interprocess communication.
115
+
116
+ __LICENSE__
117
+
118
+ MIT. See LICENSE.txt.
data/iprocess.gemspec CHANGED
@@ -17,10 +17,11 @@ Gem::Specification.new do |s|
17
17
  s.require_path = 'lib'
18
18
  s.rubyforge_project = '[none]'
19
19
  s.required_rubygems_version = '>= 1.3.6'
20
- s.required_ruby_version = '~> 1.9.1'
20
+ s.required_ruby_version = '>= 1.9.2'
21
21
 
22
+ s.add_runtime_dependency 'ichannel', '~> 1.0.0'
22
23
  s.add_development_dependency 'yard' , '~> 0.7'
24
+ s.add_development_dependency 'minitest', '~> 2.6'
25
+ s.add_development_dependency 'rake', '~> 0.9.2'
23
26
  s.add_development_dependency 'kramdown'
24
- s.add_development_dependency 'minitest' , '~> 2.6'
25
- s.add_development_dependency 'rake' , '~> 0.9.2'
26
27
  end
@@ -1,3 +1,3 @@
1
1
  class IProcess
2
- VERSION = '3.2.0'
2
+ VERSION = '4.0.0'
3
3
  end
data/lib/iprocess.rb CHANGED
@@ -1,6 +1,6 @@
1
1
  class IProcess
2
+ require 'ichannel'
2
3
  require_relative 'iprocess/version'
3
- require_relative 'iprocess/channel'
4
4
  #
5
5
  # @return [#load,#dump]
6
6
  # Returns the serializer used by IProcess.
@@ -106,8 +106,8 @@ class IProcess
106
106
  # The process ID of the spawned subprocess.
107
107
  #
108
108
  def execute
109
- @channel = IProcess::Channel.new
110
- @pid = fork { @channel.write(@worker.call) }
109
+ @channel = IChannel.new IProcess.serializer
110
+ @pid = fork { @channel.put(@worker.call) }
111
111
  end
112
112
 
113
113
  #
@@ -116,6 +116,6 @@ class IProcess
116
116
  #
117
117
  def result
118
118
  Process.wait(@pid)
119
- @channel.recv
119
+ @channel.get
120
120
  end
121
121
  end
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.2.0
4
+ version: 4.0.0
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,40 +9,40 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-11-05 00:00:00.000000000 Z
12
+ date: 2012-11-15 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
- name: yard
15
+ name: ichannel
16
16
  requirement: !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ~>
20
20
  - !ruby/object:Gem::Version
21
- version: '0.7'
22
- type: :development
21
+ version: 1.0.0
22
+ type: :runtime
23
23
  prerelease: false
24
24
  version_requirements: !ruby/object:Gem::Requirement
25
25
  none: false
26
26
  requirements:
27
27
  - - ~>
28
28
  - !ruby/object:Gem::Version
29
- version: '0.7'
29
+ version: 1.0.0
30
30
  - !ruby/object:Gem::Dependency
31
- name: kramdown
31
+ name: yard
32
32
  requirement: !ruby/object:Gem::Requirement
33
33
  none: false
34
34
  requirements:
35
- - - ! '>='
35
+ - - ~>
36
36
  - !ruby/object:Gem::Version
37
- version: '0'
37
+ version: '0.7'
38
38
  type: :development
39
39
  prerelease: false
40
40
  version_requirements: !ruby/object:Gem::Requirement
41
41
  none: false
42
42
  requirements:
43
- - - ! '>='
43
+ - - ~>
44
44
  - !ruby/object:Gem::Version
45
- version: '0'
45
+ version: '0.7'
46
46
  - !ruby/object:Gem::Dependency
47
47
  name: minitest
48
48
  requirement: !ruby/object:Gem::Requirement
@@ -75,6 +75,22 @@ dependencies:
75
75
  - - ~>
76
76
  - !ruby/object:Gem::Version
77
77
  version: 0.9.2
78
+ - !ruby/object:Gem::Dependency
79
+ name: kramdown
80
+ requirement: !ruby/object:Gem::Requirement
81
+ none: false
82
+ requirements:
83
+ - - ! '>='
84
+ - !ruby/object:Gem::Version
85
+ version: '0'
86
+ type: :development
87
+ prerelease: false
88
+ version_requirements: !ruby/object:Gem::Requirement
89
+ none: false
90
+ requirements:
91
+ - - ! '>='
92
+ - !ruby/object:Gem::Version
93
+ version: '0'
78
94
  description: IProcess makes InterProcess Communication(IPC) easy.
79
95
  email: rob@flowof.info
80
96
  executables: []
@@ -92,7 +108,6 @@ files:
92
108
  - Rakefile
93
109
  - iprocess.gemspec
94
110
  - lib/iprocess.rb
95
- - lib/iprocess/channel.rb
96
111
  - lib/iprocess/version.rb
97
112
  - test/setup.rb
98
113
  - test/test_IProcess_class.rb
@@ -105,9 +120,9 @@ require_paths:
105
120
  required_ruby_version: !ruby/object:Gem::Requirement
106
121
  none: false
107
122
  requirements:
108
- - - ~>
123
+ - - ! '>='
109
124
  - !ruby/object:Gem::Version
110
- version: 1.9.1
125
+ version: 1.9.2
111
126
  required_rubygems_version: !ruby/object:Gem::Requirement
112
127
  none: false
113
128
  requirements:
@@ -1,72 +0,0 @@
1
- require 'socket'
2
- class IProcess::Channel
3
- #
4
- # @param [#dump,#load}] serializer
5
- # Any object that implements dump, & load.
6
- # Defaults to {IProcess.serializer}.
7
- #
8
- # @yieldparam [IProcess::Channel] _self
9
- # Yields self.
10
- #
11
- def initialize(serializer = IProcess.serializer)
12
- @reader, @writer = UNIXSocket.pair :DGRAM
13
- @serializer = serializer
14
- if block_given?
15
- yield self
16
- end
17
- end
18
-
19
- #
20
- # Close the channel.
21
- #
22
- # @return [void]
23
- #
24
- def close
25
- [@reader.close,@writer.close]
26
- end
27
-
28
- #
29
- # @return [Boolean]
30
- # Returns true if the channel is closed.
31
- #
32
- def closed?
33
- @reader.closed? && @writer.closed?
34
- end
35
-
36
- #
37
- # @return [Boolean]
38
- # Returns true if the channel is open.
39
- #
40
- def open?
41
- !closed?
42
- end
43
-
44
- #
45
- # Add an object to the channel.
46
- #
47
- # @param [Object] object
48
- # An object to add to the channel.
49
- #
50
- def write object
51
- _, writable, _ = IO.select [], [@writer], [], 0.1
52
- if writable
53
- @writer.send @serializer.dump(object), 0
54
- end
55
- end
56
- alias_method :put, :write
57
-
58
- #
59
- # Receive a object from the channel.
60
- #
61
- # @return [Object]
62
- # The object added to the channel.
63
- #
64
- def recv
65
- readable, _ = IO.select [@reader], [], [], 0.1
66
- if readable
67
- msg, _ = @reader.recvmsg
68
- @serializer.load msg
69
- end
70
- end
71
- alias_method :get, :recv
72
- end