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