tubes 0.1.2 → 0.1.3

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.
Files changed (2) hide show
  1. data/lib/tubes.rb +29 -22
  2. metadata +3 -3
data/lib/tubes.rb CHANGED
@@ -15,7 +15,7 @@ class Tube
15
15
  def initialize(dir=nil, options={})
16
16
  @dir = dir || File.join('/tmp', Time.now.strftime('%Y-%m-%d_%H:%M:%S'))
17
17
  @type = options[:type] || :serial
18
- @parent = options[:parent] # This is nil only for the top level tube.
18
+ @parent = options[:parent] # This is nil only for the top level tube.
19
19
  @serial_count = 0
20
20
  @parallel_count = 0
21
21
 
@@ -36,15 +36,16 @@ class Tube
36
36
 
37
37
  Dir.mkdir(@dir) unless Dir.exists?(@dir)
38
38
 
39
- if @parent.nil? # This is the top level tube.
39
+ if @parent.nil? # This is the top level tube.
40
40
  class << self
41
41
  alias_method :unlocked_run, :run
42
- def run(*args, &block)
43
- lock
44
- unlocked_run(*args, &block)
45
- unlock
46
- notify
47
- end
42
+
43
+ def run(*args, &block)
44
+ lock
45
+ unlocked_run(*args, &block)
46
+ unlock
47
+ notify
48
+ end
48
49
  end
49
50
  end
50
51
  end
@@ -82,7 +83,6 @@ class Tube
82
83
  Thread.current[:lock] = lock
83
84
  Thread.current.abort_on_exception = true
84
85
 
85
- # This clobbers the @output. Perhaps make @output an array instead of a value and append to it under a lock.
86
86
  dispatch(segment, output_file, *args)
87
87
  end
88
88
  @threads << thread
@@ -96,9 +96,9 @@ class Tube
96
96
  def puts(string="")
97
97
  @thread_lock.synchronize do
98
98
  if self.class == Tube
99
- Kernel.puts "\033[32m[#{@order}]\033[0m #{string}"
99
+ Kernel.puts "\033[32m[#{@order}]\033[0m #{string}"
100
100
  else
101
- Kernel.puts "\033[32m[#{@order}]\033[0m\033[36m[#{@name}]\033[0m #{string}"
101
+ Kernel.puts "\033[32m[#{@order}]\033[0m\033[36m[#{@name}]\033[0m #{string}"
102
102
  end
103
103
 
104
104
  STDOUT.flush
@@ -115,13 +115,20 @@ class Tube
115
115
  thread = Thread.new(@thread_lock) do |lock|
116
116
  Thread.current[:lock] = lock
117
117
  Thread.current.abort_on_exception = true
118
- child(mode, args).instance_eval &block
118
+
119
+ tube = child(mode, args)
120
+ tube.instance_eval &block
121
+ tube.threads.each { |thread| thread.join } # Could be a parallel block inside a parallel block.
122
+ @thread_lock.synchronize do
123
+ @output << mode == :parallel ? tube.output.flatten(1) : tube.output
124
+ end
119
125
  end
120
126
  @threads << thread
121
127
  when :serial # When inside serial.
122
128
  tube = child(mode, args)
123
129
  tube.instance_eval &block
124
130
  tube.threads.each { |thread| thread.join }
131
+ @output = mode == :parallel ? tube.output.flatten(1) : tube.output
125
132
  end
126
133
  rescue => e
127
134
  @exception = e
@@ -170,22 +177,22 @@ class Tube
170
177
  output = args || @output
171
178
 
172
179
  order = case type
173
- when :serial
174
- @serial_count += 1
175
- "#{@order}S#{@serial_count}"
176
- when :parallel
177
- @parallel_count += 1
178
- "#{@order}P#{@parallel_count}"
179
- end
180
+ when :serial
181
+ @serial_count += 1
182
+ "#{@order}S#{@serial_count}"
183
+ when :parallel
184
+ @parallel_count += 1
185
+ "#{@order}P#{@parallel_count}"
186
+ end
180
187
 
181
188
  Tube.new(@dir, :type => type, :output => output, :parent => self, :order => order, :started_at => started_at)
182
189
  end
183
190
 
184
191
  def underscore(string)
185
192
  string.gsub(/::/, '/').
186
- gsub(/([A-Z]+)([A-Z][a-z])/,'\1_\2').
187
- gsub(/([a-z\d])([A-Z])/,'\1_\2').
188
- tr("-", "_").downcase
193
+ gsub(/([A-Z]+)([A-Z][a-z])/, '\1_\2').
194
+ gsub(/([a-z\d])([A-Z])/, '\1_\2').
195
+ tr("-", "_").downcase
189
196
  end
190
197
 
191
198
  def lock
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: tubes
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.2
4
+ version: 0.1.3
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-09-24 00:00:00.000000000 Z
12
+ date: 2012-09-29 00:00:00.000000000 Z
13
13
  dependencies: []
14
14
  description: A simple way to build a pipeline of tasks. These tasks can be configured
15
15
  to run in serial, parallel or any combination thereof.
@@ -39,7 +39,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
39
39
  version: '0'
40
40
  requirements: []
41
41
  rubyforge_project:
42
- rubygems_version: 1.8.17
42
+ rubygems_version: 1.8.24
43
43
  signing_key:
44
44
  specification_version: 3
45
45
  summary: Tubes