barney 0.13.0 → 0.14.0

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/ChangeLog CHANGED
@@ -1,62 +1,76 @@
1
+ 2011-05-23 Robert Gleeson <rob@flowof.info>
2
+
3
+ * lib/barney.rb:
4
+ Release 0.14.0
5
+
6
+ * lib/barney.rb lib/barney/emptystate.rb test/suite/lib/barney.rb:
7
+ Add magic "Barney" method.
8
+
9
+ 2011-05-12 Robert Gleeson <rob@flowof.info>
10
+
11
+ * lib/barney/share.rb:
12
+ Barney::Share#unshare no longer removes streams from @shared.
13
+ This means a variable stops being shared at the next call Share#fork.
14
+
1
15
  2011-05-09 Robert Gleeson <rob@flowof.info>
2
16
 
17
+ * README.md lib/barney.rb:
18
+ Release 0.13.0
19
+
3
20
  * LICENSE README.md:
4
- Change license from Lesser GPL(LGPL) to the MIT license.
5
- See LICENSE for details.
21
+ Change license from Lesser GPL(LGPL) to the MIT license.
22
+ See LICENSE for details.
6
23
 
7
24
  2011-05-03 Robert Gleeson <rob@flowof.info>
8
25
 
9
- * lib/barney.rb README.md ChangeLog:
10
- Release 0.12.0
26
+ * lib/barney.rb README.md:
27
+ Release 0.12.0
11
28
 
12
- * lib/barney.rb Rakefile.rb:
13
- Add support for 1.8.7
29
+ * lib/barney.rb Rakefile.rb:
30
+ Add support for 1.8.7
14
31
 
15
- * lib/barney.rb README.md ChangeLog:
16
- Release 0.11.0
32
+ * lib/barney.rb README.md:
33
+ Release 0.11.0
17
34
 
18
35
  * lib/barney/share.rb:
19
- Rename @context to @scope.
36
+ Rename @context to @scope.
20
37
 
21
38
  * lib/barney/share.rb:
22
- Add Barney::Share#wait_all.
39
+ Add Barney::Share#wait_all.
23
40
 
24
41
  * test/suite/lib/barney.rb:
25
- Add test suite for the 'Barney' module.
26
-
27
- * lib/barney.rb:
28
- Document Barney.method_missing, and Barney.respond_to?
42
+ Add test suite for the 'Barney' module.
29
43
 
30
44
  * lib/barney.rb:
31
- Add Barney.respond_to?
45
+ Document Barney.method_missing, and Barney.respond_to?
32
46
 
33
- * ChangeLog:
34
- Record Releases.
47
+ * lib/barney.rb:
48
+ Add Barney.respond_to?
35
49
 
36
50
  * lib/barney/share.rb:
37
- Remove Barney::Share#spawn_pipes (private method).
51
+ Remove Barney::Share#spawn_pipes (private method).
38
52
 
39
- * lib/barney.rb README.md ChangeLog:
40
- Release 0.10.1
53
+ * lib/barney.rb README.md:
54
+ Release 0.10.1
41
55
 
42
56
  * lib/barney/share.rb:
43
- Fix a bug where Barney::Share#history could return unordered/incorrect data
44
- when subprocesses are spawned in parallel.
57
+ Fix a bug where Barney::Share#history could return unordered/incorrect data
58
+ when subprocesses are spawned in parallel.
45
59
 
46
60
 
47
61
  2011-04-23 Robert Gleeson <rob@flowof.info>
48
62
 
49
63
  * lib/barney.rb README.md:
50
- Release 0.10.0
64
+ Release 0.10.0
51
65
 
52
66
  * lib/barney.rb:
53
- Add Barney.method_missing …
54
- Messages are passed onto an instance of Barney::Share.
67
+ Add Barney.method_missing …
68
+ Messages are passed onto an instance of Barney::Share.
55
69
 
56
70
  * lib/barney.rb README.md:
57
- Release 0.9.1
71
+ Release 0.9.1
58
72
 
59
73
  * lib/barney/share.rb:
60
- Fix a bug where Barney::Share#share could return nil.
61
- If there were no duplicates in @variables, `nil` would be returned.
74
+ Fix a bug where Barney::Share#share could return nil.
75
+ If there were no duplicates in @variables, `nil` would be returned.
62
76
 
data/README.md CHANGED
@@ -3,6 +3,9 @@
3
3
  Barney makes sharing data between processes easy and natural by providing a simple and easy to use DSL.
4
4
  Barney is supported on any Ruby implementation that supports 1.8.7+, 1.9.1+, and that implements `Kernel.fork`.
5
5
 
6
+ If you're looking for a library to do parallel jobs, check out [Parallel](https://github.com/grosser/parallel).
7
+ While possible in Barney, it was never a design goal and I'd definitely recommend you check out _Parallel_ instead.
8
+
6
9
  Limitations
7
10
  -----------
8
11
 
@@ -19,43 +22,61 @@ Limitations
19
22
  Usage
20
23
  -----
21
24
 
25
+ __Magic "Barney" method__
26
+
22
27
  #!/usr/bin/env ruby
28
+ # Magic "Barney" method
23
29
  require 'barney'
24
30
 
25
- Barney.share :name
26
- name = 'Robert'
31
+ Barney do
32
+ name = "Robert"
33
+ share :name
27
34
 
28
- pid = Barney.fork do
29
- name.slice! 0..2
35
+ fork do
36
+ name.slice! 3..5
37
+ end
30
38
  end
31
39
 
32
- Process.wait pid
33
- Barney.sync
40
+ p name # "Rob"
34
41
 
35
- puts name # "Rob"
42
+ __Barney module__
36
43
 
37
- * _More!_
38
- Check out the [samples](https://github.com/robgleeson/barney/tree/master/samples) directory or if you're looking
39
- for precise and detailed info, check out the API docs.
44
+ #!/usr/bin/env ruby
45
+ # Barney module sample
46
+ # Messages are forwarded onto a single instance of Barney::Share.
47
+ require 'barney'
40
48
 
41
- * _Notes!_
42
- It's worth mentioning that the _Barney_ module is passing method calls to an instance of _Barney::Share_,
43
- where the DSL is implemented. If you prefer, or your situation requires, feel free to create instance(s) of
44
- _Barney::Share_ yourself.
49
+ Barney.share :name
50
+
51
+ Barney.fork do
52
+ name.slice! 3..5
53
+ end
54
+
55
+ Barney.wait_all
56
+ Barney.sync
45
57
 
58
+ p name # "Rob"
46
59
 
60
+ * _More!_
61
+ Check out the [samples](https://github.com/robgleeson/barney/tree/master/samples) directory.
62
+ Check out the API docs, too.
63
+
64
+ * _Notes_
65
+ The DSL is implemented in _Barney::Share_.
66
+ You can create instances of(or subclasses) of _Barney::Share_ if you need to.
67
+
47
68
  Documentation
48
69
  --------------
49
70
 
50
71
  **API**
51
72
 
52
73
  * [master (git)](http://rubydoc.info/github/robgleeson/barney/master/)
74
+ * [0.14.0](http://rubydoc.info/gems/barney/0.14.0/)
53
75
  * [0.13.0](http://rubydoc.info/gems/barney/0.13.0/)
54
76
  * [0.12.0](http://rubydoc.info/gems/barney/0.12.0/)
55
77
  * [0.11.0](http://rubydoc.info/gems/barney/0.11.0/)
56
78
  * [0.10.1](http://rubydoc.info/gems/barney/0.10.1/)
57
79
  * [0.10.0](http://rubydoc.info/gems/barney/0.10.0/)
58
- * [0.9.1](http://rubydoc.info/gems/barney/0.9.1/)
59
80
  * …
60
81
 
61
82
 
@@ -80,8 +101,7 @@ License
80
101
  --------
81
102
 
82
103
  Barney is released under the [_MIT License_](http://en.wikipedia.org/wiki/MIT_License).
83
- See [LICENSE](http://github.com/robgleeson/barney/blob/master/README.md) for details.
84
-
85
- Prior to 0.13.0, Barney was released under the Lesser GPL(LGPL).
104
+ See [LICENSE](http://github.com/robgleeson/barney/blob/master/README.md) for details!
105
+ All versions before 0.13.0 are Lesser GPL(LGPL) licensed.
86
106
 
87
107
 
@@ -0,0 +1,26 @@
1
+ module Barney
2
+
3
+ class EmptyState
4
+ attr_reader :__barney__
5
+
6
+ Barney::Share.instance_methods(false).each do |meth|
7
+ define_method meth do |*args, &block|
8
+ @__barney__.send meth, *args, &block
9
+ end
10
+
11
+ undef_method :fork
12
+
13
+ define_method :fork do |*args, &block|
14
+ @__barney__.send :fork, *args, &block
15
+ @__barney__.sync
16
+ end
17
+ end
18
+
19
+ def initialize
20
+ @__barney__ = Barney::Share.new
21
+ end
22
+
23
+ end
24
+
25
+ end
26
+
data/lib/barney/share.rb CHANGED
@@ -64,20 +64,14 @@ module Barney
64
64
  # @param [Symbol, #to_sym] Variable Accepts the name(s) of the variables or constants you want to stop sharing.
65
65
  # @return [Array<Symbol>] Returns a list of the variables that are still being shared.
66
66
  def unshare *variables
67
- variables.each do |variable|
68
- variable = variable.to_sym
69
- @streams.delete_if { |stream| stream.variable == variable }
70
- @variables.delete variable
71
- end
67
+ variables.each { |variable| @variables.delete variable.to_sym }
72
68
  @variables
73
69
  end
74
70
 
75
71
  # Collect the status of all subprocesses spawned by a {Barney::Share Barney::Share} instance.
76
72
  # @return [void]
77
73
  def wait_all
78
- @pids.each do |pid|
79
- Process.wait pid
80
- end
74
+ @pids.each { |pid| Process.wait pid }
81
75
  @pids.clear
82
76
  end
83
77
 
@@ -91,20 +85,20 @@ module Barney
91
85
  raise ArgumentError, "A block or Proc object is expected" unless block_given?
92
86
  @scope = block.binding
93
87
 
94
- tmp_streams = Array.new @variables.size do |index|
88
+ streams = Array.new @variables.size do |index|
95
89
  StreamPair.new @variables[index], *IO.pipe
96
90
  end
97
91
 
98
92
  @pid = Kernel.fork do
99
93
  block.call
100
- tmp_streams.each do |stream|
94
+ streams.each do |stream|
101
95
  stream.in.close
102
96
  stream.out.write Marshal.dump(@scope.eval("#{stream.variable}"))
103
97
  stream.out.close
104
98
  end
105
99
  end
106
100
 
107
- @streams.push *tmp_streams
101
+ @streams.push *streams
108
102
  @pids.push @pid
109
103
  @pid
110
104
  end
data/lib/barney.rb CHANGED
@@ -1,9 +1,10 @@
1
1
  require 'thread'
2
2
  require 'barney/share'
3
+ require 'barney/emptystate'
3
4
 
4
5
  module Barney
5
6
 
6
- VERSION = '0.13.0'
7
+ VERSION = '0.14.0'
7
8
  @proxy = Barney::Share.new
8
9
 
9
10
  class << self
@@ -31,3 +32,28 @@ module Barney
31
32
  end
32
33
 
33
34
  end
35
+
36
+ # Evaluates a block with access to all the methods available to a {Barney::Share Barney::Share} instance.
37
+ # Collecting the status of subprocesses and {Barney::Share#sync synchronization} is handled for you.
38
+ #
39
+ # @example
40
+ # name = "Robert"
41
+ #
42
+ # Barney do
43
+ # share :name
44
+ #
45
+ # fork do
46
+ # name.slice! 0..2
47
+ # end
48
+ # end
49
+ #
50
+ # p name # "Rob"
51
+ #
52
+ # @raise [ArgumentError] If no block is supplied.
53
+ # @return [void]
54
+ def Barney &block
55
+ raise ArgumentError, "Block expected" unless block_given?
56
+ emptystate = Barney::EmptyState.new
57
+ emptystate.instance_eval &block
58
+ emptystate.__barney__.wait_all
59
+ end
@@ -0,0 +1,17 @@
1
+ #!/usr/bin/env ruby
2
+ #
3
+ # Barney module sample
4
+ # Messages are forwarded onto a single instance of Barney::Share.
5
+
6
+ require 'barney'
7
+
8
+ Barney.share :name
9
+
10
+ Barney.fork do
11
+ name.slice! 3..5
12
+ end
13
+
14
+ Barney.wait_all
15
+ Barney.sync
16
+
17
+ p name # "Rob"
@@ -0,0 +1,14 @@
1
+ #!/usr/bin/env ruby
2
+ #
3
+ # Magic "Barney" method
4
+
5
+ require 'barney'
6
+
7
+ Barney do
8
+ name = "Robert"
9
+ share :name
10
+
11
+ fork do
12
+ name.slice! 3..5
13
+ end
14
+ end
@@ -27,17 +27,6 @@ describe Barney::Share do
27
27
  assert_equal true, @instance.variables.empty?
28
28
  end
29
29
 
30
- it 'should assert a shared variable is removed from @shared' do
31
- x = 5
32
- @instance.share :x
33
- @instance.fork { }
34
- assert_equal :x, @instance.instance_variable_get(:@streams).first.variable
35
-
36
- @instance.unshare :x
37
- @instance.fork { }
38
- assert_equal true, @instance.instance_variable_get(:@streams).empty?
39
- end
40
-
41
30
  end
42
31
 
43
32
  end
@@ -8,3 +8,19 @@ describe 'Barney' do
8
8
  end
9
9
 
10
10
  end
11
+
12
+ describe '#Barney' do
13
+
14
+ it 'should..' do
15
+ name = 'Robert'
16
+
17
+ Barney do
18
+ share :name
19
+ fork { name.slice! 3..5 }
20
+ fork { name.slice! 1..2 }
21
+ end
22
+
23
+ assert_equal "R", name
24
+ end
25
+
26
+ end
metadata CHANGED
@@ -2,7 +2,7 @@
2
2
  name: barney
3
3
  version: !ruby/object:Gem::Version
4
4
  prerelease:
5
- version: 0.13.0
5
+ version: 0.14.0
6
6
  platform: ruby
7
7
  authors:
8
8
  - Robert Gleeson
@@ -10,7 +10,7 @@ autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
12
 
13
- date: 2011-05-09 00:00:00 +01:00
13
+ date: 2011-05-23 00:00:00 +01:00
14
14
  default_executable:
15
15
  dependencies:
16
16
  - !ruby/object:Gem::Dependency
@@ -50,6 +50,9 @@ files:
50
50
  - README.md
51
51
  - ChangeLog
52
52
  - .gemtest
53
+ - samples/barney_module.rb
54
+ - samples/magic_barney_method.rb
55
+ - lib/barney/emptystate.rb
53
56
  - lib/barney/share.rb
54
57
  - lib/barney.rb
55
58
  - test/suite/lib/barney/share#fork.rb