state_machine_job 3.0.0 → 3.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
  SHA256:
3
- metadata.gz: 6a7f675ec564eb009278abd23d975cc4a90a8227547f4a6b52d892ff68ea9a09
4
- data.tar.gz: 3edbe769acda3301a5727296f9658d7dfd38733b04e95e66033e0c0f8e8c2db2
3
+ metadata.gz: ac9e3a5fff6839a9d6163a9364ac64a259aef40bb8ceb15f9229e1de1e5d3e10
4
+ data.tar.gz: 1e4f1a6b4fee4f35e723f33b99ad0cf3ac0039e2bdb2e9e307523aaf76ccfc2b
5
5
  SHA512:
6
- metadata.gz: ae3afe431ed7a0b271ba445a613f57b0bb065c77cc0f8f4c97031ca82d2e9ee44cb1496ecff65accc838d9706445a589f9c5148682f4d3e9a55cfe40aa311c7a
7
- data.tar.gz: 8b4bc3f88b24bee08753119de4aca55e03cee70a7d883365d9d7ebbfeaa2a65476c58c8353ff270bd5fa14eb0c05512b034fdeb73d494df0cfa2c1d32602ce17
6
+ metadata.gz: c48d231892c18e97eed3d2a1bb15728999b348dfefaae2c720144bba4548be10c63c6b3204d65c45cd310f619d5cb1befeb60337e76874405ab4fb95ae655dc4
7
+ data.tar.gz: 8549de2a218b54be88f429a913e014ada04a34a5d85db107813954f7a9295e64d5199aa3586df230050c97e591729798e44328fcb0b55ca3bdc25b9ecbe2e375
@@ -0,0 +1,18 @@
1
+ name: tests
2
+ on:
3
+ push:
4
+ pull_request:
5
+ schedule:
6
+ - cron: '0 2 * * *'
7
+
8
+ jobs:
9
+ rspec:
10
+ runs-on: ubuntu-latest
11
+
12
+ steps:
13
+ - uses: actions/checkout@v3
14
+ - uses: ruby/setup-ruby@v1
15
+ with:
16
+ ruby-version: 3.2
17
+ bundler-cache: true
18
+ - run: bundle exec rspec
data/CHANGELOG.md CHANGED
@@ -1,14 +1,16 @@
1
1
  # CHANGELOG
2
2
 
3
- ### Version 3.0.0
3
+ ### Version 3.2.0
4
4
 
5
- 2018-07-31
5
+ 2023-09-04
6
6
 
7
- [Compare changes](http://github.com/codevise/state_machine_job/compare/2-x-stable...v3.0.0)
7
+ [Compare changes](http://github.com/codevise/state_machine_job/compare/3-1-stable...v3.2.0)
8
8
 
9
- - Migrate to `state_machines` gem
10
- ([#10](https://github.com/codevise/state_machine_job/pull/10))
9
+ - Support Rails 6 and 7
10
+ ([#12](https://github.com/codevise/state_machine_job/pull/12))
11
+ - Migrate to GitHub actions
12
+ ([#13](https://github.com/codevise/state_machine_job/pull/13))
11
13
 
12
14
  See
13
- [2-x-stable branch](http://github.com/codevise/state_machine_job/blob/2-x-stable/CHANGELOG.md)
15
+ [3-1-stable branch](http://github.com/codevise/state_machine_job/blob/3-1-stable/CHANGELOG.md)
14
16
  for previous changes.
data/README.md CHANGED
@@ -1,7 +1,7 @@
1
1
  # State Machine Job
2
2
 
3
3
  [![Gem Version](https://badge.fury.io/rb/state_machine_job.svg)](http://badge.fury.io/rb/state_machine_job)
4
- [![Build Status](https://travis-ci.org/codevise/state_machine_job.svg?branch=master)](https://travis-ci.org/codevise/state_machine_job)
4
+ [![Build Status](https://github.com/codevise/state_machine_job/actions/workflows/tests.yml/badge.svg)](https://github.com/codevise/state_machine_job/actions)
5
5
 
6
6
  Enqueue jobs on state machine transitions and change state according
7
7
  to job result.
@@ -56,9 +56,15 @@ When the `state` attribute changes to `'running'` (either by the `run`
56
56
  event or by manually updateing the attribute), `SomeJob` will
57
57
  automatically be enqueued. If `perform_with_result` returns `:ok`, the
58
58
  state machine transitions to the `'done'` state. You can specify as
59
- many results as you want. Note that any exception raised by
60
- `perform_with_result` leads to a state machine transition as if the
61
- result had been `:error`. The exception is not rescued, though.
59
+ many results as you want.
60
+
61
+ Note that any exception raised by `perform_with_result` leads to a
62
+ state machine transition as if the result had been `:error`. The
63
+ exception is not rescued, though. If `perform_with_result` raises an
64
+ exception and the record is invalid, previous attribute values will be
65
+ restored before invoking the transition. That way the transition to
66
+ the error state can be persisted by rolling back the changes that led
67
+ to the records invalidity during job execution.
62
68
 
63
69
  ### Passing custom Payload
64
70
 
@@ -1,3 +1,3 @@
1
1
  module StateMachineJob
2
- VERSION = '3.0.0'.freeze
2
+ VERSION = '3.2.0'.freeze
3
3
  end
@@ -9,6 +9,7 @@ module StateMachineJob
9
9
  begin
10
10
  result = perform_with_result(record, payload)
11
11
  rescue StandardError
12
+ record.restore_attributes unless record.valid?
12
13
  result = :error
13
14
  raise
14
15
  ensure
@@ -25,6 +25,10 @@ module StateMachineJob
25
25
  def self.find(id)
26
26
  instances.fetch(id.to_i)
27
27
  end
28
+
29
+ def self.primary_key
30
+ :id
31
+ end
28
32
  end
29
33
 
30
34
  before do
@@ -8,6 +8,9 @@ describe StateMachineJob do
8
8
  end
9
9
 
10
10
  class Model
11
+ include ActiveModel::Dirty
12
+ include ActiveModel::Validations
13
+
11
14
  def id
12
15
  3
13
16
  end
@@ -17,6 +20,23 @@ describe StateMachineJob do
17
20
  def test_job_error!; end
18
21
  end
19
22
 
23
+ class ModelRequiringName < Model
24
+ attr_reader :name
25
+
26
+ validates_presence_of :name
27
+ define_attribute_methods :name
28
+
29
+ def initialize(name: nil)
30
+ @name = name
31
+ changes_applied
32
+ end
33
+
34
+ def name=(value)
35
+ name_will_change! unless value == @name
36
+ @name = value
37
+ end
38
+ end
39
+
20
40
  class SomeError < StandardError; end
21
41
 
22
42
  it 'passes record and payload to perform_with_result method' do
@@ -61,4 +81,20 @@ describe StateMachineJob do
61
81
  rescue SomeError # rubocop:disable Lint/HandleExceptions
62
82
  end
63
83
  end
84
+
85
+ it 'restores attributes of invalid record before invoking job result event ' \
86
+ 'if perform_with_result raises to ensure state transition can be persisted' do
87
+ record = ModelRequiringName.new(name: 'Susan')
88
+ job = TestJob.new
89
+
90
+ record.name = ''
91
+ allow(job).to receive(:perform_with_result).and_raise(SomeError)
92
+
93
+ begin
94
+ job.perform(record)
95
+ rescue SomeError # rubocop:disable Lint/HandleExceptions
96
+ ensure
97
+ expect(record).to be_valid
98
+ end
99
+ end
64
100
  end
@@ -18,15 +18,13 @@ Gem::Specification.new do |spec|
18
18
  spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
19
19
  spec.require_paths = ["lib"]
20
20
 
21
- spec.add_development_dependency 'state_machines-activemodel', '~> 0.5.0'
22
- spec.add_development_dependency 'bundler', '~> 1.3'
23
- spec.add_development_dependency 'rake', '< 13'
24
- spec.add_development_dependency 'rspec-rails', '~> 3.7'
25
- spec.add_development_dependency 'activesupport', '< 6'
26
- spec.add_development_dependency 'activemodel', '< 6'
21
+ spec.add_development_dependency 'state_machines-activemodel', '~> 0.9.0'
22
+ spec.add_development_dependency 'bundler', ['>= 1.3', '< 3']
23
+ spec.add_development_dependency 'rake', '< 14'
24
+ spec.add_development_dependency 'rspec-rails', '~> 6.0'
27
25
  spec.add_development_dependency 'semmy', '~> 1.0'
28
26
  spec.add_development_dependency 'timecop', '~> 0.9.1'
29
27
 
30
- spec.add_runtime_dependency 'activejob', ['>= 4.2', '< 6']
31
- spec.add_runtime_dependency 'state_machines', '~> 0.5.0'
28
+ spec.add_runtime_dependency 'activejob', ['>= 4.2', '< 8']
29
+ spec.add_runtime_dependency 'state_machines', ['>= 0.5', '< 0.7']
32
30
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: state_machine_job
3
3
  version: !ruby/object:Gem::Version
4
- version: 3.0.0
4
+ version: 3.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Codevise Solutions Ltd.
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2018-07-31 00:00:00.000000000 Z
11
+ date: 2023-09-04 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: state_machines-activemodel
@@ -16,84 +16,62 @@ dependencies:
16
16
  requirements:
17
17
  - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: 0.5.0
19
+ version: 0.9.0
20
20
  type: :development
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - "~>"
25
25
  - !ruby/object:Gem::Version
26
- version: 0.5.0
26
+ version: 0.9.0
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: bundler
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
- - - "~>"
31
+ - - ">="
32
32
  - !ruby/object:Gem::Version
33
33
  version: '1.3'
34
+ - - "<"
35
+ - !ruby/object:Gem::Version
36
+ version: '3'
34
37
  type: :development
35
38
  prerelease: false
36
39
  version_requirements: !ruby/object:Gem::Requirement
37
40
  requirements:
38
- - - "~>"
41
+ - - ">="
39
42
  - !ruby/object:Gem::Version
40
43
  version: '1.3'
44
+ - - "<"
45
+ - !ruby/object:Gem::Version
46
+ version: '3'
41
47
  - !ruby/object:Gem::Dependency
42
48
  name: rake
43
49
  requirement: !ruby/object:Gem::Requirement
44
50
  requirements:
45
51
  - - "<"
46
52
  - !ruby/object:Gem::Version
47
- version: '13'
53
+ version: '14'
48
54
  type: :development
49
55
  prerelease: false
50
56
  version_requirements: !ruby/object:Gem::Requirement
51
57
  requirements:
52
58
  - - "<"
53
59
  - !ruby/object:Gem::Version
54
- version: '13'
60
+ version: '14'
55
61
  - !ruby/object:Gem::Dependency
56
62
  name: rspec-rails
57
63
  requirement: !ruby/object:Gem::Requirement
58
64
  requirements:
59
65
  - - "~>"
60
66
  - !ruby/object:Gem::Version
61
- version: '3.7'
67
+ version: '6.0'
62
68
  type: :development
63
69
  prerelease: false
64
70
  version_requirements: !ruby/object:Gem::Requirement
65
71
  requirements:
66
72
  - - "~>"
67
73
  - !ruby/object:Gem::Version
68
- version: '3.7'
69
- - !ruby/object:Gem::Dependency
70
- name: activesupport
71
- requirement: !ruby/object:Gem::Requirement
72
- requirements:
73
- - - "<"
74
- - !ruby/object:Gem::Version
75
- version: '6'
76
- type: :development
77
- prerelease: false
78
- version_requirements: !ruby/object:Gem::Requirement
79
- requirements:
80
- - - "<"
81
- - !ruby/object:Gem::Version
82
- version: '6'
83
- - !ruby/object:Gem::Dependency
84
- name: activemodel
85
- requirement: !ruby/object:Gem::Requirement
86
- requirements:
87
- - - "<"
88
- - !ruby/object:Gem::Version
89
- version: '6'
90
- type: :development
91
- prerelease: false
92
- version_requirements: !ruby/object:Gem::Requirement
93
- requirements:
94
- - - "<"
95
- - !ruby/object:Gem::Version
96
- version: '6'
74
+ version: '6.0'
97
75
  - !ruby/object:Gem::Dependency
98
76
  name: semmy
99
77
  requirement: !ruby/object:Gem::Requirement
@@ -131,7 +109,7 @@ dependencies:
131
109
  version: '4.2'
132
110
  - - "<"
133
111
  - !ruby/object:Gem::Version
134
- version: '6'
112
+ version: '8'
135
113
  type: :runtime
136
114
  prerelease: false
137
115
  version_requirements: !ruby/object:Gem::Requirement
@@ -141,21 +119,27 @@ dependencies:
141
119
  version: '4.2'
142
120
  - - "<"
143
121
  - !ruby/object:Gem::Version
144
- version: '6'
122
+ version: '8'
145
123
  - !ruby/object:Gem::Dependency
146
124
  name: state_machines
147
125
  requirement: !ruby/object:Gem::Requirement
148
126
  requirements:
149
- - - "~>"
127
+ - - ">="
128
+ - !ruby/object:Gem::Version
129
+ version: '0.5'
130
+ - - "<"
150
131
  - !ruby/object:Gem::Version
151
- version: 0.5.0
132
+ version: '0.7'
152
133
  type: :runtime
153
134
  prerelease: false
154
135
  version_requirements: !ruby/object:Gem::Requirement
155
136
  requirements:
156
- - - "~>"
137
+ - - ">="
138
+ - !ruby/object:Gem::Version
139
+ version: '0.5'
140
+ - - "<"
157
141
  - !ruby/object:Gem::Version
158
- version: 0.5.0
142
+ version: '0.7'
159
143
  description: State Machine + Active Job
160
144
  email:
161
145
  - info@codevise.de
@@ -163,8 +147,8 @@ executables: []
163
147
  extensions: []
164
148
  extra_rdoc_files: []
165
149
  files:
150
+ - ".github/workflows/tests.yml"
166
151
  - ".gitignore"
167
- - ".travis.yml"
168
152
  - CHANGELOG.md
169
153
  - Gemfile
170
154
  - LICENSE.txt
@@ -196,8 +180,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
196
180
  - !ruby/object:Gem::Version
197
181
  version: '0'
198
182
  requirements: []
199
- rubyforge_project:
200
- rubygems_version: 2.7.5
183
+ rubygems_version: 3.4.10
201
184
  signing_key:
202
185
  specification_version: 4
203
186
  summary: Trigger jobs via Rails state machines.
data/.travis.yml DELETED
@@ -1,4 +0,0 @@
1
- rvm:
2
- - 2.1.0
3
-
4
- script: "bundle exec rspec"