gush 0.2.2 → 0.2.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 7835f38c3775eb5e27af05891b1338fb5e8db18b
4
- data.tar.gz: d0e9dd4c0ccca28baa7ddc9517d0a40f17c34182
3
+ metadata.gz: 392530c8fb8c72de66d30d0e2dff156f7bd5981e
4
+ data.tar.gz: 96a4eb1b335d4b1927d6b10b09659197b5518bc4
5
5
  SHA512:
6
- metadata.gz: d529e5db55f76be518d6d33f528935eae41b3b4b7deb5a710792a8829186e5f21c9c6e9f43dcdcaebac7f61eaa3eb5cebafd8f84e3b0486069ff1b285ebf3f94
7
- data.tar.gz: 5b7e7a88e0db80efd590df7f8e6d8b0e407512f29bed6ee5b11728de622e28b5e46fb9c83b3fa80f325fa2511d763a305633825e2ce3c98783ccc76cbbb17412
6
+ metadata.gz: dd3deccd8c220426b730d417883cddc18a0fbf1ffac6aaa9e2406fd98b969e48a349fb2eb687769f03ae60a62aa3792f4f951b84a92bdd0c804bedc4f265a44d
7
+ data.tar.gz: 0bf46f8276ad9c1cc59104c329aa7f41e621aa0bb9ddb21ce1d0b5e0efcb76f4dcd7d0ec5c1c05363cd6868483c88b18175774881ef8004091950d929ad76eba
data/gush.gemspec CHANGED
@@ -4,7 +4,7 @@ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
4
 
5
5
  Gem::Specification.new do |spec|
6
6
  spec.name = "gush"
7
- spec.version = "0.2.2"
7
+ spec.version = "0.2.3"
8
8
  spec.authors = ["Piotrek Okoński"]
9
9
  spec.email = ["piotrek@okonski.org"]
10
10
  spec.summary = "Fast and distributed workflow runner using only Sidekiq and Redis"
data/lib/gush/cli.rb CHANGED
@@ -35,7 +35,8 @@ module Gush
35
35
  desc "start [workflow_id]", "Starts Workflow with given ID"
36
36
  def start(*args)
37
37
  id = args.shift
38
- client.start_workflow(id, args)
38
+ workflow = client.find_workflow(id)
39
+ client.start_workflow(workflow, args)
39
40
  end
40
41
 
41
42
  desc "create_and_start [WorkflowClass]", "Create and instantly start the new workflow"
@@ -21,7 +21,7 @@ module Gush
21
21
  elsif workflow.stopped?
22
22
  "stopped".red
23
23
  else
24
- running_status
24
+ "ready to start".blue
25
25
  end
26
26
  end
27
27
 
@@ -53,6 +53,7 @@ module Gush
53
53
  "Enqueued jobs" => enqueued_jobs_count.yellow,
54
54
  "Running jobs" => running_jobs_count.blue,
55
55
  "Remaining jobs" => remaining_jobs_count,
56
+ "Started at" => started_at,
56
57
  "Status" => status
57
58
  }
58
59
  end
@@ -63,6 +64,10 @@ module Gush
63
64
  status += "\n#{finished}/#{total_jobs_count} [#{(finished*100)/total_jobs_count}%]"
64
65
  end
65
66
 
67
+ def started_at
68
+ workflow.started_at.inspect
69
+ end
70
+
66
71
  def failed_status
67
72
  status = "failed".light_red
68
73
  status += "\n#{failed_job} failed"
@@ -131,7 +136,7 @@ module Gush
131
136
  end
132
137
 
133
138
  def remaining_jobs_count
134
- workflow.jobs.count{|j| [j.finished, j.failed, j.enqueued].none? }.to_s
139
+ workflow.jobs.count{|j| [j.finished?, j.failed?, j.enqueued?].none? }.to_s
135
140
  end
136
141
  end
137
142
  end
data/lib/gush/client.rb CHANGED
@@ -87,10 +87,11 @@ module Gush
87
87
  end
88
88
 
89
89
  def load_job(workflow_id, job_id)
90
+ workflow = find_workflow(workflow_id)
90
91
  data = redis.get("gush.jobs.#{workflow_id}.#{job_id}")
91
92
  return nil if data.nil?
92
93
  data = Gush::JSON.decode(data, symbolize_keys: true)
93
- Gush::Job.from_hash(nil, data)
94
+ Gush::Job.from_hash(workflow, data)
94
95
  end
95
96
 
96
97
  def destroy_workflow(workflow)
data/lib/gush/job.rb CHANGED
@@ -84,7 +84,13 @@ module Gush
84
84
  end
85
85
 
86
86
  def ready_to_start?
87
- !running? && !enqueued? && !finished? && !failed?
87
+ !running? && !enqueued? && !finished? && !failed? && parents_succeeded?
88
+ end
89
+
90
+ def parents_succeeded?
91
+ incoming.all? do |name|
92
+ @workflow.find_job(name).succeeded?
93
+ end
88
94
  end
89
95
 
90
96
  def has_no_dependencies?
data/lib/gush/workflow.rb CHANGED
@@ -71,11 +71,11 @@ module Gush
71
71
  end
72
72
 
73
73
  def started?
74
- @stopped == false
74
+ !!started_at
75
75
  end
76
76
 
77
77
  def running?
78
- !finished?
78
+ started? && !finished?
79
79
  end
80
80
 
81
81
  def failed?
@@ -5,7 +5,6 @@ describe "Workflows" do
5
5
  it "marks workflow as completed" do
6
6
  flow = TestWorkflow.create
7
7
  flow.start!
8
- expect(flow.reload).to be_running
9
8
 
10
9
  Gush::Worker.drain
11
10
 
@@ -28,7 +27,7 @@ describe "Workflows" do
28
27
  expect(Gush::Worker).to have_jobs(flow.id, ["FetchSecondJob", "PersistFirstJob"])
29
28
 
30
29
  Gush::Worker.perform_one
31
- expect(Gush::Worker).to have_jobs(flow.id, ["PersistFirstJob", "NormalizeJob"])
30
+ expect(Gush::Worker).to have_jobs(flow.id, ["PersistFirstJob"])
32
31
 
33
32
  Gush::Worker.perform_one
34
33
  expect(Gush::Worker).to have_jobs(flow.id, ["NormalizeJob"])
@@ -203,7 +203,7 @@ describe Gush::Workflow do
203
203
  describe "#running?" do
204
204
  context "when no enqueued or running jobs" do
205
205
  it "returns false" do
206
- expect(subject.running?).to be_truthy
206
+ expect(subject.running?).to be_falsy
207
207
  end
208
208
  end
209
209
 
data/spec/spec_helper.rb CHANGED
@@ -21,9 +21,10 @@ class TestWorkflow < Gush::Workflow
21
21
  run NormalizeJob
22
22
 
23
23
  run FetchFirstJob, after: Prepare
24
+ run FetchSecondJob, after: Prepare, before: NormalizeJob
25
+
24
26
  run PersistFirstJob, after: FetchFirstJob, before: NormalizeJob
25
27
 
26
- run FetchSecondJob, after: Prepare, before: NormalizeJob
27
28
  end
28
29
  end
29
30
 
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: gush
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.2
4
+ version: 0.2.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Piotrek Okoński
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-09-15 00:00:00.000000000 Z
11
+ date: 2015-09-21 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: sidekiq