workflow 2.0.0 → 3.0.0

Sign up to get free protection for your applications and to get access to all the features.
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
- begin
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: 2.0.0
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: 2019-01-12 00:00:00.000000000 Z
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: '3.12'
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: '3.12'
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: 1.0.0
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: 1.0.0
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: '0'
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: '0'
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: '0'
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: '0'
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: '0'
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: '0'
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: '0'
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: '0'
96
+ version: '1.2'
97
97
  description: |
98
- Workflow is a finite-state-machine-inspired API for modeling and interacting
99
- with what we tend to refer to as 'workflow'.
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
- * 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
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.markdown
110
+ - README.adoc
111
111
  files:
112
- - README.markdown
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: http://www.geekq.net/workflow/
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.3'
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
- rubyforge_project:
143
- rubygems_version: 2.7.6
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: []