gush 0.1.2 → 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 5f2be71d1a76f021091ae90270ea5f01a2413ae0
4
- data.tar.gz: c4160594dd6ad163239548623a7e67b29aa1727c
3
+ metadata.gz: 684995dea63d846e4b58504b9d1fdf3b386ca2af
4
+ data.tar.gz: b52e1adc2ebb098de804028dc0d7d70ee38e548e
5
5
  SHA512:
6
- metadata.gz: 271ac326d01d2dafd4c0092e3011a5d57206b988bfc7e5e62e375b913bcb2e8750440058e07a58d60663446fc7b7254f2b91a39ed6d038976995dccc3af0952b
7
- data.tar.gz: a28e4ef3338b305523e7d7d275aa6d3e357ddfe5161aaef95e323b12268a301c8d59352f12c68c445392df613c29ae11f38079a6838006c3ca2920c32ce418ad
6
+ metadata.gz: 9ad6ed4b35110be871cdbb82d5e6058a2debdf416866d02fd4d93ecd3e7c782c5e5ad9c93823341aa0f1a68ade9b3af8cb6d9bf39c20f7211e8b75ebb1ae8c97
7
+ data.tar.gz: 8bd0060a367a3e4b27787add32210ac27fe75fe982f958043d053f2bde5dcc190a276fecc1d8f26cbe11cfa5a412112bbbd539cf662fb92a30eb9c2ce51a5e14
@@ -1,4 +1,4 @@
1
- Copyright (c) 2014 Piotrek Okoński
1
+ Copyright (c) 2015 Chaps sp. z o.o.
2
2
 
3
3
  MIT License
4
4
 
data/README.md CHANGED
@@ -63,7 +63,7 @@ For the Workflow above, the graph will look like this:
63
63
  You can pass any primitive arguments into jobs while defining your workflow:
64
64
 
65
65
  ```ruby
66
- # workflows/sample_workflow.rb
66
+ # app/workflows/sample_workflow.rb
67
67
  class SampleWorkflow < Gush::Workflow
68
68
  def configure
69
69
  run FetchJob1, params: { url: "http://some.com/url" }
@@ -78,7 +78,8 @@ See below to learn how to access those params inside your job.
78
78
  Jobs are classes inheriting from `Gush::Job`:
79
79
 
80
80
  ```ruby
81
- class FetchJob1 < Gush::Job
81
+ # app/jobs/fetch_job.rb
82
+ class FetchJob < Gush::Job
82
83
  def work
83
84
  # do some fetching from remote APIs
84
85
 
@@ -97,7 +98,7 @@ Workflows can accept any primitive arguments in their constructor, which then wi
97
98
  Here's an example of a workflow responsible for publishing a book:
98
99
 
99
100
  ```ruby
100
- # workflows/sample_workflow.rb
101
+ # app/workflows/sample_workflow.rb
101
102
  class PublishBookWorkflow < Gush::Workflow
102
103
  def configure(url, isbn)
103
104
  run FetchBook, params: { url: url }
@@ -182,7 +183,7 @@ end
182
183
  `payloads` is a hash containing outputs from all parent jobs, where job class names are the keys.
183
184
 
184
185
  **Note:** `payloads` will only contain outputs of the job's ancestors. So if job `A` depends on `B` and `C`,
185
- the `paylods` hash will look like this:
186
+ the `payloads` hash will look like this:
186
187
 
187
188
  ```ruby
188
189
  {
@@ -199,7 +200,7 @@ the `paylods` hash will look like this:
199
200
  ```ruby
200
201
  flow.reload
201
202
  flow.status
202
- #=> :running|:pending|:finished|:failed
203
+ #=> :running|:finished|:failed
203
204
  ```
204
205
 
205
206
  `reload` is needed to see the latest status, since workflows are updated asynchronously.
@@ -239,7 +240,7 @@ end
239
240
 
240
241
  ## Contributing
241
242
 
242
- 1. Fork it ( http://github.com/pokonski/gush/fork )
243
+ 1. Fork it ( http://github.com/chaps-io/gush/fork )
243
244
  2. Create your feature branch (`git checkout -b my-new-feature`)
244
245
  3. Commit your changes (`git commit -am 'Add some feature'`)
245
246
  4. Push to the branch (`git push origin my-new-feature`)
@@ -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.1.2"
7
+ spec.version = "0.2.0"
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"
@@ -126,7 +126,7 @@ module Gush
126
126
  end
127
127
 
128
128
  def gushfile
129
- Pathname.pwd.join(options[:gushfile])
129
+ Gush.configuration.gushfile
130
130
  end
131
131
 
132
132
  def load_gushfile
@@ -21,7 +21,7 @@ module Gush
21
21
  elsif workflow.stopped?
22
22
  "stopped".red
23
23
  else
24
- "pending".light_white
24
+ running_status
25
25
  end
26
26
  end
27
27
 
@@ -60,23 +60,27 @@ module Gush
60
60
  end
61
61
 
62
62
  def enqueued?
63
- !!enqueued_at
63
+ !enqueued_at.nil?
64
64
  end
65
65
 
66
66
  def finished?
67
- !!finished_at
67
+ !finished_at.nil?
68
68
  end
69
69
 
70
70
  def failed?
71
- !!failed_at
71
+ !failed_at.nil?
72
72
  end
73
73
 
74
74
  def succeeded?
75
75
  finished? && !failed?
76
76
  end
77
77
 
78
+ def started?
79
+ !started_at.nil?
80
+ end
81
+
78
82
  def running?
79
- !!started_at && !finished?
83
+ started? && !finished?
80
84
  end
81
85
 
82
86
  def ready_to_start?
@@ -70,8 +70,12 @@ module Gush
70
70
  jobs.all?(&:finished?)
71
71
  end
72
72
 
73
+ def started?
74
+ @stopped == false
75
+ end
76
+
73
77
  def running?
74
- !stopped? && jobs.any? {|j| j.enqueued? || j.running? }
78
+ !finished?
75
79
  end
76
80
 
77
81
  def failed?
@@ -122,7 +126,7 @@ module Gush
122
126
  when stopped?
123
127
  :stopped
124
128
  else
125
- :pending
129
+ :running
126
130
  end
127
131
  end
128
132
 
@@ -174,7 +178,7 @@ module Gush
174
178
  end
175
179
 
176
180
  def last_job
177
- jobs.max_by{ |n| n.finished_at || 0 } if jobs.all?(&:finished?)
181
+ jobs.max_by{ |n| n.finished_at || 0 } if finished?
178
182
  end
179
183
  end
180
184
  end
@@ -1,7 +1,20 @@
1
1
  require 'spec_helper'
2
2
 
3
-
4
3
  describe "Workflows" do
4
+ context "when all jobs finish successfuly" do
5
+ it "marks workflow as completed" do
6
+ flow = TestWorkflow.create
7
+ flow.start!
8
+ expect(flow.reload).to be_running
9
+
10
+ Gush::Worker.drain
11
+
12
+ flow = flow.reload
13
+ expect(flow).to be_finished
14
+ expect(flow).to_not be_failed
15
+ end
16
+ end
17
+
5
18
  it "runs the whole workflow in proper order" do
6
19
  flow = TestWorkflow.create
7
20
  flow.start!
@@ -23,10 +36,6 @@ describe "Workflows" do
23
36
  Gush::Worker.perform_one
24
37
 
25
38
  expect(Gush::Worker.jobs).to be_empty
26
-
27
- flow = flow.reload
28
- expect(flow).to be_finished
29
- expect(flow).to_not be_failed
30
39
  end
31
40
 
32
41
  it "passes payloads down the workflow" do
@@ -73,7 +73,7 @@ describe Gush::Workflow do
73
73
  "id" => an_instance_of(String),
74
74
  "name" => klass.to_s,
75
75
  "klass" => klass.to_s,
76
- "status" => "pending",
76
+ "status" => "running",
77
77
  "total" => 2,
78
78
  "finished" => 0,
79
79
  "started_at" => nil,
@@ -203,13 +203,6 @@ 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_falsy
207
- end
208
- end
209
-
210
- context "when some jobs are enqueued" do
211
- it "returns true" do
212
- subject.find_job('Prepare').enqueue!
213
206
  expect(subject.running?).to be_truthy
214
207
  end
215
208
  end
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.1.2
4
+ version: 0.2.0
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-07-22 00:00:00.000000000 Z
11
+ date: 2015-09-14 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: sidekiq