lib/gush/workflow.rb in gush-0.1.1 vs lib/gush/workflow.rb in gush-0.1.2
- old
+ new
@@ -1,22 +1,18 @@
require 'securerandom'
module Gush
class Workflow
- attr_accessor :id, :jobs, :stopped, :persisted
+ attr_accessor :id, :jobs, :stopped, :persisted, :arguments
- def initialize(should_run_configure = true)
+ def initialize(*args)
@id = id
@jobs = []
@dependencies = []
@persisted = false
@stopped = false
-
- if should_run_configure
- configure
- create_dependencies
- end
+ @arguments = args
end
def self.find(id)
Gush::Client.new.find_workflow(id)
end
@@ -26,18 +22,16 @@
flow.save
flow
end
def save
- if @id.nil?
- assign_id
- end
-
+ configure(*@arguments)
+ resolve_dependencies
client.persist_workflow(self)
end
- def configure
+ def configure(*args)
end
def mark_as_stopped
@stopped = true
end
@@ -56,22 +50,22 @@
def mark_as_started
@stopped = false
end
- def create_dependencies
+ def resolve_dependencies
@dependencies.each do |dependency|
from = find_job(dependency[:from])
to = find_job(dependency[:to])
to.incoming << dependency[:from]
from.outgoing << dependency[:to]
end
end
def find_job(name)
- @jobs.find { |node| node.name == name.to_s || node.class.to_s == name.to_s }
+ jobs.find { |node| node.name == name.to_s || node.class.to_s == name.to_s }
end
def finished?
jobs.all?(&:finished?)
end
@@ -86,27 +80,33 @@
def stopped?
stopped
end
- def run(klass, deps = {})
- node = klass.new(self, name: klass.to_s)
- @jobs << node
+ def run(klass, opts = {})
+ options =
- deps_after = [*deps[:after]]
+ node = klass.new(self, {
+ name: klass.to_s,
+ params: opts.fetch(:params, {})
+ })
+
+ jobs << node
+
+ deps_after = [*opts[:after]]
deps_after.each do |dep|
@dependencies << {from: dep.to_s, to: klass.to_s }
end
- deps_before = [*deps[:before]]
+ deps_before = [*opts[:before]]
deps_before.each do |dep|
@dependencies << {from: klass.to_s, to: dep.to_s }
end
end
def reload
- self.class.find(@id)
+ self.class.find(id)
end
def initial_jobs
jobs.select(&:has_no_dependencies?)
end
@@ -136,15 +136,16 @@
def to_hash
name = self.class.to_s
{
name: name,
- id: @id,
- total: @jobs.count,
- finished: @jobs.count(&:finished?),
+ id: id,
+ arguments: @arguments,
+ total: jobs.count,
+ finished: jobs.count(&:finished?),
klass: name,
- jobs: @jobs.map(&:as_json),
+ jobs: jobs.map(&:as_json),
status: status,
stopped: stopped,
started_at: started_at,
finished_at: finished_at
}
@@ -156,14 +157,14 @@
def self.descendants
ObjectSpace.each_object(Class).select { |klass| klass < self }
end
- private
-
- def assign_id
- @id = client.next_free_id
+ def id
+ @id ||= client.next_free_id
end
+
+ private
def client
@client ||= Client.new
end