flow_core 0.0.5 → 0.0.6

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 743fbfab50000cf6b47c17fe0d90d962faad47fb8eeb0cb44df1e777b56fff0d
4
- data.tar.gz: 67d9e0a9f7e7f47d0d958116f4e10d5e885e80ce6b929aa49c49ae844cdc2c18
3
+ metadata.gz: c5e3dd023d304ad83feb5f766e4978391e64a2f4430129545e1e19282a62fe72
4
+ data.tar.gz: 0103c699f2bf9c4b739e9278d9c4d063f9997a0049afb5324afd793103d2c44e
5
5
  SHA512:
6
- metadata.gz: e7b941b64b50e8d083832c3faf1c22f729473fbf1ac7ed1a0ba67f0831bb9d1a7078f95c008f18ae77138358be376124c47c094fb97d6b41ecf18e99f78a0c68
7
- data.tar.gz: 35f944cd17e0b9d07afc0903198ffa9cc43f7d74858fa778112ae4a7c69a0de6a59e21354ab9c4460e2eafb8800f790aa12270dce06ffc85e1bfcafd643e5fca
6
+ metadata.gz: 741e6ce58294ed4cc9ac6992cb54dae77f3bdf9ccd8e2b4a341cca85e70503c50285489cf3a890f8627712c5f4c0c7c52517132ae7d03274103ef653498fe8ae
7
+ data.tar.gz: 39e078ca26644073e09aba704ab509059831ff91af272146593a65052148b509733dd3bbdfe1bcad50b771631973b962aca1c76ca386d2f99da557b68474c637
@@ -27,8 +27,6 @@ module FlowCore
27
27
  scope :errored, -> { where.not(errored_at: nil) }
28
28
  scope :suspended, -> { where.not(suspended_at: nil) }
29
29
 
30
- validate :on_create_validation, on: :create
31
-
32
30
  after_initialize do
33
31
  self.payload ||= {}
34
32
  end
@@ -58,7 +56,6 @@ module FlowCore
58
56
 
59
57
  with_transaction_returning_status do
60
58
  update! stage: :canceled, canceled_at: Time.zone.now
61
- workflow.on_instance_cancel(self)
62
59
 
63
60
  true
64
61
  end
@@ -69,7 +66,6 @@ module FlowCore
69
66
 
70
67
  with_transaction_returning_status do
71
68
  update! stage: :activated, activated_at: Time.zone.now
72
- workflow.on_instance_activate(self)
73
69
 
74
70
  tokens.create! place: workflow.start_place
75
71
 
@@ -87,7 +83,6 @@ module FlowCore
87
83
  task.terminate! reason: "Instance finished"
88
84
  end
89
85
  tokens.where(stage: %i[free locked]).find_each(&:terminate!)
90
- workflow.on_instance_finish(self)
91
86
 
92
87
  true
93
88
  end
@@ -99,7 +94,6 @@ module FlowCore
99
94
  with_transaction_returning_status do
100
95
  tasks.enabled.each { |task| task.terminate! reason: "Instance terminated" }
101
96
  update! stage: :terminated, terminated_at: Time.zone.now, terminate_reason: reason
102
- workflow.on_instance_terminate(self)
103
97
 
104
98
  true
105
99
  end
@@ -120,11 +114,5 @@ module FlowCore
120
114
  def terminate!(reason:)
121
115
  terminate(reason: reason) || raise(FlowCore::InvalidTransition, "Can't terminate Instance##{id}")
122
116
  end
123
-
124
- private
125
-
126
- def on_create_validation
127
- workflow.on_instance_create_validation(self)
128
- end
129
117
  end
130
118
  end
@@ -86,7 +86,6 @@ module FlowCore
86
86
  update! stage: :enabled, enabled_at: Time.zone.now
87
87
 
88
88
  transition.on_task_enable(self)
89
- workflow.on_instance_task_enable(self)
90
89
 
91
90
  true
92
91
  end
@@ -109,7 +108,6 @@ module FlowCore
109
108
  update! stage: :finished, finished_at: Time.zone.now
110
109
 
111
110
  transition.on_task_finish(self)
112
- workflow.on_instance_task_finish(self)
113
111
 
114
112
  true
115
113
  end
@@ -123,7 +121,6 @@ module FlowCore
123
121
  with_transaction_returning_status do
124
122
  update! stage: :terminated, terminated_at: Time.zone.now, terminate_reason: reason
125
123
  transition.on_task_terminate(self)
126
- workflow.on_instance_task_terminate(self)
127
124
 
128
125
  true
129
126
  end
@@ -133,7 +130,6 @@ module FlowCore
133
130
  update! errored_at: Time.zone.now, error_reason: error.message
134
131
  instance.update! errored_at: Time.zone.now
135
132
  transition.on_task_errored(self, error)
136
- workflow.on_instance_task_errored(self, error)
137
133
 
138
134
  true
139
135
  end
@@ -145,7 +141,6 @@ module FlowCore
145
141
  update! errored_at: nil, rescued_at: Time.zone.now
146
142
  instance.update! errored_at: nil, rescued_at: Time.zone.now
147
143
  transition.on_task_rescue(self)
148
- workflow.on_instance_task_rescue(self)
149
144
 
150
145
  true
151
146
  end
@@ -155,7 +150,6 @@ module FlowCore
155
150
  with_transaction_returning_status do
156
151
  update! suspended_at: Time.zone.now
157
152
  transition.on_task_suspend(self)
158
- workflow.on_instance_task_suspend(self)
159
153
 
160
154
  true
161
155
  end
@@ -165,7 +159,6 @@ module FlowCore
165
159
  with_transaction_returning_status do
166
160
  update! suspended_at: nil, resumed_at: Time.zone.now
167
161
  transition.on_task_resume(self)
168
- workflow.on_instance_task_resume(self)
169
162
 
170
163
  true
171
164
  end
@@ -21,14 +21,16 @@ module FlowCore
21
21
 
22
22
  class_attribute :force_workflow_verified_on_create_instance, default: false
23
23
 
24
- include FlowCore::WorkflowCallbacks
25
-
26
24
  def build_instance(attributes = {})
27
25
  if force_workflow_verified_on_create_instance && invalid?
28
26
  raise FlowCore::UnverifiedWorkflow, "Workflow##{id} didn't do soundness check yet."
29
27
  end
30
28
 
31
- instances.build attributes.with_indifferent_access.except(FlowCore::Instance::FORBIDDEN_ATTRIBUTES)
29
+ instance = instances.new type: instance_class
30
+ on_build_instance(instance)
31
+ instance.assign_attributes attributes.except(FlowCore::Instance::FORBIDDEN_ATTRIBUTES)
32
+
33
+ instance
32
34
  end
33
35
 
34
36
  def create_instance(attributes = {})
@@ -212,5 +214,11 @@ module FlowCore
212
214
 
213
215
  graph
214
216
  end
217
+
218
+ def on_build_instance(_instance); end
219
+
220
+ def instance_class
221
+ FlowCore::Instance
222
+ end
215
223
  end
216
224
  end
@@ -15,7 +15,7 @@ class CreateWorkflowTables < ActiveRecord::Migration[6.0]
15
15
  end
16
16
 
17
17
  create_table :flow_core_places do |t|
18
- t.references :workflow, null: false, foreign_key: { to_table: :flow_core_workflows }
18
+ t.references :workflow, null: false, foreign_key: false
19
19
 
20
20
  t.string :name
21
21
  t.string :tag
@@ -26,7 +26,7 @@ class CreateWorkflowTables < ActiveRecord::Migration[6.0]
26
26
  end
27
27
 
28
28
  create_table :flow_core_transitions do |t|
29
- t.references :workflow, null: false, foreign_key: { to_table: :flow_core_workflows }
29
+ t.references :workflow, null: false, foreign_key: false
30
30
 
31
31
  t.string :name
32
32
  t.string :tag
@@ -37,9 +37,9 @@ class CreateWorkflowTables < ActiveRecord::Migration[6.0]
37
37
  end
38
38
 
39
39
  create_table :flow_core_arcs do |t|
40
- t.references :workflow, null: false, foreign_key: { to_table: :flow_core_workflows }
41
- t.references :transition, null: false, foreign_key: { to_table: :flow_core_transitions }
42
- t.references :place, null: false, foreign_key: { to_table: :flow_core_places }
40
+ t.references :workflow, null: false, foreign_key: false
41
+ t.references :transition, null: false, foreign_key: false
42
+ t.references :place, null: false, foreign_key: false
43
43
 
44
44
  t.integer :direction, null: false, default: 0, comment: "0-in, 1-out"
45
45
  t.boolean :fallback_arc, null: false, default: false
@@ -48,7 +48,7 @@ class CreateWorkflowTables < ActiveRecord::Migration[6.0]
48
48
  end
49
49
 
50
50
  create_table :flow_core_instances do |t|
51
- t.references :workflow, null: false, foreign_key: { to_table: :flow_core_workflows }
51
+ t.references :workflow, null: false, foreign_key: false
52
52
 
53
53
  t.string :tag, index: { unique: true }
54
54
 
@@ -62,12 +62,14 @@ class CreateWorkflowTables < ActiveRecord::Migration[6.0]
62
62
 
63
63
  t.text :payload
64
64
 
65
+ t.string :type
66
+
65
67
  t.timestamps
66
68
  end
67
69
 
68
70
  create_table :flow_core_transition_callbacks do |t|
69
- t.references :workflow, foreign_key: { to_table: :flow_core_workflows }
70
- t.references :transition, foreign_key: { to_table: :flow_core_transitions }
71
+ t.references :workflow, foreign_key: false
72
+ t.references :transition, foreign_key: false
71
73
 
72
74
  t.string :configuration
73
75
  t.string :type
@@ -76,8 +78,8 @@ class CreateWorkflowTables < ActiveRecord::Migration[6.0]
76
78
  end
77
79
 
78
80
  create_table :flow_core_transition_triggers do |t|
79
- t.references :workflow, foreign_key: { to_table: :flow_core_workflows }
80
- t.references :transition, foreign_key: { to_table: :flow_core_transitions }
81
+ t.references :workflow, foreign_key: false
82
+ t.references :transition, foreign_key: false
81
83
 
82
84
  t.text :configuration
83
85
  t.string :type
@@ -86,8 +88,8 @@ class CreateWorkflowTables < ActiveRecord::Migration[6.0]
86
88
  end
87
89
 
88
90
  create_table :flow_core_arc_guards do |t|
89
- t.references :workflow, foreign_key: { to_table: :flow_core_workflows }
90
- t.references :arc, foreign_key: { to_table: :flow_core_arcs }
91
+ t.references :workflow, foreign_key: false
92
+ t.references :arc, foreign_key: false
91
93
 
92
94
  t.text :configuration
93
95
  t.string :type
@@ -96,17 +98,17 @@ class CreateWorkflowTables < ActiveRecord::Migration[6.0]
96
98
  end
97
99
 
98
100
  create_table :flow_core_tokens do |t|
99
- t.references :workflow, null: false, foreign_key: { to_table: :flow_core_workflows }
100
- t.references :instance, null: false, foreign_key: { to_table: :flow_core_instances }
101
- t.references :place, null: false, foreign_key: { to_table: :flow_core_places }
101
+ t.references :workflow, null: false, foreign_key: false
102
+ t.references :instance, null: false, foreign_key: false
103
+ t.references :place, null: false, foreign_key: false
102
104
 
103
105
  t.integer :stage, default: 0, comment: "0-free, 1-locked, 11-consumed, 12-terminated"
104
106
  t.datetime :locked_at
105
107
  t.datetime :consumed_at
106
108
  t.datetime :terminated_at
107
109
 
108
- t.references :created_by_task, foreign_key: { to_table: :flow_core_tasks }
109
- t.references :consumed_by_task, foreign_key: { to_table: :flow_core_tasks }
110
+ t.references :created_by_task, foreign_key: false
111
+ t.references :consumed_by_task, foreign_key: false
110
112
 
111
113
  t.boolean :task_created, null: false, default: false
112
114
 
@@ -114,13 +116,13 @@ class CreateWorkflowTables < ActiveRecord::Migration[6.0]
114
116
  end
115
117
 
116
118
  create_table :flow_core_tasks do |t|
117
- t.references :workflow, null: false, foreign_key: { to_table: :flow_core_workflows }
118
- t.references :instance, null: false, foreign_key: { to_table: :flow_core_instances }
119
- t.references :transition, null: false, foreign_key: { to_table: :flow_core_transitions }
119
+ t.references :workflow, null: false, foreign_key: false
120
+ t.references :instance, null: false, foreign_key: false
121
+ t.references :transition, null: false, foreign_key: false
120
122
 
121
123
  t.string :tag, index: { unique: true }
122
124
 
123
- t.references :created_by_token, foreign_key: { to_table: :flow_core_tokens }
125
+ t.references :created_by_token, foreign_key: false
124
126
 
125
127
  t.integer :stage, default: 0, comment: "0-created, 1-enabled, 11-finished, 12-terminated"
126
128
  t.datetime :enabled_at
@@ -144,5 +146,53 @@ class CreateWorkflowTables < ActiveRecord::Migration[6.0]
144
146
 
145
147
  t.timestamps
146
148
  end
149
+
150
+ change_table :flow_core_places do |t|
151
+ t.foreign_key :flow_core_workflows, column: :workflow_id
152
+ end
153
+
154
+ change_table :flow_core_transitions do |t|
155
+ t.foreign_key :flow_core_workflows, column: :workflow_id
156
+ end
157
+
158
+ change_table :flow_core_arcs do |t|
159
+ t.foreign_key :flow_core_workflows, column: :workflow_id
160
+ t.foreign_key :flow_core_transitions, column: :transition_id
161
+ t.foreign_key :flow_core_places, column: :place_id
162
+ end
163
+
164
+ change_table :flow_core_instances do |t|
165
+ t.foreign_key :flow_core_workflows, column: :workflow_id
166
+ end
167
+
168
+ change_table :flow_core_transition_callbacks do |t|
169
+ t.foreign_key :flow_core_workflows, column: :workflow_id
170
+ t.foreign_key :flow_core_transitions, column: :transition_id
171
+ end
172
+
173
+ change_table :flow_core_transition_triggers do |t|
174
+ t.foreign_key :flow_core_workflows, column: :workflow_id
175
+ t.foreign_key :flow_core_transitions, column: :transition_id
176
+ end
177
+
178
+ change_table :flow_core_arc_guards do |t|
179
+ t.foreign_key :flow_core_workflows, column: :workflow_id
180
+ t.foreign_key :flow_core_arcs, column: :arc_id
181
+ end
182
+
183
+ change_table :flow_core_tokens do |t|
184
+ t.foreign_key :flow_core_workflows, column: :workflow_id
185
+ t.foreign_key :flow_core_instances, column: :instance_id
186
+ t.foreign_key :flow_core_places, column: :place_id
187
+ t.foreign_key :flow_core_tasks, column: :created_by_task_id
188
+ t.foreign_key :flow_core_tasks, column: :consumed_by_task_id
189
+ end
190
+
191
+ change_table :flow_core_tasks do |t|
192
+ t.foreign_key :flow_core_workflows, column: :workflow_id
193
+ t.foreign_key :flow_core_instances, column: :instance_id
194
+ t.foreign_key :flow_core_transitions, column: :transition_id
195
+ t.foreign_key :flow_core_tokens, column: :created_by_token_id
196
+ end
147
197
  end
148
198
  end
@@ -10,7 +10,8 @@ class CreatePipelineTables < ActiveRecord::Migration[6.0]
10
10
  end
11
11
 
12
12
  create_table :flow_core_steps do |t|
13
- t.references :pipeline, null: false, foreign_key: { to_table: :flow_core_pipelines }
13
+ t.references :pipeline, null: false, foreign_key: false
14
+ t.references :branch, foreign_key: false
14
15
 
15
16
  t.string :ancestry, index: true
16
17
  t.integer :position, null: false
@@ -19,14 +20,14 @@ class CreatePipelineTables < ActiveRecord::Migration[6.0]
19
20
  t.string :type
20
21
  t.boolean :verified, null: false, default: false
21
22
 
22
- t.references :redirect_to_step, foreign_key: { to_table: :flow_core_steps }
23
+ t.references :redirect_to_step, foreign_key: false
23
24
 
24
25
  t.timestamps
25
26
  end
26
27
 
27
28
  create_table :flow_core_branches do |t|
28
- t.references :pipeline, null: false, foreign_key: { to_table: :flow_core_pipelines }
29
- t.references :step, null: false, foreign_key: { to_table: :flow_core_steps }
29
+ t.references :pipeline, null: false, foreign_key: false
30
+ t.references :step, null: false, foreign_key: false
30
31
 
31
32
  t.string :name
32
33
  t.boolean :fallback_branch, null: false, default: false
@@ -35,7 +36,14 @@ class CreatePipelineTables < ActiveRecord::Migration[6.0]
35
36
  end
36
37
 
37
38
  change_table :flow_core_steps do |t|
38
- t.references :branch, foreign_key: { to_table: :flow_core_branches }
39
+ t.foreign_key :flow_core_pipelines, column: :pipeline_id
40
+ t.foreign_key :flow_core_branches, column: :branch_id
41
+ t.foreign_key :flow_core_steps, column: :redirect_to_step_id
42
+ end
43
+
44
+ change_table :flow_core_branches do |t|
45
+ t.foreign_key :flow_core_pipelines, column: :pipeline_id
46
+ t.foreign_key :flow_core_steps, column: :step_id
39
47
  end
40
48
 
41
49
  change_table :flow_core_transition_triggers do |t|
@@ -16,7 +16,6 @@ require "flow_core/arc_guardable"
16
16
  require "flow_core/transition_triggerable"
17
17
  require "flow_core/transition_callbackable"
18
18
  require "flow_core/task_executable"
19
- require "flow_core/workflow_callbacks"
20
19
 
21
20
  require "flow_core/definition"
22
21
  require "flow_core/violations"
@@ -11,24 +11,15 @@ module FlowCore
11
11
  after_save :notify_workflow_task_finished!, if: :implicit_notify_workflow_task_finished
12
12
  end
13
13
 
14
- # For automatic task
15
- def run!
16
- raise NotImplementedError
17
- end
18
-
19
14
  def finished?
20
15
  raise NotImplementedError
21
16
  end
22
17
 
23
- def implicit_notify_workflow_task_finished
24
- true
25
- end
18
+ private
26
19
 
27
- def auto_finishable?
28
- false
29
- end
30
-
31
- protected
20
+ def implicit_notify_workflow_task_finished
21
+ true
22
+ end
32
23
 
33
24
  def notify_workflow_task_finished!
34
25
  task.finish! if finished?
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module FlowCore
4
- VERSION = "0.0.5"
4
+ VERSION = "0.0.6"
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: flow_core
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.5
4
+ version: 0.0.6
5
5
  platform: ruby
6
6
  authors:
7
7
  - jasl
8
- autorequire:
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2020-06-09 00:00:00.000000000 Z
11
+ date: 2020-06-17 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: acts_as_list
@@ -66,20 +66,6 @@ dependencies:
66
66
  - - "~>"
67
67
  - !ruby/object:Gem::Version
68
68
  version: '0.5'
69
- - !ruby/object:Gem::Dependency
70
- name: sqlite3
71
- requirement: !ruby/object:Gem::Requirement
72
- requirements:
73
- - - "~>"
74
- - !ruby/object:Gem::Version
75
- version: '1.4'
76
- type: :development
77
- prerelease: false
78
- version_requirements: !ruby/object:Gem::Requirement
79
- requirements:
80
- - - "~>"
81
- - !ruby/object:Gem::Version
82
- version: '1.4'
83
69
  description: A multi purpose, extendable, Workflow-net-based workflow engine for Rails
84
70
  applications, focusing on workflow definition and scheduling.
85
71
  email:
@@ -132,13 +118,12 @@ files:
132
118
  - lib/flow_core/transition_triggerable.rb
133
119
  - lib/flow_core/version.rb
134
120
  - lib/flow_core/violations.rb
135
- - lib/flow_core/workflow_callbacks.rb
136
121
  - lib/tasks/flow_core_tasks.rake
137
122
  homepage: https://github.com/rails-engine/flow_core
138
123
  licenses:
139
124
  - MIT
140
125
  metadata: {}
141
- post_install_message:
126
+ post_install_message:
142
127
  rdoc_options: []
143
128
  require_paths:
144
129
  - lib
@@ -154,7 +139,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
154
139
  version: '0'
155
140
  requirements: []
156
141
  rubygems_version: 3.1.4
157
- signing_key:
142
+ signing_key:
158
143
  specification_version: 4
159
144
  summary: A multi purpose, extendable, Workflow-net-based workflow engine for Rails
160
145
  applications
@@ -1,31 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module FlowCore
4
- module WorkflowCallbacks
5
- extend ActiveSupport::Concern
6
-
7
- def on_instance_create_validation(_instance); end
8
-
9
- def on_instance_cancel(_instance); end
10
-
11
- def on_instance_activate(_instance); end
12
-
13
- def on_instance_finish(_instance); end
14
-
15
- def on_instance_terminate(_instance); end
16
-
17
- def on_instance_task_enable(_task); end
18
-
19
- def on_instance_task_finish(_task); end
20
-
21
- def on_instance_task_terminate(_task); end
22
-
23
- def on_instance_task_errored(_task, _error); end
24
-
25
- def on_instance_task_rescue(_task); end
26
-
27
- def on_instance_task_suspend(_task); end
28
-
29
- def on_instance_task_resume(_task); end
30
- end
31
- end