rails_workflow 0.3.9 → 0.4.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/Rakefile +2 -0
- data/app/concerns/rails_workflow/operation_status.rb +2 -0
- data/app/concerns/rails_workflow/operation_templates/assignments.rb +3 -1
- data/app/concerns/rails_workflow/operation_templates/dependencies.rb +18 -18
- data/app/concerns/rails_workflow/operations/assignments.rb +7 -5
- data/app/concerns/rails_workflow/operations/dependencies.rb +2 -0
- data/app/concerns/rails_workflow/status.rb +11 -15
- data/app/concerns/rails_workflow/user/assignment.rb +2 -0
- data/app/concerns/rails_workflow/uuid.rb +2 -0
- data/app/controllers/rails_workflow/application_controller.rb +2 -0
- data/app/controllers/rails_workflow/errors_controller.rb +2 -0
- data/app/controllers/rails_workflow/operation_templates_controller.rb +3 -1
- data/app/controllers/rails_workflow/operations_controller.rb +3 -1
- data/app/controllers/rails_workflow/process_templates_controller.rb +10 -8
- data/app/controllers/rails_workflow/processes_controller.rb +10 -8
- data/app/decorators/rails_workflow/context_decorator.rb +2 -0
- data/app/decorators/rails_workflow/decorator.rb +2 -0
- data/app/decorators/rails_workflow/operation_decorator.rb +2 -0
- data/app/decorators/rails_workflow/operation_helper_decorator.rb +2 -0
- data/app/decorators/rails_workflow/operation_template_decorator.rb +2 -0
- data/app/decorators/rails_workflow/paginating_decorator.rb +2 -0
- data/app/decorators/rails_workflow/process_decorator.rb +2 -0
- data/app/decorators/rails_workflow/process_template_decorator.rb +2 -0
- data/app/decorators/rails_workflow/status_decorator.rb +2 -0
- data/app/helpers/rails_workflow/application_helper.rb +2 -0
- data/app/jobs/rails_workflow/operation_execution_job.rb +11 -1
- data/app/models/rails_workflow/context.rb +3 -1
- data/app/models/rails_workflow/error.rb +23 -50
- data/app/models/rails_workflow/operation.rb +39 -3
- data/app/models/rails_workflow/operation_template.rb +2 -2
- data/app/models/rails_workflow/process.rb +34 -5
- data/app/models/rails_workflow/process_template.rb +12 -8
- data/app/models/rails_workflow/user_by_group_operation.rb +2 -0
- data/app/models/rails_workflow/user_by_role_operation.rb +2 -0
- data/app/models/rails_workflow/user_operation.rb +2 -0
- data/app/serializers/rails_workflow/operation_template_serializer.rb +2 -0
- data/app/serializers/rails_workflow/process_template_serializer.rb +2 -0
- data/app/services/rails_workflow/default_importer_preprocessor.rb +2 -0
- data/app/services/rails_workflow/process_importer.rb +2 -0
- data/app/views/rails_workflow/processes/index.html.slim +5 -5
- data/config/initializers/rails_workflow.rb +3 -3
- data/config/routes.rb +4 -2
- data/db/migrate/20150630174700_create_workflow_processes.rb +86 -84
- data/lib/generators/rails_workflow/install/install_generator.rb +2 -0
- data/lib/generators/rails_workflow/install/templates/create_workflow_processes.rb +86 -84
- data/lib/rails_workflow/config.rb +65 -24
- data/lib/rails_workflow/db/mysql.rb +3 -1
- data/lib/rails_workflow/db/pg.rb +3 -1
- data/lib/rails_workflow/dependency_resolver.rb +74 -0
- data/lib/rails_workflow/engine.rb +3 -1
- data/lib/rails_workflow/error_builder.rb +57 -0
- data/lib/rails_workflow/error_resolver.rb +72 -0
- data/lib/rails_workflow/operation_builder.rb +95 -0
- data/lib/rails_workflow/operation_runner.rb +113 -0
- data/lib/rails_workflow/process_builder.rb +57 -0
- data/lib/rails_workflow/process_manager.rb +66 -0
- data/lib/rails_workflow/process_runner.rb +72 -0
- data/lib/rails_workflow/version.rb +3 -1
- data/lib/rails_workflow.rb +2 -0
- data/lib/tasks/rails_workflow_tasks.rake +1 -0
- data/spec/concerns/status_spec.rb +25 -0
- data/spec/controllers/rails_workflow/operation_templates_controller_spec.rb +2 -0
- data/spec/controllers/rails_workflow/operations_controller_spec.rb +2 -0
- data/spec/controllers/rails_workflow/process_templates_controller_spec.rb +2 -0
- data/spec/controllers/rails_workflow/processes_controller_spec.rb +3 -1
- data/spec/dummy/Rakefile +2 -0
- data/spec/dummy/app/controllers/application_controller.rb +2 -0
- data/spec/dummy/app/controllers/leads_controller.rb +2 -0
- data/spec/dummy/app/controllers/sales_contacts_controller.rb +2 -0
- data/spec/dummy/app/decorators/lead_decorator.rb +2 -0
- data/spec/dummy/app/decorators/sales_contact_decorator.rb +2 -0
- data/spec/dummy/app/helpers/application_helper.rb +2 -0
- data/spec/dummy/app/helpers/leads_helper.rb +2 -0
- data/spec/dummy/app/helpers/sales_contacts_helper.rb +2 -0
- data/spec/dummy/app/models/bad_operation.rb +2 -0
- data/spec/dummy/app/models/bad_operation_template.rb +2 -0
- data/spec/dummy/app/models/lead.rb +2 -0
- data/spec/dummy/app/models/sales_contact.rb +2 -0
- data/spec/dummy/app/models/user.rb +2 -0
- data/spec/dummy/bin/bundle +2 -0
- data/spec/dummy/bin/rails +2 -0
- data/spec/dummy/bin/rake +2 -0
- data/spec/dummy/config/application.rb +2 -0
- data/spec/dummy/config/boot.rb +2 -0
- data/spec/dummy/config/database.yml.semaphore +2 -2
- data/spec/dummy/config/environment.rb +2 -0
- data/spec/dummy/config/environments/development.rb +2 -0
- data/spec/dummy/config/environments/production.rb +2 -0
- data/spec/dummy/config/environments/test.rb +2 -0
- data/spec/dummy/config/initializers/assets.rb +2 -0
- data/spec/dummy/config/initializers/backtrace_silencers.rb +1 -0
- data/spec/dummy/config/initializers/cookies_serializer.rb +2 -0
- data/spec/dummy/config/initializers/devise.rb +2 -0
- data/spec/dummy/config/initializers/filter_parameter_logging.rb +2 -0
- data/spec/dummy/config/initializers/inflections.rb +1 -0
- data/spec/dummy/config/initializers/mime_types.rb +1 -0
- data/spec/dummy/config/initializers/session_store.rb +2 -0
- data/spec/dummy/config/initializers/workflow.rb +2 -0
- data/spec/dummy/config/initializers/wrap_parameters.rb +2 -0
- data/spec/dummy/config/routes.rb +2 -0
- data/spec/dummy/config.ru +2 -0
- data/spec/dummy/db/migrate/20150127171613_devise_create_users.rb +2 -0
- data/spec/dummy/db/migrate/20150130042852_create_sales_contacts.rb +2 -0
- data/spec/dummy/db/migrate/20150130043008_create_leads.rb +2 -0
- data/spec/dummy/log/development.log +110 -0
- data/spec/dummy/log/test.log +0 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/7O/7O5OddMZvWFGpj71BCdc0vA55rhj4YPoL0XjBV4_OYk.cache +1 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/Cy/CyixQwp8QvorgpRadtYf6_zY35nZZp0JmrhkDN16XPM.cache +1 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/FW/FWR5Q7EP17cTcY35R1MscF6MX2HYiH5I2ZII89YLYxc.cache +1 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/HQ/HQuQO1k4kOyLSDXJEc8p-XR2agdkPF7mIFyh2noiNrU.cache +1 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/N4/N4e3G5QNTts2OVqkL0kxoP1xnAdDWnumpnH1m6WAsuY.cache +0 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/Rs/RsIG_ias53xeb4WHWRodcMcDmVyz1QvLQNy4gV2iBSo.cache +1 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/WI/WI2XYMfwCaPWcjvvouKVltl9oKqKZL-BHePPLhC-rzw.cache +1 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/Yc/YcbQRZWzddLfawePxNTEXcFFiS7asAyrujZzciT99l0.cache +1 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/ai/aihcJWCIJGiHDpamul8bzy4jMsxnhewX6XWtkdsQ9dc.cache +1 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/fR/fRVQN4mU7z3MVJD9u1LMq8idpOH8o2tFh_YouMYGAM8.cache +1 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/gU/gUFNMb7SgxFyz5ZZcGfp-VYRVIw711HUeiWonMzYrcU.cache +1 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/h8/h86FNb4MxO5dq40P8KcCgGwZ_uqd8nn_O2fMWGDApW8.cache +1 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/q7/q7cZDJXZFXTklMF8JAQSMr-MBxOKc7q1vZAPPR5RBf4.cache +2 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/s9/s98GbJDqEe4PG3moRH6h-ukIZmQz9Frq4LO_Z9vCBLM.cache +1 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/xX/xXCd205lXu7u_BuyBL0kfZwkBGJLvocHDItBfU6tMm4.cache +2 -0
- data/spec/factories/context.rb +2 -0
- data/spec/factories/operation_templates.rb +2 -0
- data/spec/factories/operations.rb +3 -1
- data/spec/factories/process_templates.rb +2 -0
- data/spec/factories/processes.rb +3 -1
- data/spec/factories/user.rb +2 -0
- data/spec/factories/workflow_errors.rb +2 -0
- data/spec/features/operations_spec.rb +2 -0
- data/spec/features/process_template_spec.rb +2 -0
- data/spec/lib/error_builder_spec.rb +137 -0
- data/spec/lib/error_resolver_spec.rb +182 -0
- data/spec/lib/operation_builder_spec.rb +69 -0
- data/spec/lib/process_builder_spec.rb +19 -0
- data/spec/{core/rails_workflow → lib}/process_manager_spec.rb +17 -27
- data/spec/models/rails_workflow/context_spec.rb +6 -3
- data/spec/models/rails_workflow/error_spec.rb +20 -147
- data/spec/models/rails_workflow/operation_spec.rb +64 -97
- data/spec/models/rails_workflow/operation_template_spec.rb +24 -11
- data/spec/models/rails_workflow/process_spec.rb +5 -2
- data/spec/models/rails_workflow/process_template_spec.rb +2 -36
- data/spec/rails_helper.rb +2 -0
- data/spec/serializers/process_template_serializer_spec.rb +2 -0
- data/spec/services/process_importer_spec.rb +2 -0
- data/spec/spec_helper.rb +2 -0
- data/spec/support/controller_macros.rb +2 -0
- data/spec/support/pages/operations.rb +2 -0
- data/spec/support/rails_workflow/custom_operation.rb +2 -0
- data/spec/support/rails_workflow/custom_operation_template.rb +2 -0
- data/spec/{core → support}/rails_workflow/prepare_template.rb +3 -1
- data/spec/support/workflow_helper.rb +2 -0
- metadata +54 -28
- data/app/concerns/rails_workflow/operation_templates/default_builder.rb +0 -56
- data/app/concerns/rails_workflow/operations/default_runner.rb +0 -121
- data/app/concerns/rails_workflow/process_templates/default_builder.rb +0 -52
- data/app/concerns/rails_workflow/processes/default_runner.rb +0 -64
- data/app/concerns/rails_workflow/processes/dependency_resolver.rb +0 -54
- data/app/concerns/rails_workflow/reset_cache.rb +0 -13
- data/app/jobs/rails_workflow/operation_error_job.rb +0 -40
- data/app/managers/rails_workflow/process_manager.rb +0 -40
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
class CreateWorkflowProcesses < ActiveRecord::Migration
|
2
4
|
def change
|
3
5
|
create_tables
|
@@ -8,12 +10,12 @@ class CreateWorkflowProcesses < ActiveRecord::Migration
|
|
8
10
|
|
9
11
|
def create_tables
|
10
12
|
[
|
11
|
-
[
|
12
|
-
[
|
13
|
-
[
|
14
|
-
[
|
15
|
-
[
|
16
|
-
[
|
13
|
+
%i[workflow_processes rails_workflow_processes],
|
14
|
+
%i[workflow_operations rails_workflow_operations],
|
15
|
+
%i[workflow_process_templates rails_workflow_process_templates],
|
16
|
+
%i[workflow_operation_templates rails_workflow_operation_templates],
|
17
|
+
%i[workflow_contexts rails_workflow_contexts],
|
18
|
+
%i[workflow_errors rails_workflow_errors]
|
17
19
|
].map do |names|
|
18
20
|
rename_table names[0], names[1] if table_exists? names[0]
|
19
21
|
|
@@ -23,13 +25,13 @@ class CreateWorkflowProcesses < ActiveRecord::Migration
|
|
23
25
|
|
24
26
|
def create_indexes
|
25
27
|
[
|
26
|
-
[:rails_workflow_contexts, [
|
27
|
-
[:rails_workflow_errors, [
|
28
|
-
[
|
29
|
-
[
|
30
|
-
[
|
31
|
-
[
|
32
|
-
[
|
28
|
+
[:rails_workflow_contexts, %i[parent_id parent_type]],
|
29
|
+
[:rails_workflow_errors, %i[parent_id parent_type]],
|
30
|
+
%i[rails_workflow_operation_templates process_template_id],
|
31
|
+
%i[rails_workflow_operation_templates uuid],
|
32
|
+
%i[rails_workflow_process_templates uuid],
|
33
|
+
%i[rails_workflow_operations process_id],
|
34
|
+
%i[rails_workflow_operations template_id]
|
33
35
|
].each do |idx|
|
34
36
|
add_index idx[0], idx[1] unless index_exists? idx[0], idx[1]
|
35
37
|
end
|
@@ -38,92 +40,92 @@ class CreateWorkflowProcesses < ActiveRecord::Migration
|
|
38
40
|
def create_columns
|
39
41
|
{
|
40
42
|
rails_workflow_contexts: [
|
41
|
-
[
|
42
|
-
[
|
43
|
-
[
|
44
|
-
[
|
45
|
-
[
|
43
|
+
%i[integer parent_id],
|
44
|
+
%i[string parent_type],
|
45
|
+
%i[text body],
|
46
|
+
%i[datetime created_at],
|
47
|
+
%i[datetime updated_at]
|
46
48
|
],
|
47
49
|
|
48
50
|
rails_workflow_errors: [
|
49
|
-
[
|
50
|
-
[
|
51
|
-
[
|
52
|
-
[
|
53
|
-
[
|
54
|
-
[
|
55
|
-
[
|
51
|
+
%i[string message],
|
52
|
+
%i[text stack_trace],
|
53
|
+
%i[integer parent_id],
|
54
|
+
%i[string parent_type],
|
55
|
+
%i[datetime created_at],
|
56
|
+
%i[datetime updated_at],
|
57
|
+
%i[boolean resolved]
|
56
58
|
],
|
57
59
|
|
58
60
|
rails_workflow_operation_templates: [
|
59
|
-
[
|
60
|
-
[
|
61
|
-
[
|
62
|
-
[
|
63
|
-
[
|
64
|
-
[
|
65
|
-
[
|
66
|
-
[
|
67
|
-
[
|
68
|
-
[
|
69
|
-
[
|
70
|
-
[
|
71
|
-
[
|
72
|
-
[
|
73
|
-
[
|
74
|
-
[
|
75
|
-
[
|
76
|
-
[
|
77
|
-
[
|
78
|
-
[
|
79
|
-
[
|
61
|
+
%i[string title],
|
62
|
+
%i[string version],
|
63
|
+
%i[string uuid],
|
64
|
+
%i[string tag],
|
65
|
+
%i[text source],
|
66
|
+
%i[text dependencies],
|
67
|
+
%i[string operation_class],
|
68
|
+
%i[integer process_template_id],
|
69
|
+
%i[datetime created_at],
|
70
|
+
%i[datetime updated_at],
|
71
|
+
%i[boolean async],
|
72
|
+
%i[integer child_process_id],
|
73
|
+
%i[integer assignment_id],
|
74
|
+
%i[string assignment_type],
|
75
|
+
%i[string kind],
|
76
|
+
%i[string role],
|
77
|
+
%i[string group],
|
78
|
+
%i[text instruction],
|
79
|
+
%i[boolean is_background],
|
80
|
+
%i[string type],
|
81
|
+
%i[string partial_name]
|
80
82
|
],
|
81
83
|
|
82
84
|
rails_workflow_operations: [
|
83
|
-
[
|
84
|
-
[
|
85
|
-
[
|
86
|
-
[
|
87
|
-
[
|
88
|
-
[
|
89
|
-
[
|
90
|
-
[
|
91
|
-
[
|
92
|
-
[
|
93
|
-
[
|
94
|
-
[
|
95
|
-
[
|
96
|
-
[
|
97
|
-
[
|
98
|
-
[
|
99
|
-
[
|
100
|
-
[
|
85
|
+
%i[integer status],
|
86
|
+
%i[boolean async],
|
87
|
+
%i[string version],
|
88
|
+
%i[string tag],
|
89
|
+
%i[string title],
|
90
|
+
%i[datetime created_at],
|
91
|
+
%i[datetime updated_at],
|
92
|
+
%i[integer process_id],
|
93
|
+
%i[integer template_id],
|
94
|
+
%i[text dependencies],
|
95
|
+
%i[integer child_process_id],
|
96
|
+
%i[integer assignment_id],
|
97
|
+
%i[string assignment_type],
|
98
|
+
%i[datetime assigned_at],
|
99
|
+
%i[string type],
|
100
|
+
%i[boolean is_active],
|
101
|
+
%i[datetime completed_at],
|
102
|
+
%i[boolean is_background]
|
101
103
|
],
|
102
104
|
|
103
105
|
rails_workflow_process_templates: [
|
104
|
-
[
|
105
|
-
[
|
106
|
-
[
|
107
|
-
[
|
108
|
-
[
|
109
|
-
[
|
110
|
-
[
|
111
|
-
[
|
112
|
-
[
|
113
|
-
[
|
114
|
-
[
|
106
|
+
%i[string title],
|
107
|
+
%i[text source],
|
108
|
+
%i[string uuid],
|
109
|
+
%i[string version],
|
110
|
+
%i[string tag],
|
111
|
+
%i[string manager_class],
|
112
|
+
%i[string process_class],
|
113
|
+
%i[datetime created_at],
|
114
|
+
%i[datetime updated_at],
|
115
|
+
%i[string type],
|
116
|
+
%i[string partial_name]
|
115
117
|
],
|
116
118
|
|
117
119
|
rails_workflow_processes: [
|
118
|
-
[
|
119
|
-
[
|
120
|
-
[
|
121
|
-
[
|
122
|
-
[
|
123
|
-
[
|
124
|
-
[
|
125
|
-
[
|
126
|
-
[
|
120
|
+
%i[integer status],
|
121
|
+
%i[string version],
|
122
|
+
%i[string tag],
|
123
|
+
%i[boolean async],
|
124
|
+
%i[string title],
|
125
|
+
%i[datetime created_at],
|
126
|
+
%i[datetime updated_at],
|
127
|
+
%i[integer template_id],
|
128
|
+
%i[string type]
|
127
129
|
]
|
128
130
|
}.each do |table, columns|
|
129
131
|
columns.map do |column|
|
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require 'singleton'
|
2
4
|
require 'guid'
|
3
5
|
require 'bootstrap-rails-engine'
|
@@ -7,40 +9,50 @@ require 'draper'
|
|
7
9
|
require 'sidekiq'
|
8
10
|
require 'active_model_serializers'
|
9
11
|
require 'rails_workflow/db/mysql'
|
12
|
+
require_relative './error_builder'
|
13
|
+
require_relative './error_resolver'
|
14
|
+
require_relative './process_builder'
|
15
|
+
require_relative './operation_builder'
|
16
|
+
require_relative './process_runner'
|
17
|
+
require_relative './operation_runner'
|
18
|
+
require_relative './dependency_resolver'
|
19
|
+
require_relative './process_manager'
|
10
20
|
require 'rails_workflow/db/pg'
|
11
21
|
|
12
22
|
module RailsWorkflow
|
23
|
+
# Engine configuration. Allows to set default or custom classes
|
24
|
+
# and other engine settings.
|
13
25
|
class Config
|
14
26
|
include Singleton
|
15
27
|
|
16
|
-
attr_accessor :operation_types
|
17
|
-
|
18
|
-
attr_reader :cache
|
28
|
+
attr_accessor :operation_types
|
29
|
+
attr_accessor :activejob_enabled
|
19
30
|
|
20
|
-
def initialize
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
title: 'Operation for User By Role',
|
28
|
-
class: 'RailsWorkflow::UserByRoleOperation'
|
29
|
-
},
|
30
|
-
user_group: {
|
31
|
-
title: 'Operation by User Group',
|
32
|
-
class: 'RailsWorkflow::UserByGroupOperation'
|
33
|
-
}
|
34
|
-
}
|
35
|
-
@default_import_preprocessor = 'RailsWorkflow::DefaultImporterPreprocessor'
|
31
|
+
def initialize # rubocop: disable Metrics/MethodLength
|
32
|
+
init_default_operation_types
|
33
|
+
# TODO: rework
|
34
|
+
@default_assignment_by = %i[group role]
|
35
|
+
|
36
|
+
@default_import_preprocessor =
|
37
|
+
'RailsWorkflow::DefaultImporterPreprocessor'
|
36
38
|
@default_operation_template_type = 'RailsWorkflow::OperationTemplate'
|
37
39
|
@default_process_manager = 'RailsWorkflow::ProcessManager'
|
40
|
+
@default_process_builder = 'RailsWorkflow::ProcessBuilder'
|
41
|
+
@default_operation_builder = 'RailsWorkflow::OperationBuilder'
|
42
|
+
@default_error_builder = 'RailsWorkflow::ErrorBuilder'
|
43
|
+
@default_error_resolver = 'RailsWorkflow::ErrorResolver'
|
38
44
|
@default_process_class = 'RailsWorkflow::Process'
|
39
45
|
@default_process_template_type = 'RailsWorkflow::ProcessTemplate'
|
40
|
-
|
46
|
+
|
41
47
|
@default_sql_dialect = 'pg'
|
48
|
+
@default_process_runner = 'RailsWorkflow::ProcessRunner'
|
49
|
+
@default_operation_runner = 'RailsWorkflow::OperationRunner'
|
50
|
+
@default_dependency_resolver = 'RailsWorkflow::DependencyResolver'
|
42
51
|
end
|
43
52
|
|
53
|
+
# TODO: rework defaults
|
54
|
+
|
55
|
+
attr_writer :sql_dialect
|
44
56
|
def sql_dialect
|
45
57
|
case @sql_dialect || @default_sql_dialect
|
46
58
|
when 'pg'
|
@@ -50,6 +62,7 @@ module RailsWorkflow
|
|
50
62
|
end
|
51
63
|
end
|
52
64
|
|
65
|
+
attr_writer :assignment_by
|
53
66
|
def assignment_by
|
54
67
|
@assignment_by || @default_assignment_by
|
55
68
|
end
|
@@ -58,10 +71,13 @@ module RailsWorkflow
|
|
58
71
|
@default_operation_types.merge(@operation_types || {})
|
59
72
|
end
|
60
73
|
|
74
|
+
# TODO: fix
|
61
75
|
def operation_template_klass=(value)
|
62
76
|
@operation_template_type = value
|
63
77
|
end
|
64
78
|
|
79
|
+
attr_writer :import_preprocessor
|
80
|
+
|
65
81
|
def import_preprocessor
|
66
82
|
processor = @import_preprocessor || @default_import_preprocessor
|
67
83
|
processor.constantize.new
|
@@ -79,6 +95,8 @@ module RailsWorkflow
|
|
79
95
|
@process_manager || @default_process_manager
|
80
96
|
end
|
81
97
|
|
98
|
+
attr_writer :process_class
|
99
|
+
|
82
100
|
def process_template_klass=(value)
|
83
101
|
@process_template_type = value
|
84
102
|
end
|
@@ -91,10 +109,33 @@ module RailsWorkflow
|
|
91
109
|
@process_template_type || @default_process_template_type
|
92
110
|
end
|
93
111
|
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
112
|
+
def process_manager
|
113
|
+
# Todo add custom managers support
|
114
|
+
ProcessManager
|
115
|
+
end
|
116
|
+
|
117
|
+
%i[dependency_resolver operation_runner process_runner
|
118
|
+
operation_builder process_builder error_builder error_resolver]
|
119
|
+
.each do |key|
|
120
|
+
instance_eval { attr_writer key }
|
121
|
+
class_eval <<-METHOD
|
122
|
+
def #{key}
|
123
|
+
(@#{key} || @default_#{key}).constantize
|
124
|
+
end
|
125
|
+
METHOD
|
126
|
+
end
|
127
|
+
|
128
|
+
private
|
129
|
+
|
130
|
+
def init_default_operation_types
|
131
|
+
@default_operation_types = {
|
132
|
+
default: { title: 'Default Operation',
|
133
|
+
class: 'RailsWorkflow::Operation' },
|
134
|
+
user_role: { title: 'Operation for User By Role',
|
135
|
+
class: 'RailsWorkflow::UserByRoleOperation' },
|
136
|
+
user_group: { title: 'Operation by User Group',
|
137
|
+
class: 'RailsWorkflow::UserByGroupOperation' }
|
138
|
+
}
|
98
139
|
end
|
99
140
|
end
|
100
141
|
end
|
data/lib/rails_workflow/db/pg.rb
CHANGED
@@ -0,0 +1,74 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module RailsWorkflow
|
4
|
+
# DependencyResolver
|
5
|
+
#
|
6
|
+
# New operation can be added to process if all it's dependencies
|
7
|
+
# are satisfied. For example current operation can depend on some
|
8
|
+
# existing process operation which should be completed - then current
|
9
|
+
# operation can be build
|
10
|
+
class DependencyResolver
|
11
|
+
attr_accessor :process
|
12
|
+
|
13
|
+
delegate :template, :operations, :uncompleted_statuses, to: :process
|
14
|
+
|
15
|
+
def initialize(process)
|
16
|
+
@process = process
|
17
|
+
end
|
18
|
+
|
19
|
+
def build_new_operations(operation)
|
20
|
+
[].tap do |new_operations|
|
21
|
+
matched_templates(operation).each do |operation_template|
|
22
|
+
completed_dependencies = [operation]
|
23
|
+
|
24
|
+
new_operations << operation_builder.new(
|
25
|
+
process, operation_template, completed_dependencies
|
26
|
+
).create_operation
|
27
|
+
end
|
28
|
+
end.compact
|
29
|
+
rescue => exception
|
30
|
+
handle_exception(exception, operation)
|
31
|
+
end
|
32
|
+
|
33
|
+
private
|
34
|
+
|
35
|
+
def handle_exception(exception, operation)
|
36
|
+
error_builder.handle(
|
37
|
+
exception,
|
38
|
+
parent: process, target: :dependency_resolver,
|
39
|
+
method: :build_new_operations, args: [operation]
|
40
|
+
)
|
41
|
+
end
|
42
|
+
|
43
|
+
def error_builder
|
44
|
+
config.error_builder
|
45
|
+
end
|
46
|
+
|
47
|
+
def config
|
48
|
+
RailsWorkflow.config
|
49
|
+
end
|
50
|
+
|
51
|
+
def operation_runner
|
52
|
+
config.operation_runner
|
53
|
+
end
|
54
|
+
|
55
|
+
def operation_builder
|
56
|
+
config.operation_builder
|
57
|
+
end
|
58
|
+
|
59
|
+
def matched_templates(operation)
|
60
|
+
(dependent_templates(operation) - already_built_templates)
|
61
|
+
.select do |operation_template|
|
62
|
+
operation_template.resolve_dependency operation
|
63
|
+
end
|
64
|
+
end
|
65
|
+
|
66
|
+
def dependent_templates(operation)
|
67
|
+
template.dependent_operations(operation)
|
68
|
+
end
|
69
|
+
|
70
|
+
def already_built_templates
|
71
|
+
operations.map(&:template)
|
72
|
+
end
|
73
|
+
end
|
74
|
+
end
|