workflow-activerecord 4.1.1.pre → 4.1.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +200 -5
- data/lib/workflow_activerecord/version.rb +1 -1
- metadata +4 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 6e4b0f04924472fad5ba5fe6b917c13bdc9b023ee21b5fc57a4362ee659cda3b
|
4
|
+
data.tar.gz: 9949cfc0c4677cdd75f821a8fc1fa86f781d30165fe2e492cd93d4115b9a39dc
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: e2c87a9a399dd3c91f966cb2f87ea660400b3376053a9ca3a489189ea433f7962015f52aa4072bc956c5d9a56b6e5d324da6df3a7012c8181f20c659f26028a6
|
7
|
+
data.tar.gz: 31498bb866bcfded36c4eda93df32ece31c6fd0f53f71ba83a528e886f199290f8a3b7522814d63b219d1dc219925b5cfc77dc5894a2890faa9570cb7ce55081
|
data/README.md
CHANGED
@@ -13,12 +13,207 @@ Coverage](https://codeclimate.com/github/geekq/workflow-activerecord/badges/cove
|
|
13
13
|
|
14
14
|
**ActiveRecord/Rails Integration for the Workflow library**
|
15
15
|
|
16
|
-
|
16
|
+
Major+minor versions of workflow-activerecord are based on the oldest
|
17
|
+
compatible ActiveRecord API. To use [`workflow`][] with a
|
18
|
+
Rails/ActiveRecord 4.1, 4.2, 5.0, 5.1, 5.2 please use:
|
17
19
|
|
18
|
-
gem 'workflow-activerecord'
|
20
|
+
gem 'workflow-activerecord', '>= 4.1', '< 6.0'
|
19
21
|
|
20
|
-
This will also automatically include the newest version of
|
21
|
-
'workflow' gem. But you can also choose a specific version:
|
22
|
+
This will also automatically include the newest compatible version of
|
23
|
+
the core 'workflow' gem. But you can also choose a specific version:
|
22
24
|
|
23
25
|
gem 'workflow', '~> 2.0'
|
24
|
-
gem 'workflow-activerecord'
|
26
|
+
gem 'workflow-activerecord', '>= 4.1pre', '< 6.0'
|
27
|
+
|
28
|
+
Please also have a look at the [sample application][]!
|
29
|
+
|
30
|
+
For detailed introduction into workflow DSL please read [`workflow`][]!
|
31
|
+
|
32
|
+
[`workflow`]: https://github.com/geekq/workflow
|
33
|
+
[sample application]: https://github.com/geekq/workflow-rails-sample
|
34
|
+
|
35
|
+
|
36
|
+
State persistence with ActiveRecord
|
37
|
+
-----------------------------------
|
38
|
+
|
39
|
+
Workflow library can handle the state persistence fully automatically. You
|
40
|
+
only need to define a string field on the table called `workflow_state`
|
41
|
+
and include the workflow mixin in your model class as usual:
|
42
|
+
|
43
|
+
class Order < ApplicationRecord
|
44
|
+
include Workflow
|
45
|
+
workflow do
|
46
|
+
# list states and transitions here
|
47
|
+
end
|
48
|
+
end
|
49
|
+
|
50
|
+
On a database record loading all the state check methods e.g.
|
51
|
+
`article.state`, `article.awaiting_review?` are immediately available.
|
52
|
+
For new records or if the `workflow_state` field is not set the state
|
53
|
+
defaults to the first state declared in the workflow specification. In
|
54
|
+
our example it is `:new`, so `Article.new.new?` returns true and
|
55
|
+
`Article.new.approved?` returns false.
|
56
|
+
|
57
|
+
At the end of a successful state transition like `article.approve!` the
|
58
|
+
new state is immediately saved in the database.
|
59
|
+
|
60
|
+
You can change this behaviour by overriding `persist_workflow_state`
|
61
|
+
method.
|
62
|
+
|
63
|
+
### Scopes
|
64
|
+
|
65
|
+
Workflow library also adds automatically generated scopes with names based on
|
66
|
+
states names:
|
67
|
+
|
68
|
+
class Order < ApplicationRecord
|
69
|
+
include Workflow
|
70
|
+
workflow do
|
71
|
+
state :approved
|
72
|
+
state :pending
|
73
|
+
end
|
74
|
+
end
|
75
|
+
|
76
|
+
# returns all orders with `approved` state
|
77
|
+
Order.with_approved_state
|
78
|
+
|
79
|
+
# returns all orders with `pending` state
|
80
|
+
Order.with_pending_state
|
81
|
+
|
82
|
+
|
83
|
+
### Custom workflow database column
|
84
|
+
|
85
|
+
[meuble](http://imeuble.info/) contributed a solution for using
|
86
|
+
custom persistence column easily, e.g. for a legacy database schema:
|
87
|
+
|
88
|
+
class LegacyOrder < ApplicationRecord
|
89
|
+
include Workflow
|
90
|
+
|
91
|
+
workflow_column :foo_bar # use this legacy database column for
|
92
|
+
# persistence
|
93
|
+
end
|
94
|
+
|
95
|
+
|
96
|
+
|
97
|
+
### Single table inheritance
|
98
|
+
|
99
|
+
Single table inheritance is also supported. Descendant classes can either
|
100
|
+
inherit the workflow definition from the parent or override with its own
|
101
|
+
definition.
|
102
|
+
|
103
|
+
|
104
|
+
Custom Versions of Existing Adapters
|
105
|
+
------------------------------------
|
106
|
+
|
107
|
+
Other adapters (such as a custom ActiveRecord plugin) can be selected by adding a `workflow_adapter` class method, eg.
|
108
|
+
|
109
|
+
```ruby
|
110
|
+
class Example < ApplicationRecord
|
111
|
+
def self.workflow_adapter
|
112
|
+
MyCustomAdapter
|
113
|
+
end
|
114
|
+
include Workflow
|
115
|
+
|
116
|
+
# ...
|
117
|
+
end
|
118
|
+
```
|
119
|
+
|
120
|
+
(The above will include `MyCustomAdapter` *instead* of the default
|
121
|
+
`WorkflowActiverecord` adapter.)
|
122
|
+
|
123
|
+
|
124
|
+
Multiple Workflows
|
125
|
+
------------------
|
126
|
+
|
127
|
+
I am frequently asked if it's possible to represent multiple "workflows"
|
128
|
+
in an ActiveRecord class.
|
129
|
+
|
130
|
+
The solution depends on your business logic and how you want to
|
131
|
+
structure your implementation.
|
132
|
+
|
133
|
+
### Use Single Table Inheritance
|
134
|
+
|
135
|
+
One solution can be to do it on the class level and use a class
|
136
|
+
hierarchy. You can use [single table inheritance][STI] so there is only
|
137
|
+
single `orders` table in the database. Read more in the chapter "Single
|
138
|
+
Table Inheritance" of the [ActiveRecord documentation][ActiveRecord].
|
139
|
+
Then you define your different classes:
|
140
|
+
|
141
|
+
class Order < ActiveRecord::Base
|
142
|
+
include Workflow
|
143
|
+
end
|
144
|
+
|
145
|
+
class SmallOrder < Order
|
146
|
+
workflow do
|
147
|
+
# workflow definition for small orders goes here
|
148
|
+
end
|
149
|
+
end
|
150
|
+
|
151
|
+
class BigOrder < Order
|
152
|
+
workflow do
|
153
|
+
# workflow for big orders, probably with a longer approval chain
|
154
|
+
end
|
155
|
+
end
|
156
|
+
|
157
|
+
|
158
|
+
### Individual workflows for objects
|
159
|
+
|
160
|
+
Another solution would be to connect different workflows to object
|
161
|
+
instances via metaclass, e.g.
|
162
|
+
|
163
|
+
# Load an object from the database
|
164
|
+
booking = Booking.find(1234)
|
165
|
+
|
166
|
+
# Now define a workflow - exclusively for this object,
|
167
|
+
# probably depending on some condition or database field
|
168
|
+
if # some condition
|
169
|
+
class << booking
|
170
|
+
include Workflow
|
171
|
+
workflow do
|
172
|
+
state :state1
|
173
|
+
state :state2
|
174
|
+
end
|
175
|
+
end
|
176
|
+
# if some other condition, use a different workflow
|
177
|
+
|
178
|
+
You can also encapsulate this in a class method or even put in some
|
179
|
+
ActiveRecord callback. Please also have a look at [the full working
|
180
|
+
example][multiple_workflow_test]!
|
181
|
+
|
182
|
+
[STI]: http://www.martinfowler.com/eaaCatalog/singleTableInheritance.html
|
183
|
+
[ActiveRecord]: http://api.rubyonrails.org/classes/ActiveRecord/Base.html
|
184
|
+
[multiple_workflow_test]: https://github.com/geekq/workflow-activerecord/blob/develop/test/multiple_workflows_test.rb
|
185
|
+
|
186
|
+
|
187
|
+
Changelog
|
188
|
+
---------
|
189
|
+
|
190
|
+
### New in the version 4.1.0
|
191
|
+
|
192
|
+
First version supporting Rails/ActiveRecord 4.1, 4.2, 5.0, 5.1, 5.2
|
193
|
+
Special thanks to [@voltechs][] for implementing Rails 5 support
|
194
|
+
and helping to revive `workflow`!
|
195
|
+
|
196
|
+
[@voltechs]: https://github.com/voltechs
|
197
|
+
|
198
|
+
Support
|
199
|
+
-------
|
200
|
+
|
201
|
+
### Reporting bugs
|
202
|
+
|
203
|
+
<http://github.com/geekq/workflow-activerecord/issues>
|
204
|
+
|
205
|
+
|
206
|
+
About
|
207
|
+
-----
|
208
|
+
|
209
|
+
Author: Vladimir Dobriakov, <https://infrastructure-as-code.de>
|
210
|
+
|
211
|
+
Copyright (c) 2010-2019 Vladimir Dobriakov and Contributors
|
212
|
+
|
213
|
+
Copyright (c) 2008-2009 Vodafone
|
214
|
+
|
215
|
+
Copyright (c) 2007-2008 Ryan Allen, FlashDen Pty Ltd
|
216
|
+
|
217
|
+
Based on the work of Ryan Allen and Scott Barron
|
218
|
+
|
219
|
+
Licensed under MIT license, see the LICENSE file.
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: workflow-activerecord
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 4.1.1
|
4
|
+
version: 4.1.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Vladimir Dobriakov
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2019-01-
|
11
|
+
date: 2019-01-12 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: workflow
|
@@ -186,9 +186,9 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
186
186
|
version: '2.3'
|
187
187
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
188
188
|
requirements:
|
189
|
-
- - "
|
189
|
+
- - ">="
|
190
190
|
- !ruby/object:Gem::Version
|
191
|
-
version:
|
191
|
+
version: '0'
|
192
192
|
requirements: []
|
193
193
|
rubyforge_project:
|
194
194
|
rubygems_version: 2.7.6
|