state_machine_job 0.0.5
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 +15 -0
- data/.gitignore +17 -0
- data/.travis.yml +4 -0
- data/Gemfile +4 -0
- data/LICENSE.txt +22 -0
- data/README.md +98 -0
- data/Rakefile +1 -0
- data/lib/state_machine_job.rb +37 -0
- data/lib/state_machine_job/macro.rb +56 -0
- data/lib/state_machine_job/version.rb +3 -0
- data/spec/spec_helper.rb +10 -0
- data/spec/state_machine_job/macro_spec.rb +148 -0
- data/spec/state_machine_job_spec.rb +86 -0
- data/spec/support/setup_resque_logger.rb +11 -0
- data/state_machine_job.gemspec +30 -0
- metadata +187 -0
checksums.yaml
ADDED
@@ -0,0 +1,15 @@
|
|
1
|
+
---
|
2
|
+
!binary "U0hBMQ==":
|
3
|
+
metadata.gz: !binary |-
|
4
|
+
MWUyMDg1Yjc1ZWUzNjE4NWMyNDliMjBiMGFlYzkyMDFkMzZhNTFmNg==
|
5
|
+
data.tar.gz: !binary |-
|
6
|
+
NWU5ZGNjN2IzOWE1NGVmMzU5MTEyNGZjOTMyMGM3NzQ2MTQ3Y2NmNQ==
|
7
|
+
SHA512:
|
8
|
+
metadata.gz: !binary |-
|
9
|
+
MTUxMGEyOTVjYWE1Mzk1YzdiZjJmMDAxZmJkZjlmNTA4YWFmMTJjNTBlOTY0
|
10
|
+
MzA1MGM3ZGRmYjQyODMzMjkzYWVmMjAxYzlkNjExODQ0ZDFjZjliMzZlNmRh
|
11
|
+
ZDM1NWE2NjhiODY5YWYwOWZkYzRmYzM1NmEwNmNjNDEzZjkwNWM=
|
12
|
+
data.tar.gz: !binary |-
|
13
|
+
ZDdkZGFhZWU1MTdkMzkxOWNhMWEwNTcyZjRlY2QzMWIzOTkxODY4MjczZmFl
|
14
|
+
MjE1YmI5ODY0Mzc1NWY4NzQxOGE4MGY5MTAzNjVmZTk5YTFiMDdlMDI4Njhi
|
15
|
+
NWM5ZmYyMDFhNGU5MmE1NjBlNTFiODhkMjNhNjNhYTJjOTEzYTg=
|
data/.gitignore
ADDED
data/.travis.yml
ADDED
data/Gemfile
ADDED
data/LICENSE.txt
ADDED
@@ -0,0 +1,22 @@
|
|
1
|
+
Copyright (c) 2013 Codevise Solutions
|
2
|
+
|
3
|
+
MIT License
|
4
|
+
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining
|
6
|
+
a copy of this software and associated documentation files (the
|
7
|
+
"Software"), to deal in the Software without restriction, including
|
8
|
+
without limitation the rights to use, copy, modify, merge, publish,
|
9
|
+
distribute, sublicense, and/or sell copies of the Software, and to
|
10
|
+
permit persons to whom the Software is furnished to do so, subject to
|
11
|
+
the following conditions:
|
12
|
+
|
13
|
+
The above copyright notice and this permission notice shall be
|
14
|
+
included in all copies or substantial portions of the Software.
|
15
|
+
|
16
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
17
|
+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
18
|
+
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
19
|
+
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
20
|
+
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
21
|
+
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
22
|
+
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
data/README.md
ADDED
@@ -0,0 +1,98 @@
|
|
1
|
+
# State Machine Job
|
2
|
+
|
3
|
+
Enqueue resque jobs on state machine transitions and change state
|
4
|
+
according to job result.
|
5
|
+
|
6
|
+
## Installation
|
7
|
+
|
8
|
+
Add this line to your application's Gemfile:
|
9
|
+
|
10
|
+
gem 'state_machine_job'
|
11
|
+
|
12
|
+
## Usage
|
13
|
+
|
14
|
+
Extend your resque job with the `StateMachineJob` mixin and provide a
|
15
|
+
`perform_with_result` class method instead of the normal `perform`
|
16
|
+
method:
|
17
|
+
|
18
|
+
class SomeJob
|
19
|
+
extend StateMachineJob
|
20
|
+
|
21
|
+
def self.perform_with_result(record, payload)
|
22
|
+
# do something
|
23
|
+
:ok
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
The `record` parameter is a reference to the object the state machine
|
28
|
+
will be defined on.
|
29
|
+
|
30
|
+
Now you can wire up the job in a state machine using the
|
31
|
+
`StateMachineJob::Macro`:
|
32
|
+
|
33
|
+
state_machine :initial => 'idle' do
|
34
|
+
extend StateMachineJob::Macro
|
35
|
+
|
36
|
+
state 'idle'
|
37
|
+
state 'running'
|
38
|
+
state 'done'
|
39
|
+
state 'failed'
|
40
|
+
|
41
|
+
event :run do
|
42
|
+
transition 'idle' => "running"
|
43
|
+
end
|
44
|
+
|
45
|
+
job SomeJob do
|
46
|
+
on_enter 'running'
|
47
|
+
|
48
|
+
payload do |record|
|
49
|
+
{:some_attribute => record.some_attribute}
|
50
|
+
end
|
51
|
+
|
52
|
+
result :ok => 'done'
|
53
|
+
result :error => 'failed'
|
54
|
+
end
|
55
|
+
end
|
56
|
+
|
57
|
+
When the `state` attribute changes to `'running'` (either by the `run`
|
58
|
+
event or by manually updateing the attribute), `SomeJob` will
|
59
|
+
automatically be enqueued. If `perform_with_result` returns `:ok`, the
|
60
|
+
state machine transitions to the `'done'` state. You can specify as
|
61
|
+
many results as you want. Note that any exception raised by
|
62
|
+
`perform_with_result` is rescued and translated to the result
|
63
|
+
`:error`.
|
64
|
+
|
65
|
+
### Passing custom Payload
|
66
|
+
|
67
|
+
You can specify further options to pass to the `perform_with_result`
|
68
|
+
method using the `payload` method:
|
69
|
+
|
70
|
+
job SomeJob do
|
71
|
+
on_enter 'running'
|
72
|
+
|
73
|
+
payload do |record|
|
74
|
+
{:some_attribute => record.some_attribute}
|
75
|
+
end
|
76
|
+
|
77
|
+
result :ok => 'done'
|
78
|
+
result :error => 'failed'
|
79
|
+
end
|
80
|
+
|
81
|
+
`perform_with_result` is now called with the given hash of options as
|
82
|
+
the second parameter.
|
83
|
+
|
84
|
+
### Retrying Jobs
|
85
|
+
|
86
|
+
You can tell the state machine to retry a job based on its result:
|
87
|
+
|
88
|
+
job SomeJob do
|
89
|
+
on_enter 'running'
|
90
|
+
|
91
|
+
result :ok => 'done'
|
92
|
+
result :pending, :retry_after => 2.minutes
|
93
|
+
result :error => 'failed'
|
94
|
+
end
|
95
|
+
|
96
|
+
When `perform_with_result` returns the result `:pending`, the state
|
97
|
+
machine will remain in the `runnning` state and enqueue a delayed
|
98
|
+
job. This functionality requires the `resque-scheduler` gem.
|
data/Rakefile
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
require "bundler/gem_tasks"
|
@@ -0,0 +1,37 @@
|
|
1
|
+
require 'state_machine_job/version'
|
2
|
+
require 'state_machine_job/macro'
|
3
|
+
|
4
|
+
require 'resque'
|
5
|
+
require 'resque/plugins/logger'
|
6
|
+
require 'resque_logger'
|
7
|
+
|
8
|
+
module StateMachineJob
|
9
|
+
include Resque::Plugins::Logger
|
10
|
+
|
11
|
+
def perform(model_name, id, payload = {})
|
12
|
+
logger.info "#{self.name} - perform for #{model_name} #{id}"
|
13
|
+
|
14
|
+
record = model_name.constantize.find_by_id(id)
|
15
|
+
|
16
|
+
if record
|
17
|
+
result =
|
18
|
+
begin
|
19
|
+
perform_with_result(record, payload)
|
20
|
+
rescue Exception => e
|
21
|
+
logger.error "#{self.name} - exception for #{model_name} #{id}: #{e.inspect}"
|
22
|
+
:error
|
23
|
+
end
|
24
|
+
|
25
|
+
logger.info "#{self.name} - result #{result} for #{model_name} #{id}"
|
26
|
+
record.send(event_name(result))
|
27
|
+
else
|
28
|
+
logger.info "#{self.name} - #{model_name} #{id} not found. Skipping job."
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
private
|
33
|
+
|
34
|
+
def event_name(result)
|
35
|
+
([self.name.underscore.split('/'), result].flatten.join('_') + '!').to_sym
|
36
|
+
end
|
37
|
+
end
|
@@ -0,0 +1,56 @@
|
|
1
|
+
module StateMachineJob
|
2
|
+
module Macro
|
3
|
+
def job(job_class, queue = Resque, &block)
|
4
|
+
Job.new(job_class, self, queue).instance_eval(&block)
|
5
|
+
end
|
6
|
+
|
7
|
+
class Job
|
8
|
+
def initialize(job, state_machine, queue)
|
9
|
+
@job = job
|
10
|
+
@state_machine = state_machine
|
11
|
+
@queue = queue
|
12
|
+
@payload = lambda do |*args|
|
13
|
+
{}
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
def result(job_result, options = {})
|
18
|
+
if job_result.is_a?(Hash)
|
19
|
+
return result(job_result.first.first, :state => job_result.first.last)
|
20
|
+
end
|
21
|
+
|
22
|
+
if options[:state]
|
23
|
+
@state_machine.event(job_result_event_name(job_result)) do
|
24
|
+
transition any => options[:state]
|
25
|
+
end
|
26
|
+
elsif options[:retry_after]
|
27
|
+
@state_machine.define_helper :instance, retry_job_method_name(job_result) do |machine, object|
|
28
|
+
@queue.enqueue_in(options[:retry_after], @job, object.class.name, object.id, @payload.call(object))
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
def on_enter(state)
|
34
|
+
job, state_machine, queue = @job, @state_machine, @queue
|
35
|
+
|
36
|
+
@state_machine.after_transition @state_machine.any => state do |object|
|
37
|
+
queue.enqueue(job, object.class.name, object.id, @payload.call(object))
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
def payload(&block)
|
42
|
+
@payload = block
|
43
|
+
end
|
44
|
+
|
45
|
+
private
|
46
|
+
|
47
|
+
def retry_job_method_name(result)
|
48
|
+
"#{job_result_event_name(result)}!"
|
49
|
+
end
|
50
|
+
|
51
|
+
def job_result_event_name(result)
|
52
|
+
[@job.name.underscore.split('/'), result].flatten.join('_').to_sym
|
53
|
+
end
|
54
|
+
end
|
55
|
+
end
|
56
|
+
end
|
data/spec/spec_helper.rb
ADDED
@@ -0,0 +1,10 @@
|
|
1
|
+
require 'rspec'
|
2
|
+
|
3
|
+
PROJECT_ROOT = File.expand_path(File.join(File.dirname(__FILE__), '..')).freeze
|
4
|
+
$LOAD_PATH << File.join(PROJECT_ROOT, 'lib')
|
5
|
+
|
6
|
+
require 'active_support/inflector'
|
7
|
+
require 'state_machine'
|
8
|
+
require 'state_machine_job'
|
9
|
+
|
10
|
+
Dir[File.join(PROJECT_ROOT, 'spec', 'support', '**', '*.rb')].each { |file| require(file) }
|
@@ -0,0 +1,148 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
module StateMachineJob
|
4
|
+
describe Macro do
|
5
|
+
class TestJob
|
6
|
+
end
|
7
|
+
|
8
|
+
it 'enques job with model name, record id and payload arguments when entering on_enter state' do
|
9
|
+
queue = double('queue')
|
10
|
+
model = Class.new do
|
11
|
+
attr_accessor :some_attribute
|
12
|
+
|
13
|
+
def initialize(some_attribute)
|
14
|
+
self.some_attribute = some_attribute
|
15
|
+
super()
|
16
|
+
end
|
17
|
+
|
18
|
+
def id
|
19
|
+
43
|
20
|
+
end
|
21
|
+
|
22
|
+
state_machine :initial => :idle do
|
23
|
+
extend StateMachineJob::Macro
|
24
|
+
|
25
|
+
state :idle
|
26
|
+
state :running
|
27
|
+
state :done
|
28
|
+
state :failed
|
29
|
+
|
30
|
+
event :run do
|
31
|
+
transition :idle => :running
|
32
|
+
end
|
33
|
+
|
34
|
+
job TestJob, queue do
|
35
|
+
on_enter :running
|
36
|
+
payload do |record|
|
37
|
+
{:some_attribute => record.some_attribute}
|
38
|
+
end
|
39
|
+
result :ok => :done
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
43
|
+
record = model.new('value')
|
44
|
+
|
45
|
+
def model.name
|
46
|
+
'Model'
|
47
|
+
end
|
48
|
+
|
49
|
+
expect(queue).to receive(:enqueue).with(TestJob, 'Model', 43, {:some_attribute => 'value'})
|
50
|
+
record.run
|
51
|
+
end
|
52
|
+
|
53
|
+
it 'enques job after retry time with model name, record id and payload arguments when retry after result event is invoked' do
|
54
|
+
queue = double('queue')
|
55
|
+
model = Class.new do
|
56
|
+
attr_accessor :some_attribute
|
57
|
+
|
58
|
+
def initialize(some_attribute)
|
59
|
+
self.some_attribute = some_attribute
|
60
|
+
super()
|
61
|
+
end
|
62
|
+
|
63
|
+
def id
|
64
|
+
43
|
65
|
+
end
|
66
|
+
|
67
|
+
state_machine :initial => :idle do
|
68
|
+
extend StateMachineJob::Macro
|
69
|
+
|
70
|
+
state :idle
|
71
|
+
state :running
|
72
|
+
state :done
|
73
|
+
state :failed
|
74
|
+
|
75
|
+
job TestJob, queue do
|
76
|
+
on_enter :running
|
77
|
+
payload do |record|
|
78
|
+
{:some_attribute => record.some_attribute}
|
79
|
+
end
|
80
|
+
result :failed, :retry_after => 60
|
81
|
+
result :ok => :done
|
82
|
+
end
|
83
|
+
end
|
84
|
+
end
|
85
|
+
record = model.new('value')
|
86
|
+
|
87
|
+
def model.name
|
88
|
+
'Model'
|
89
|
+
end
|
90
|
+
|
91
|
+
expect(queue).to receive(:enqueue_in).with(60, TestJob, 'Model', 43, {:some_attribute => 'value'})
|
92
|
+
record.state_machine_job_test_job_failed!
|
93
|
+
end
|
94
|
+
|
95
|
+
it 'has event for job result which transitions to result state' do
|
96
|
+
object = Class.new do
|
97
|
+
state_machine :initial => :idle do
|
98
|
+
extend StateMachineJob::Macro
|
99
|
+
|
100
|
+
state :idle
|
101
|
+
state :running
|
102
|
+
state :done
|
103
|
+
state :failed
|
104
|
+
|
105
|
+
event :run do
|
106
|
+
transition :idle => :running
|
107
|
+
end
|
108
|
+
|
109
|
+
job TestJob do
|
110
|
+
on_enter :running
|
111
|
+
result :ok => :done
|
112
|
+
end
|
113
|
+
end
|
114
|
+
end.new
|
115
|
+
|
116
|
+
object.state = :running
|
117
|
+
object.state_machine_job_test_job_ok
|
118
|
+
|
119
|
+
expect(object.state).to eq('done')
|
120
|
+
end
|
121
|
+
|
122
|
+
it 'result supports state option signature' do
|
123
|
+
object = Class.new do
|
124
|
+
state_machine :initial => :idle do
|
125
|
+
extend StateMachineJob::Macro
|
126
|
+
|
127
|
+
state :idle
|
128
|
+
state :running
|
129
|
+
state :done
|
130
|
+
|
131
|
+
event :run do
|
132
|
+
transition :idle => :running
|
133
|
+
end
|
134
|
+
|
135
|
+
job TestJob do
|
136
|
+
on_enter :running
|
137
|
+
result :ok, :state => :done
|
138
|
+
end
|
139
|
+
end
|
140
|
+
end.new
|
141
|
+
|
142
|
+
object.state = :running
|
143
|
+
object.state_machine_job_test_job_ok
|
144
|
+
|
145
|
+
expect(object.state).to eq('done')
|
146
|
+
end
|
147
|
+
end
|
148
|
+
end
|
@@ -0,0 +1,86 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe StateMachineJob do
|
4
|
+
class TestQueue
|
5
|
+
def enqueue(job, *args)
|
6
|
+
job.perform(*args)
|
7
|
+
end
|
8
|
+
|
9
|
+
def self.instance
|
10
|
+
@instance ||= TestQueue.new
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
class TestJob1
|
15
|
+
@queue = 'test_job_1'
|
16
|
+
extend StateMachineJob
|
17
|
+
end
|
18
|
+
|
19
|
+
class TestJob2
|
20
|
+
@queue = 'test_job_2'
|
21
|
+
extend StateMachineJob
|
22
|
+
end
|
23
|
+
|
24
|
+
class Model
|
25
|
+
state_machine :initial => :idle do
|
26
|
+
extend StateMachineJob::Macro
|
27
|
+
|
28
|
+
state :idle
|
29
|
+
state :first_running
|
30
|
+
state :second_running
|
31
|
+
state :done
|
32
|
+
|
33
|
+
event :run do
|
34
|
+
transition :idle => :first_running
|
35
|
+
end
|
36
|
+
|
37
|
+
job TestJob1, TestQueue.instance do
|
38
|
+
on_enter :first_running
|
39
|
+
payload do |object|
|
40
|
+
{:n => 1}
|
41
|
+
end
|
42
|
+
result :ok => :second_running
|
43
|
+
end
|
44
|
+
|
45
|
+
job TestJob2, TestQueue.instance do
|
46
|
+
on_enter :second_running
|
47
|
+
payload do |object|
|
48
|
+
{:n => 2}
|
49
|
+
end
|
50
|
+
result :ok => :done
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
54
|
+
|
55
|
+
it 'calls find on model and passes record and payload to perform_with_result method' do
|
56
|
+
model = Model.new
|
57
|
+
|
58
|
+
allow(model).to receive(:id).and_return(5)
|
59
|
+
allow(Model).to receive(:find_by_id).and_return(model)
|
60
|
+
expect(TestJob1).to receive(:perform_with_result).with(model, {:n => 1}).and_return(:ok)
|
61
|
+
expect(TestJob2).to receive(:perform_with_result).with(model, {:n => 2}).and_return(:ok)
|
62
|
+
|
63
|
+
model.run
|
64
|
+
end
|
65
|
+
|
66
|
+
it 'invokes job result event on record' do
|
67
|
+
model = Model.new
|
68
|
+
|
69
|
+
allow(model).to receive(:id).and_return(5)
|
70
|
+
allow(Model).to receive(:find_by_id).and_return(model)
|
71
|
+
allow(TestJob1).to receive(:perform_with_result).and_return(:ok)
|
72
|
+
allow(TestJob2).to receive(:perform_with_result).and_return(:ok)
|
73
|
+
|
74
|
+
expect(model).to receive(:test_job1_ok!)
|
75
|
+
|
76
|
+
model.run
|
77
|
+
end
|
78
|
+
|
79
|
+
it 'job is skipped if record cannot be found' do
|
80
|
+
allow(Model).to receive(:find_by_id).and_return(nil)
|
81
|
+
|
82
|
+
expect {
|
83
|
+
TestJob1.perform(Model.name, -1, {})
|
84
|
+
}.not_to raise_exception
|
85
|
+
end
|
86
|
+
end
|
@@ -0,0 +1,30 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
lib = File.expand_path('../lib', __FILE__)
|
3
|
+
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
4
|
+
require 'state_machine_job/version'
|
5
|
+
|
6
|
+
Gem::Specification.new do |spec|
|
7
|
+
spec.name = "state_machine_job"
|
8
|
+
spec.version = StateMachineJob::VERSION
|
9
|
+
spec.authors = ["Codevise Solutions Ltd."]
|
10
|
+
spec.email = ["info@codevise.de"]
|
11
|
+
spec.description = %q{State Machine + Resque.}
|
12
|
+
spec.summary = %q{Resque jobs class for rails state machines.}
|
13
|
+
spec.homepage = "http://github.com/codevise/state_machine_job"
|
14
|
+
|
15
|
+
spec.files = `git ls-files`.split($/)
|
16
|
+
spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
|
17
|
+
spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
|
18
|
+
spec.require_paths = ["lib"]
|
19
|
+
|
20
|
+
spec.add_development_dependency 'bundler', '~> 1.3'
|
21
|
+
spec.add_development_dependency 'gem_tasks'
|
22
|
+
spec.add_development_dependency 'rake'
|
23
|
+
spec.add_development_dependency 'ci_reporter'
|
24
|
+
spec.add_development_dependency 'rspec'
|
25
|
+
spec.add_development_dependency 'activesupport'
|
26
|
+
|
27
|
+
spec.add_runtime_dependency 'resque'
|
28
|
+
spec.add_runtime_dependency 'resque-logger'
|
29
|
+
spec.add_runtime_dependency 'state_machine'
|
30
|
+
end
|
metadata
ADDED
@@ -0,0 +1,187 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: state_machine_job
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.5
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Codevise Solutions Ltd.
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2014-05-01 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: bundler
|
15
|
+
type: :development
|
16
|
+
requirement: !ruby/object:Gem::Requirement
|
17
|
+
requirements:
|
18
|
+
- - ~>
|
19
|
+
- !ruby/object:Gem::Version
|
20
|
+
version: '1.3'
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - ~>
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '1.3'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: gem_tasks
|
29
|
+
type: :development
|
30
|
+
requirement: !ruby/object:Gem::Requirement
|
31
|
+
requirements:
|
32
|
+
- - ! '>='
|
33
|
+
- !ruby/object:Gem::Version
|
34
|
+
version: '0'
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - ! '>='
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '0'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: rake
|
43
|
+
type: :development
|
44
|
+
requirement: !ruby/object:Gem::Requirement
|
45
|
+
requirements:
|
46
|
+
- - ! '>='
|
47
|
+
- !ruby/object:Gem::Version
|
48
|
+
version: '0'
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - ! '>='
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '0'
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: ci_reporter
|
57
|
+
type: :development
|
58
|
+
requirement: !ruby/object:Gem::Requirement
|
59
|
+
requirements:
|
60
|
+
- - ! '>='
|
61
|
+
- !ruby/object:Gem::Version
|
62
|
+
version: '0'
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - ! '>='
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '0'
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: rspec
|
71
|
+
type: :development
|
72
|
+
requirement: !ruby/object:Gem::Requirement
|
73
|
+
requirements:
|
74
|
+
- - ! '>='
|
75
|
+
- !ruby/object:Gem::Version
|
76
|
+
version: '0'
|
77
|
+
prerelease: false
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - ! '>='
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: '0'
|
83
|
+
- !ruby/object:Gem::Dependency
|
84
|
+
name: activesupport
|
85
|
+
type: :development
|
86
|
+
requirement: !ruby/object:Gem::Requirement
|
87
|
+
requirements:
|
88
|
+
- - ! '>='
|
89
|
+
- !ruby/object:Gem::Version
|
90
|
+
version: '0'
|
91
|
+
prerelease: false
|
92
|
+
version_requirements: !ruby/object:Gem::Requirement
|
93
|
+
requirements:
|
94
|
+
- - ! '>='
|
95
|
+
- !ruby/object:Gem::Version
|
96
|
+
version: '0'
|
97
|
+
- !ruby/object:Gem::Dependency
|
98
|
+
name: resque
|
99
|
+
type: :runtime
|
100
|
+
requirement: !ruby/object:Gem::Requirement
|
101
|
+
requirements:
|
102
|
+
- - ! '>='
|
103
|
+
- !ruby/object:Gem::Version
|
104
|
+
version: '0'
|
105
|
+
prerelease: false
|
106
|
+
version_requirements: !ruby/object:Gem::Requirement
|
107
|
+
requirements:
|
108
|
+
- - ! '>='
|
109
|
+
- !ruby/object:Gem::Version
|
110
|
+
version: '0'
|
111
|
+
- !ruby/object:Gem::Dependency
|
112
|
+
name: resque-logger
|
113
|
+
type: :runtime
|
114
|
+
requirement: !ruby/object:Gem::Requirement
|
115
|
+
requirements:
|
116
|
+
- - ! '>='
|
117
|
+
- !ruby/object:Gem::Version
|
118
|
+
version: '0'
|
119
|
+
prerelease: false
|
120
|
+
version_requirements: !ruby/object:Gem::Requirement
|
121
|
+
requirements:
|
122
|
+
- - ! '>='
|
123
|
+
- !ruby/object:Gem::Version
|
124
|
+
version: '0'
|
125
|
+
- !ruby/object:Gem::Dependency
|
126
|
+
name: state_machine
|
127
|
+
type: :runtime
|
128
|
+
requirement: !ruby/object:Gem::Requirement
|
129
|
+
requirements:
|
130
|
+
- - ! '>='
|
131
|
+
- !ruby/object:Gem::Version
|
132
|
+
version: '0'
|
133
|
+
prerelease: false
|
134
|
+
version_requirements: !ruby/object:Gem::Requirement
|
135
|
+
requirements:
|
136
|
+
- - ! '>='
|
137
|
+
- !ruby/object:Gem::Version
|
138
|
+
version: '0'
|
139
|
+
description: State Machine + Resque.
|
140
|
+
email:
|
141
|
+
- info@codevise.de
|
142
|
+
executables: []
|
143
|
+
extensions: []
|
144
|
+
extra_rdoc_files: []
|
145
|
+
files:
|
146
|
+
- .gitignore
|
147
|
+
- .travis.yml
|
148
|
+
- Gemfile
|
149
|
+
- LICENSE.txt
|
150
|
+
- README.md
|
151
|
+
- Rakefile
|
152
|
+
- lib/state_machine_job.rb
|
153
|
+
- lib/state_machine_job/macro.rb
|
154
|
+
- lib/state_machine_job/version.rb
|
155
|
+
- spec/spec_helper.rb
|
156
|
+
- spec/state_machine_job/macro_spec.rb
|
157
|
+
- spec/state_machine_job_spec.rb
|
158
|
+
- spec/support/setup_resque_logger.rb
|
159
|
+
- state_machine_job.gemspec
|
160
|
+
homepage: http://github.com/codevise/state_machine_job
|
161
|
+
licenses: []
|
162
|
+
metadata: {}
|
163
|
+
post_install_message:
|
164
|
+
rdoc_options: []
|
165
|
+
require_paths:
|
166
|
+
- lib
|
167
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
168
|
+
requirements:
|
169
|
+
- - ! '>='
|
170
|
+
- !ruby/object:Gem::Version
|
171
|
+
version: '0'
|
172
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
173
|
+
requirements:
|
174
|
+
- - ! '>='
|
175
|
+
- !ruby/object:Gem::Version
|
176
|
+
version: '0'
|
177
|
+
requirements: []
|
178
|
+
rubyforge_project:
|
179
|
+
rubygems_version: 2.1.11
|
180
|
+
signing_key:
|
181
|
+
specification_version: 4
|
182
|
+
summary: Resque jobs class for rails state machines.
|
183
|
+
test_files:
|
184
|
+
- spec/spec_helper.rb
|
185
|
+
- spec/state_machine_job/macro_spec.rb
|
186
|
+
- spec/state_machine_job_spec.rb
|
187
|
+
- spec/support/setup_resque_logger.rb
|