tubes 0.1.8 → 0.1.9
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/lib/tubes.rb +26 -11
- metadata +2 -2
data/lib/tubes.rb
CHANGED
@@ -13,8 +13,11 @@ class Tube
|
|
13
13
|
attr :thread_lock
|
14
14
|
attr :threads
|
15
15
|
|
16
|
-
def initialize(
|
17
|
-
|
16
|
+
def initialize(*args)
|
17
|
+
options = args.last.is_a?(Hash) ? args.pop : {}
|
18
|
+
dir = args.first
|
19
|
+
|
20
|
+
@dir = dir
|
18
21
|
@type = options.delete(:type) || :serial
|
19
22
|
@parent = options.delete(:parent) # This is nil only for the top level tube.
|
20
23
|
|
@@ -38,7 +41,9 @@ class Tube
|
|
38
41
|
@started_at = options[:started_at] || Time.now
|
39
42
|
@invocations = 0
|
40
43
|
|
41
|
-
|
44
|
+
unless @dir.nil?
|
45
|
+
Dir.mkdir(@dir) unless Dir.exists?(@dir)
|
46
|
+
end
|
42
47
|
|
43
48
|
if @parent.nil? # This is the top level tube.
|
44
49
|
class << self
|
@@ -74,7 +79,7 @@ class Tube
|
|
74
79
|
step = segment.name
|
75
80
|
|
76
81
|
output_file = segment_cache self, step
|
77
|
-
if File.exists?(output_file)
|
82
|
+
if output_file && File.exists?(output_file)
|
78
83
|
self.puts "Skipping: #{step}"
|
79
84
|
output = JSON.load(File.read(output_file))["data"]
|
80
85
|
|
@@ -165,6 +170,10 @@ class Tube
|
|
165
170
|
# This should be implemented in the subclasses.
|
166
171
|
end
|
167
172
|
|
173
|
+
def run
|
174
|
+
# This should be implemented in the subclasses.
|
175
|
+
end
|
176
|
+
|
168
177
|
def dispatch(segment, output_file, *args)
|
169
178
|
output = if segment.method(:run).arity > 0 # Optional arguments result in negative arity.
|
170
179
|
if args.empty?
|
@@ -190,8 +199,10 @@ class Tube
|
|
190
199
|
segment.send :run
|
191
200
|
end
|
192
201
|
|
193
|
-
|
194
|
-
|
202
|
+
if output_file
|
203
|
+
File.open(output_file, "w") do |f|
|
204
|
+
f.write({:data => output}.to_json)
|
205
|
+
end
|
195
206
|
end
|
196
207
|
|
197
208
|
if serial?
|
@@ -205,7 +216,7 @@ class Tube
|
|
205
216
|
|
206
217
|
|
207
218
|
def segment_cache(tube, segment)
|
208
|
-
File.join
|
219
|
+
File.join(tube.dir, "#{tube.order}-#{@invocations}-#{segment}.json") if tube.dir
|
209
220
|
end
|
210
221
|
|
211
222
|
|
@@ -229,19 +240,23 @@ class Tube
|
|
229
240
|
end
|
230
241
|
|
231
242
|
def lock
|
232
|
-
|
243
|
+
return if @dir.nil?
|
244
|
+
|
245
|
+
lock = File.join @dir, 'lock'
|
233
246
|
if !@options[:force] && File.exists?(lock)
|
234
247
|
raise "Another instance of the tubes seems to be running.\nPlease remove #{lock} if that is not the case."
|
235
248
|
end
|
236
249
|
|
237
|
-
File.open(lock,
|
250
|
+
File.open(lock, 'w') do |f|
|
238
251
|
f.write $$
|
239
252
|
end
|
240
253
|
end
|
241
254
|
|
242
255
|
def unlock
|
243
|
-
|
244
|
-
|
256
|
+
unless @dir.nil?
|
257
|
+
lock = File.join @dir, 'lock'
|
258
|
+
File.delete lock
|
259
|
+
end
|
245
260
|
|
246
261
|
@ended_at = Time.now
|
247
262
|
end
|
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.
|
4
|
+
version: 0.1.9
|
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-
|
12
|
+
date: 2012-10-08 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.
|