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