workflow 2.0.0 → 3.0.0
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 +4 -4
- data/README.adoc +564 -0
- data/lib/workflow/draw.rb +1 -0
- data/lib/workflow/version.rb +1 -1
- data/lib/workflow.rb +29 -37
- metadata +40 -43
- data/README.markdown +0 -655
- data/lib/workflow/adapters/active_record.rb +0 -71
- data/lib/workflow/adapters/remodel.rb +0 -15
data/lib/workflow.rb
CHANGED
@@ -1,16 +1,8 @@
|
|
1
1
|
require 'rubygems'
|
2
2
|
|
3
3
|
require 'workflow/specification'
|
4
|
-
require 'workflow/adapters/remodel'
|
5
4
|
|
6
|
-
|
7
|
-
require 'ruby-graphviz'
|
8
|
-
require 'workflow/draw'
|
9
|
-
rescue LoadError => e
|
10
|
-
$stderr.puts "Could not load the ruby-graphiz or active_support gems for rendering: #{e.message}"
|
11
|
-
end
|
12
|
-
|
13
|
-
# See also README.markdown for documentation
|
5
|
+
# See also README for documentation
|
14
6
|
module Workflow
|
15
7
|
module ClassMethods
|
16
8
|
attr_reader :workflow_spec
|
@@ -69,8 +61,8 @@ module Workflow
|
|
69
61
|
state.events.flat.each do |event|
|
70
62
|
event_name = event.name
|
71
63
|
module_eval do
|
72
|
-
define_method "#{event_name}!".to_sym do |*args|
|
73
|
-
process_event!(event_name, *args)
|
64
|
+
define_method "#{event_name}!".to_sym do |*args, **kwargs|
|
65
|
+
process_event!(event_name, *args, **kwargs)
|
74
66
|
end
|
75
67
|
|
76
68
|
define_method "can_#{event_name}?" do
|
@@ -102,7 +94,7 @@ module Workflow
|
|
102
94
|
@halted_because
|
103
95
|
end
|
104
96
|
|
105
|
-
def process_event!(name, *args)
|
97
|
+
def process_event!(name, *args, **kwargs)
|
106
98
|
event = current_state.events.first_applicable(name, self)
|
107
99
|
raise NoTransitionAllowed.new(
|
108
100
|
"There is no event #{name.to_sym} defined for the #{current_state} state") \
|
@@ -115,26 +107,26 @@ module Workflow
|
|
115
107
|
from = current_state
|
116
108
|
to = spec.states[event.transitions_to]
|
117
109
|
|
118
|
-
run_before_transition(from, to, name, *args)
|
110
|
+
run_before_transition(from, to, name, *args, **kwargs)
|
119
111
|
return false if @halted
|
120
112
|
|
121
113
|
begin
|
122
|
-
return_value = run_action(event.action, *args) || run_action_callback(event.name, *args)
|
114
|
+
return_value = run_action(event.action, *args, **kwargs) || run_action_callback(event.name, *args, **kwargs)
|
123
115
|
rescue StandardError => e
|
124
|
-
run_on_error(e, from, to, name, *args)
|
116
|
+
run_on_error(e, from, to, name, *args, **kwargs)
|
125
117
|
end
|
126
118
|
|
127
119
|
return false if @halted
|
128
120
|
|
129
|
-
run_on_transition(from, to, name, *args)
|
121
|
+
run_on_transition(from, to, name, *args, **kwargs)
|
130
122
|
|
131
|
-
run_on_exit(from, to, name, *args)
|
123
|
+
run_on_exit(from, to, name, *args, **kwargs)
|
132
124
|
|
133
125
|
transition_value = persist_workflow_state to.to_s
|
134
126
|
|
135
|
-
run_on_entry(to, from, name, *args)
|
127
|
+
run_on_entry(to, from, name, *args, **kwargs)
|
136
128
|
|
137
|
-
run_after_transition(from, to, name, *args)
|
129
|
+
run_after_transition(from, to, name, *args, **kwargs)
|
138
130
|
|
139
131
|
return_value.nil? ? transition_value : return_value
|
140
132
|
end
|
@@ -177,31 +169,31 @@ module Workflow
|
|
177
169
|
end
|
178
170
|
end
|
179
171
|
|
180
|
-
def run_before_transition(from, to, event, *args)
|
181
|
-
instance_exec(from.name, to.name, event, *args, &spec.before_transition_proc) if
|
172
|
+
def run_before_transition(from, to, event, *args, **kwargs)
|
173
|
+
instance_exec(from.name, to.name, event, *args, **kwargs, &spec.before_transition_proc) if
|
182
174
|
spec.before_transition_proc
|
183
175
|
end
|
184
176
|
|
185
|
-
def run_on_error(error, from, to, event, *args)
|
177
|
+
def run_on_error(error, from, to, event, *args, **kwargs)
|
186
178
|
if spec.on_error_proc
|
187
|
-
instance_exec(error, from.name, to.name, event, *args, &spec.on_error_proc)
|
179
|
+
instance_exec(error, from.name, to.name, event, *args, **kwargs, &spec.on_error_proc)
|
188
180
|
halt(error.message)
|
189
181
|
else
|
190
182
|
raise error
|
191
183
|
end
|
192
184
|
end
|
193
185
|
|
194
|
-
def run_on_transition(from, to, event, *args)
|
195
|
-
instance_exec(from.name, to.name, event, *args, &spec.on_transition_proc) if spec.on_transition_proc
|
186
|
+
def run_on_transition(from, to, event, *args, **kwargs)
|
187
|
+
instance_exec(from.name, to.name, event, *args, **kwargs, &spec.on_transition_proc) if spec.on_transition_proc
|
196
188
|
end
|
197
189
|
|
198
|
-
def run_after_transition(from, to, event, *args)
|
199
|
-
instance_exec(from.name, to.name, event, *args, &spec.after_transition_proc) if
|
190
|
+
def run_after_transition(from, to, event, *args, **kwargs)
|
191
|
+
instance_exec(from.name, to.name, event, *args, **kwargs, &spec.after_transition_proc) if
|
200
192
|
spec.after_transition_proc
|
201
193
|
end
|
202
194
|
|
203
|
-
def run_action(action, *args)
|
204
|
-
instance_exec(*args, &action) if action
|
195
|
+
def run_action(action, *args, **kwargs)
|
196
|
+
instance_exec(*args, **kwargs, &action) if action
|
205
197
|
end
|
206
198
|
|
207
199
|
def has_callback?(action)
|
@@ -214,27 +206,27 @@ module Workflow
|
|
214
206
|
self.private_methods(false).map(&:to_sym).include?(action)
|
215
207
|
end
|
216
208
|
|
217
|
-
def run_action_callback(action_name, *args)
|
209
|
+
def run_action_callback(action_name, *args, **kwargs)
|
218
210
|
action = action_name.to_sym
|
219
|
-
self.send(action, *args) if has_callback?(action)
|
211
|
+
self.send(action, *args, **kwargs) if has_callback?(action)
|
220
212
|
end
|
221
213
|
|
222
|
-
def run_on_entry(state, prior_state, triggering_event, *args)
|
214
|
+
def run_on_entry(state, prior_state, triggering_event, *args, **kwargs)
|
223
215
|
if state.on_entry
|
224
|
-
instance_exec(prior_state.name, triggering_event, *args, &state.on_entry)
|
216
|
+
instance_exec(prior_state.name, triggering_event, *args, **kwargs, &state.on_entry)
|
225
217
|
else
|
226
218
|
hook_name = "on_#{state}_entry"
|
227
|
-
self.send hook_name, prior_state, triggering_event, *args if has_callback?(hook_name)
|
219
|
+
self.send hook_name, prior_state, triggering_event, *args, **kwargs if has_callback?(hook_name)
|
228
220
|
end
|
229
221
|
end
|
230
222
|
|
231
|
-
def run_on_exit(state, new_state, triggering_event, *args)
|
223
|
+
def run_on_exit(state, new_state, triggering_event, *args, **kwargs)
|
232
224
|
if state
|
233
225
|
if state.on_exit
|
234
|
-
instance_exec(new_state.name, triggering_event, *args, &state.on_exit)
|
226
|
+
instance_exec(new_state.name, triggering_event, *args, **kwargs, &state.on_exit)
|
235
227
|
else
|
236
228
|
hook_name = "on_#{state}_exit"
|
237
|
-
self.send hook_name, new_state, triggering_event, *args if has_callback?(hook_name)
|
229
|
+
self.send hook_name, new_state, triggering_event, *args, **kwargs if has_callback?(hook_name)
|
238
230
|
end
|
239
231
|
end
|
240
232
|
end
|
metadata
CHANGED
@@ -1,118 +1,116 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: workflow
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
4
|
+
version: 3.0.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Vladimir Dobriakov
|
8
|
-
autorequire:
|
8
|
+
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2022-05-29 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rdoc
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
|
-
- - "
|
17
|
+
- - "~>"
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version: '
|
19
|
+
version: '6.1'
|
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: '
|
26
|
+
version: '6.1'
|
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
|
-
version:
|
33
|
+
version: '2.0'
|
34
34
|
type: :development
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
|
-
- - "
|
38
|
+
- - "~>"
|
39
39
|
- !ruby/object:Gem::Version
|
40
|
-
version:
|
40
|
+
version: '2.0'
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
42
|
name: mocha
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
44
44
|
requirements:
|
45
|
-
- - "
|
45
|
+
- - "~>"
|
46
46
|
- !ruby/object:Gem::Version
|
47
|
-
version: '
|
47
|
+
version: '1.8'
|
48
48
|
type: :development
|
49
49
|
prerelease: false
|
50
50
|
version_requirements: !ruby/object:Gem::Requirement
|
51
51
|
requirements:
|
52
|
-
- - "
|
52
|
+
- - "~>"
|
53
53
|
- !ruby/object:Gem::Version
|
54
|
-
version: '
|
54
|
+
version: '1.8'
|
55
55
|
- !ruby/object:Gem::Dependency
|
56
56
|
name: rake
|
57
57
|
requirement: !ruby/object:Gem::Requirement
|
58
58
|
requirements:
|
59
|
-
- - "
|
59
|
+
- - "~>"
|
60
60
|
- !ruby/object:Gem::Version
|
61
|
-
version: '
|
61
|
+
version: '12.3'
|
62
62
|
type: :development
|
63
63
|
prerelease: false
|
64
64
|
version_requirements: !ruby/object:Gem::Requirement
|
65
65
|
requirements:
|
66
|
-
- - "
|
66
|
+
- - "~>"
|
67
67
|
- !ruby/object:Gem::Version
|
68
|
-
version: '
|
68
|
+
version: '12.3'
|
69
69
|
- !ruby/object:Gem::Dependency
|
70
70
|
name: minitest
|
71
71
|
requirement: !ruby/object:Gem::Requirement
|
72
72
|
requirements:
|
73
|
-
- - "
|
73
|
+
- - "~>"
|
74
74
|
- !ruby/object:Gem::Version
|
75
|
-
version: '
|
75
|
+
version: '5.11'
|
76
76
|
type: :development
|
77
77
|
prerelease: false
|
78
78
|
version_requirements: !ruby/object:Gem::Requirement
|
79
79
|
requirements:
|
80
|
-
- - "
|
80
|
+
- - "~>"
|
81
81
|
- !ruby/object:Gem::Version
|
82
|
-
version: '
|
82
|
+
version: '5.11'
|
83
83
|
- !ruby/object:Gem::Dependency
|
84
84
|
name: ruby-graphviz
|
85
85
|
requirement: !ruby/object:Gem::Requirement
|
86
86
|
requirements:
|
87
|
-
- - "
|
87
|
+
- - "~>"
|
88
88
|
- !ruby/object:Gem::Version
|
89
|
-
version: '
|
89
|
+
version: '1.2'
|
90
90
|
type: :development
|
91
91
|
prerelease: false
|
92
92
|
version_requirements: !ruby/object:Gem::Requirement
|
93
93
|
requirements:
|
94
|
-
- - "
|
94
|
+
- - "~>"
|
95
95
|
- !ruby/object:Gem::Version
|
96
|
-
version: '
|
96
|
+
version: '1.2'
|
97
97
|
description: |
|
98
|
-
Workflow is a finite-state-machine-inspired API for modeling and
|
99
|
-
|
98
|
+
Workflow is a finite-state-machine-inspired API for modeling and
|
99
|
+
interacting with what we tend to refer to as 'workflow'.
|
100
100
|
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
|
101
|
+
* nice DSL to describe your states, events and transitions
|
102
|
+
* various hooks for single transitions, entering state etc.
|
103
|
+
* convenient access to the workflow specification: list states, possible events
|
104
|
+
for particular state
|
105
105
|
email:
|
106
106
|
- vladimir@geekq.net
|
107
107
|
executables: []
|
108
108
|
extensions: []
|
109
109
|
extra_rdoc_files:
|
110
|
-
- README.
|
110
|
+
- README.adoc
|
111
111
|
files:
|
112
|
-
- README.
|
112
|
+
- README.adoc
|
113
113
|
- lib/workflow.rb
|
114
|
-
- lib/workflow/adapters/active_record.rb
|
115
|
-
- lib/workflow/adapters/remodel.rb
|
116
114
|
- lib/workflow/draw.rb
|
117
115
|
- lib/workflow/errors.rb
|
118
116
|
- lib/workflow/event.rb
|
@@ -120,11 +118,11 @@ files:
|
|
120
118
|
- lib/workflow/specification.rb
|
121
119
|
- lib/workflow/state.rb
|
122
120
|
- lib/workflow/version.rb
|
123
|
-
homepage:
|
121
|
+
homepage: https://github.com/geekq/workflow
|
124
122
|
licenses:
|
125
123
|
- MIT
|
126
124
|
metadata: {}
|
127
|
-
post_install_message:
|
125
|
+
post_install_message:
|
128
126
|
rdoc_options: []
|
129
127
|
require_paths:
|
130
128
|
- lib
|
@@ -132,16 +130,15 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
132
130
|
requirements:
|
133
131
|
- - ">="
|
134
132
|
- !ruby/object:Gem::Version
|
135
|
-
version: '2.
|
133
|
+
version: '2.7'
|
136
134
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
137
135
|
requirements:
|
138
136
|
- - ">="
|
139
137
|
- !ruby/object:Gem::Version
|
140
138
|
version: '0'
|
141
139
|
requirements: []
|
142
|
-
|
143
|
-
|
144
|
-
signing_key:
|
140
|
+
rubygems_version: 3.1.2
|
141
|
+
signing_key:
|
145
142
|
specification_version: 4
|
146
143
|
summary: A replacement for acts_as_state_machine.
|
147
144
|
test_files: []
|