tubes 0.0.0 → 0.1.0
Sign up to get free protection for your applications and to get access to all the features.
- data/lib/tubes.rb +32 -23
- metadata +2 -2
data/lib/tubes.rb
CHANGED
@@ -35,6 +35,17 @@ class Tube
|
|
35
35
|
@invocations = 0
|
36
36
|
|
37
37
|
Dir.mkdir(@dir) unless Dir.exists?(@dir)
|
38
|
+
|
39
|
+
if @parent.nil? # This is the top level tube.
|
40
|
+
class << self
|
41
|
+
alias_method :unlocked_run, :run
|
42
|
+
def run(*args, &block)
|
43
|
+
lock
|
44
|
+
unlocked_run(*args, &block)
|
45
|
+
unlock
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|
38
49
|
end
|
39
50
|
|
40
51
|
|
@@ -48,26 +59,6 @@ class Tube
|
|
48
59
|
end
|
49
60
|
|
50
61
|
|
51
|
-
def start
|
52
|
-
lock = File.join @dir, "lock"
|
53
|
-
if !@options[:force] && File.exists?(lock)
|
54
|
-
raise "Another instance of the tubes seems to be running.\nPlease remove #{lock} if that is not the case."
|
55
|
-
end
|
56
|
-
|
57
|
-
File.open(lock, "w") do |f|
|
58
|
-
f.write $$
|
59
|
-
end
|
60
|
-
end
|
61
|
-
|
62
|
-
|
63
|
-
def finish
|
64
|
-
lock = File.join @dir, "lock"
|
65
|
-
File.delete lock
|
66
|
-
|
67
|
-
@ended_at = Time.now
|
68
|
-
end
|
69
|
-
|
70
|
-
|
71
62
|
def invoke(klass, *args)
|
72
63
|
@invocations += 1
|
73
64
|
|
@@ -85,14 +76,14 @@ class Tube
|
|
85
76
|
self.puts "Running: #{step}"
|
86
77
|
|
87
78
|
if @type == :serial
|
88
|
-
|
79
|
+
dispatch(segment, output_file, *args)
|
89
80
|
elsif @type == :parallel
|
90
81
|
thread = Thread.new(@lock) do |lock|
|
91
82
|
Thread.current[:lock] = lock
|
92
83
|
Thread.current.abort_on_exception = true
|
93
84
|
|
94
85
|
# This clobbers the @output. Perhaps make @output an array instead of a value and append to it under a lock.
|
95
|
-
|
86
|
+
dispatch(segment, output_file, *args)
|
96
87
|
end
|
97
88
|
@threads << thread
|
98
89
|
end
|
@@ -143,7 +134,7 @@ class Tube
|
|
143
134
|
# This should be implemented in the subclasses.
|
144
135
|
end
|
145
136
|
|
146
|
-
def
|
137
|
+
def dispatch(segment, output_file, *args)
|
147
138
|
output = if segment.method(:run).arity.abs > 0 # Optional arguments result in negative arity.
|
148
139
|
if args.empty?
|
149
140
|
segment.send :run, @output
|
@@ -196,4 +187,22 @@ class Tube
|
|
196
187
|
gsub(/([a-z\d])([A-Z])/,'\1_\2').
|
197
188
|
tr("-", "_").downcase
|
198
189
|
end
|
190
|
+
|
191
|
+
def lock
|
192
|
+
lock = File.join @dir, "lock"
|
193
|
+
if !@options[:force] && File.exists?(lock)
|
194
|
+
raise "Another instance of the tubes seems to be running.\nPlease remove #{lock} if that is not the case."
|
195
|
+
end
|
196
|
+
|
197
|
+
File.open(lock, "w") do |f|
|
198
|
+
f.write $$
|
199
|
+
end
|
200
|
+
end
|
201
|
+
|
202
|
+
def unlock
|
203
|
+
lock = File.join @dir, "lock"
|
204
|
+
File.delete lock
|
205
|
+
|
206
|
+
@ended_at = Time.now
|
207
|
+
end
|
199
208
|
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.
|
4
|
+
version: 0.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-09-
|
12
|
+
date: 2012-09-23 00:00:00.000000000 Z
|
13
13
|
dependencies: []
|
14
14
|
description: A simple way to build a pipeline of tasks.
|
15
15
|
email: sujoyg@gmail.com
|