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.
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: []