lib/rbbt/util/workflow.rb in rbbt-util-3.2.0 vs lib/rbbt/util/workflow.rb in rbbt-util-3.2.1
- old
+ new
@@ -3,16 +3,33 @@
require 'rbbt/util/persistence'
require 'rbbt/util/misc'
module WorkFlow
- def self.require_workflow(path)
- if Rbbt.etc.workflow_dir.exists?
- require Dir.glob(File.join(Rbbt.etc.workflow_dir.read.strip, '*', path + '.rb')).first
- else
- require Dir.glob(File.join(Rbbt.share.workflows.find, '*', path + '.rb')).first
+ def self.require_workflow(wf_name, wf_dir = nil)
+
+ if File.exists? wf_name
+ require "./workflow.rb"
+ return
end
+
+ wf_dir ||= case
+ when File.exists?(File.join(File.dirname(Resource.caller_lib_dir), wf_name))
+ File.join(File.dirname(Resource.caller_lib_dir), wf_name)
+ when defined? Rbbt
+ if Rbbt.pkg.etc.workflow_dir.exists?
+ File.join(pkg.etc.workflow_dir.read.strip, wf_name)
+ else
+ Rbbt.workflows[wf_name]
+ end
+ else
+ File.join(ENV["HOME"], '.workflows')
+ end
+
+ wf_dir = Resource::Path.path(wf_dir)
+ $LOAD_PATH.unshift(File.join(File.dirname(wf_dir["workflow.rb"].find), 'lib'))
+ require wf_dir["workflow.rb"].find
end
def self.extended(base)
class << base
attr_accessor :tasks, :jobdir, :dangling_options, :dangling_option_descriptions,
@@ -72,13 +89,13 @@
end
def process_dangling
res = [
@dangling_options,
- Hash[*@dangling_options.zip(@dangling_option_descriptions.values_at(*@dangling_options)).flatten],
- Hash[*@dangling_options.zip(@dangling_option_types.values_at(*@dangling_options)).flatten],
- Hash[*@dangling_options.zip(@dangling_option_defaults.values_at(*@dangling_options)).flatten],
+ Misc.merge2hash(@dangling_options, @dangling_option_descriptions.values_at(*@dangling_options)),
+ Misc.merge2hash(@dangling_options, @dangling_option_types.values_at(*@dangling_options)),
+ Misc.merge2hash(@dangling_options, @dangling_option_defaults.values_at(*@dangling_options)),
(@dangling_dependencies || [@last_task]).compact,
@dangling_description,
]
clear_dangling
@@ -101,9 +118,10 @@
tasks[name] = task
@last_task = task
end
def job(task, jobname = "Default", *args)
+ raise "Task '#{ task }' unkown" if tasks[task].nil?
tasks[task].job(jobname, *args)
end
def run(*args)
job(*args).run