rails_workflow 0.3.9 → 0.4.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (161) hide show
  1. checksums.yaml +4 -4
  2. data/Rakefile +2 -0
  3. data/app/concerns/rails_workflow/operation_status.rb +2 -0
  4. data/app/concerns/rails_workflow/operation_templates/assignments.rb +3 -1
  5. data/app/concerns/rails_workflow/operation_templates/dependencies.rb +18 -18
  6. data/app/concerns/rails_workflow/operations/assignments.rb +7 -5
  7. data/app/concerns/rails_workflow/operations/dependencies.rb +2 -0
  8. data/app/concerns/rails_workflow/status.rb +11 -15
  9. data/app/concerns/rails_workflow/user/assignment.rb +2 -0
  10. data/app/concerns/rails_workflow/uuid.rb +2 -0
  11. data/app/controllers/rails_workflow/application_controller.rb +2 -0
  12. data/app/controllers/rails_workflow/errors_controller.rb +2 -0
  13. data/app/controllers/rails_workflow/operation_templates_controller.rb +3 -1
  14. data/app/controllers/rails_workflow/operations_controller.rb +3 -1
  15. data/app/controllers/rails_workflow/process_templates_controller.rb +10 -8
  16. data/app/controllers/rails_workflow/processes_controller.rb +10 -8
  17. data/app/decorators/rails_workflow/context_decorator.rb +2 -0
  18. data/app/decorators/rails_workflow/decorator.rb +2 -0
  19. data/app/decorators/rails_workflow/operation_decorator.rb +2 -0
  20. data/app/decorators/rails_workflow/operation_helper_decorator.rb +2 -0
  21. data/app/decorators/rails_workflow/operation_template_decorator.rb +2 -0
  22. data/app/decorators/rails_workflow/paginating_decorator.rb +2 -0
  23. data/app/decorators/rails_workflow/process_decorator.rb +2 -0
  24. data/app/decorators/rails_workflow/process_template_decorator.rb +2 -0
  25. data/app/decorators/rails_workflow/status_decorator.rb +2 -0
  26. data/app/helpers/rails_workflow/application_helper.rb +2 -0
  27. data/app/jobs/rails_workflow/operation_execution_job.rb +11 -1
  28. data/app/models/rails_workflow/context.rb +3 -1
  29. data/app/models/rails_workflow/error.rb +23 -50
  30. data/app/models/rails_workflow/operation.rb +39 -3
  31. data/app/models/rails_workflow/operation_template.rb +2 -2
  32. data/app/models/rails_workflow/process.rb +34 -5
  33. data/app/models/rails_workflow/process_template.rb +12 -8
  34. data/app/models/rails_workflow/user_by_group_operation.rb +2 -0
  35. data/app/models/rails_workflow/user_by_role_operation.rb +2 -0
  36. data/app/models/rails_workflow/user_operation.rb +2 -0
  37. data/app/serializers/rails_workflow/operation_template_serializer.rb +2 -0
  38. data/app/serializers/rails_workflow/process_template_serializer.rb +2 -0
  39. data/app/services/rails_workflow/default_importer_preprocessor.rb +2 -0
  40. data/app/services/rails_workflow/process_importer.rb +2 -0
  41. data/app/views/rails_workflow/processes/index.html.slim +5 -5
  42. data/config/initializers/rails_workflow.rb +3 -3
  43. data/config/routes.rb +4 -2
  44. data/db/migrate/20150630174700_create_workflow_processes.rb +86 -84
  45. data/lib/generators/rails_workflow/install/install_generator.rb +2 -0
  46. data/lib/generators/rails_workflow/install/templates/create_workflow_processes.rb +86 -84
  47. data/lib/rails_workflow/config.rb +65 -24
  48. data/lib/rails_workflow/db/mysql.rb +3 -1
  49. data/lib/rails_workflow/db/pg.rb +3 -1
  50. data/lib/rails_workflow/dependency_resolver.rb +74 -0
  51. data/lib/rails_workflow/engine.rb +3 -1
  52. data/lib/rails_workflow/error_builder.rb +57 -0
  53. data/lib/rails_workflow/error_resolver.rb +72 -0
  54. data/lib/rails_workflow/operation_builder.rb +95 -0
  55. data/lib/rails_workflow/operation_runner.rb +113 -0
  56. data/lib/rails_workflow/process_builder.rb +57 -0
  57. data/lib/rails_workflow/process_manager.rb +66 -0
  58. data/lib/rails_workflow/process_runner.rb +72 -0
  59. data/lib/rails_workflow/version.rb +3 -1
  60. data/lib/rails_workflow.rb +2 -0
  61. data/lib/tasks/rails_workflow_tasks.rake +1 -0
  62. data/spec/concerns/status_spec.rb +25 -0
  63. data/spec/controllers/rails_workflow/operation_templates_controller_spec.rb +2 -0
  64. data/spec/controllers/rails_workflow/operations_controller_spec.rb +2 -0
  65. data/spec/controllers/rails_workflow/process_templates_controller_spec.rb +2 -0
  66. data/spec/controllers/rails_workflow/processes_controller_spec.rb +3 -1
  67. data/spec/dummy/Rakefile +2 -0
  68. data/spec/dummy/app/controllers/application_controller.rb +2 -0
  69. data/spec/dummy/app/controllers/leads_controller.rb +2 -0
  70. data/spec/dummy/app/controllers/sales_contacts_controller.rb +2 -0
  71. data/spec/dummy/app/decorators/lead_decorator.rb +2 -0
  72. data/spec/dummy/app/decorators/sales_contact_decorator.rb +2 -0
  73. data/spec/dummy/app/helpers/application_helper.rb +2 -0
  74. data/spec/dummy/app/helpers/leads_helper.rb +2 -0
  75. data/spec/dummy/app/helpers/sales_contacts_helper.rb +2 -0
  76. data/spec/dummy/app/models/bad_operation.rb +2 -0
  77. data/spec/dummy/app/models/bad_operation_template.rb +2 -0
  78. data/spec/dummy/app/models/lead.rb +2 -0
  79. data/spec/dummy/app/models/sales_contact.rb +2 -0
  80. data/spec/dummy/app/models/user.rb +2 -0
  81. data/spec/dummy/bin/bundle +2 -0
  82. data/spec/dummy/bin/rails +2 -0
  83. data/spec/dummy/bin/rake +2 -0
  84. data/spec/dummy/config/application.rb +2 -0
  85. data/spec/dummy/config/boot.rb +2 -0
  86. data/spec/dummy/config/database.yml.semaphore +2 -2
  87. data/spec/dummy/config/environment.rb +2 -0
  88. data/spec/dummy/config/environments/development.rb +2 -0
  89. data/spec/dummy/config/environments/production.rb +2 -0
  90. data/spec/dummy/config/environments/test.rb +2 -0
  91. data/spec/dummy/config/initializers/assets.rb +2 -0
  92. data/spec/dummy/config/initializers/backtrace_silencers.rb +1 -0
  93. data/spec/dummy/config/initializers/cookies_serializer.rb +2 -0
  94. data/spec/dummy/config/initializers/devise.rb +2 -0
  95. data/spec/dummy/config/initializers/filter_parameter_logging.rb +2 -0
  96. data/spec/dummy/config/initializers/inflections.rb +1 -0
  97. data/spec/dummy/config/initializers/mime_types.rb +1 -0
  98. data/spec/dummy/config/initializers/session_store.rb +2 -0
  99. data/spec/dummy/config/initializers/workflow.rb +2 -0
  100. data/spec/dummy/config/initializers/wrap_parameters.rb +2 -0
  101. data/spec/dummy/config/routes.rb +2 -0
  102. data/spec/dummy/config.ru +2 -0
  103. data/spec/dummy/db/migrate/20150127171613_devise_create_users.rb +2 -0
  104. data/spec/dummy/db/migrate/20150130042852_create_sales_contacts.rb +2 -0
  105. data/spec/dummy/db/migrate/20150130043008_create_leads.rb +2 -0
  106. data/spec/dummy/log/development.log +110 -0
  107. data/spec/dummy/log/test.log +0 -0
  108. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/7O/7O5OddMZvWFGpj71BCdc0vA55rhj4YPoL0XjBV4_OYk.cache +1 -0
  109. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/Cy/CyixQwp8QvorgpRadtYf6_zY35nZZp0JmrhkDN16XPM.cache +1 -0
  110. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/FW/FWR5Q7EP17cTcY35R1MscF6MX2HYiH5I2ZII89YLYxc.cache +1 -0
  111. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/HQ/HQuQO1k4kOyLSDXJEc8p-XR2agdkPF7mIFyh2noiNrU.cache +1 -0
  112. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/N4/N4e3G5QNTts2OVqkL0kxoP1xnAdDWnumpnH1m6WAsuY.cache +0 -0
  113. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/Rs/RsIG_ias53xeb4WHWRodcMcDmVyz1QvLQNy4gV2iBSo.cache +1 -0
  114. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/WI/WI2XYMfwCaPWcjvvouKVltl9oKqKZL-BHePPLhC-rzw.cache +1 -0
  115. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/Yc/YcbQRZWzddLfawePxNTEXcFFiS7asAyrujZzciT99l0.cache +1 -0
  116. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/ai/aihcJWCIJGiHDpamul8bzy4jMsxnhewX6XWtkdsQ9dc.cache +1 -0
  117. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/fR/fRVQN4mU7z3MVJD9u1LMq8idpOH8o2tFh_YouMYGAM8.cache +1 -0
  118. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/gU/gUFNMb7SgxFyz5ZZcGfp-VYRVIw711HUeiWonMzYrcU.cache +1 -0
  119. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/h8/h86FNb4MxO5dq40P8KcCgGwZ_uqd8nn_O2fMWGDApW8.cache +1 -0
  120. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/q7/q7cZDJXZFXTklMF8JAQSMr-MBxOKc7q1vZAPPR5RBf4.cache +2 -0
  121. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/s9/s98GbJDqEe4PG3moRH6h-ukIZmQz9Frq4LO_Z9vCBLM.cache +1 -0
  122. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/xX/xXCd205lXu7u_BuyBL0kfZwkBGJLvocHDItBfU6tMm4.cache +2 -0
  123. data/spec/factories/context.rb +2 -0
  124. data/spec/factories/operation_templates.rb +2 -0
  125. data/spec/factories/operations.rb +3 -1
  126. data/spec/factories/process_templates.rb +2 -0
  127. data/spec/factories/processes.rb +3 -1
  128. data/spec/factories/user.rb +2 -0
  129. data/spec/factories/workflow_errors.rb +2 -0
  130. data/spec/features/operations_spec.rb +2 -0
  131. data/spec/features/process_template_spec.rb +2 -0
  132. data/spec/lib/error_builder_spec.rb +137 -0
  133. data/spec/lib/error_resolver_spec.rb +182 -0
  134. data/spec/lib/operation_builder_spec.rb +69 -0
  135. data/spec/lib/process_builder_spec.rb +19 -0
  136. data/spec/{core/rails_workflow → lib}/process_manager_spec.rb +17 -27
  137. data/spec/models/rails_workflow/context_spec.rb +6 -3
  138. data/spec/models/rails_workflow/error_spec.rb +20 -147
  139. data/spec/models/rails_workflow/operation_spec.rb +64 -97
  140. data/spec/models/rails_workflow/operation_template_spec.rb +24 -11
  141. data/spec/models/rails_workflow/process_spec.rb +5 -2
  142. data/spec/models/rails_workflow/process_template_spec.rb +2 -36
  143. data/spec/rails_helper.rb +2 -0
  144. data/spec/serializers/process_template_serializer_spec.rb +2 -0
  145. data/spec/services/process_importer_spec.rb +2 -0
  146. data/spec/spec_helper.rb +2 -0
  147. data/spec/support/controller_macros.rb +2 -0
  148. data/spec/support/pages/operations.rb +2 -0
  149. data/spec/support/rails_workflow/custom_operation.rb +2 -0
  150. data/spec/support/rails_workflow/custom_operation_template.rb +2 -0
  151. data/spec/{core → support}/rails_workflow/prepare_template.rb +3 -1
  152. data/spec/support/workflow_helper.rb +2 -0
  153. metadata +54 -28
  154. data/app/concerns/rails_workflow/operation_templates/default_builder.rb +0 -56
  155. data/app/concerns/rails_workflow/operations/default_runner.rb +0 -121
  156. data/app/concerns/rails_workflow/process_templates/default_builder.rb +0 -52
  157. data/app/concerns/rails_workflow/processes/default_runner.rb +0 -64
  158. data/app/concerns/rails_workflow/processes/dependency_resolver.rb +0 -54
  159. data/app/concerns/rails_workflow/reset_cache.rb +0 -13
  160. data/app/jobs/rails_workflow/operation_error_job.rb +0 -40
  161. data/app/managers/rails_workflow/process_manager.rb +0 -40
@@ -1,15 +1,16 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module RailsWorkflow
2
4
  # Operation is a key building block for a Rails Workflow.
3
5
  # This model is used to save operation meta data, describe relation
4
6
  # with operation context etc.
5
7
  class Operation < ActiveRecord::Base
6
8
  include OperationStatus
7
-
8
- include Operations::DefaultRunner
9
9
  include Operations::Dependencies
10
10
  include Operations::Assignments
11
11
 
12
12
  belongs_to :process, class_name: 'RailsWorkflow::Process'
13
+ alias parent process
13
14
  belongs_to :template, class_name: 'RailsWorkflow::OperationTemplate'
14
15
  belongs_to :child_process, class_name: 'RailsWorkflow::Process'
15
16
  has_one :context, class_name: 'RailsWorkflow::Context', as: :parent
@@ -18,9 +19,10 @@ module RailsWorkflow
18
19
  delegate :data, to: :context
19
20
  delegate :role, to: :template
20
21
  delegate :group, to: :template
22
+ delegate :start, :complete, :skip, :cancel, to: :runner
21
23
 
22
24
  scope :with_child_process, -> { where.not(child_process: nil) }
23
- scope :incompleted, -> { where(status: user_ready_statuses) }
25
+ scope :uncompleted, -> { where(status: user_ready_statuses) }
24
26
 
25
27
  def instruction
26
28
  template.instruction
@@ -44,10 +46,44 @@ module RailsWorkflow
44
46
  assignment && assignment == user
45
47
  end
46
48
 
49
+ def execute
50
+ true
51
+ end
52
+
53
+ # This method allows you to add requirements for operation to start.
54
+ # For example some operation can't start because of some process
55
+ # or overall system conditions.
56
+ # By default any operation can start :)
57
+ def can_start?
58
+ status.in? [Status::NOT_STARTED, Status::IN_PROGRESS]
59
+ end
60
+
61
+ def completed?
62
+ completed_statuses.include? status
63
+ end
64
+
65
+ def completable?
66
+ child_process_done?
67
+ end
68
+
47
69
  def can_be_continued_by?(user, current_operation)
48
70
  waiting? &&
49
71
  assigned_to?(user) &&
50
72
  (current_operation.nil? || current_operation != self)
51
73
  end
74
+
75
+ private
76
+
77
+ def child_process_done?
78
+ child_process.nil? || child_process.status == Status::DONE
79
+ end
80
+
81
+ def config
82
+ RailsWorkflow.config
83
+ end
84
+
85
+ def runner
86
+ @runner ||= config.operation_runner.new(self)
87
+ end
52
88
  end
53
89
  end
@@ -1,11 +1,11 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module RailsWorkflow
2
4
  class OperationTemplate < ActiveRecord::Base
3
5
  include OperationStatus
4
6
  include RailsWorkflow::Uuid
5
7
  include OperationTemplates::Dependencies
6
8
  include OperationTemplates::Assignments
7
- include OperationTemplates::DefaultBuilder
8
- include ResetCache
9
9
 
10
10
  belongs_to :process_template, class_name: 'RailsWorkflow::ProcessTemplate'
11
11
  belongs_to :child_process, class_name: 'RailsWorkflow::ProcessTemplate'
@@ -1,19 +1,23 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module RailsWorkflow
4
+ # Process stores service information including links to process template,
5
+ # all operations, parent operation, context etc.
2
6
  class Process < ActiveRecord::Base
3
7
  include Status
4
- include Processes::DependencyResolver
5
- include Processes::DefaultRunner
6
8
 
7
9
  belongs_to :template, class_name: 'RailsWorkflow::ProcessTemplate'
8
10
  has_many :operations, class_name: 'RailsWorkflow::Operation'
9
11
  has_one :parent_operation,
10
- class_name: 'RailsWorkflow::Operation',
11
- foreign_key: :child_process_id
12
+ class_name: 'RailsWorkflow::Operation',
13
+ foreign_key: :child_process_id
14
+
15
+ alias parent parent_operation
12
16
  has_one :context, class_name: 'RailsWorkflow::Context', as: :parent
13
17
  has_many :workflow_errors, class_name: 'RailsWorkflow::Error', as: :parent
14
18
 
15
19
  delegate :data, to: :context
16
- scope :by_status, -> (status) { where(status: status) }
20
+ scope :by_status, ->(status) { where(status: status) }
17
21
 
18
22
  def manager
19
23
  @manager ||= template.manager_class.new(self)
@@ -32,5 +36,30 @@ module RailsWorkflow
32
36
  def self.statuses_array
33
37
  (NOT_STARTED..ROLLBACK).to_a
34
38
  end
39
+
40
+ def uncompleted?
41
+ uncompleted_statuses.include?(status) &&
42
+ uncompleted_operations.size.zero?
43
+ end
44
+
45
+ # Returns set or operation that not yet completed.
46
+ # Operation complete in DONE, SKIPPED, CANCELED, etc many other statuses
47
+ def uncompleted_operations
48
+ operations.reject(&:completed?)
49
+ end
50
+
51
+ def can_start?
52
+ [Status::NOT_STARTED, Status::IN_PROGRESS]
53
+ .include?(status) && !operations.empty?
54
+ end
55
+
56
+ def unresolved_errors
57
+ workflow_errors.unresolved.where.not(id: id)
58
+ end
59
+
60
+ def complete
61
+ self.status = Status::DONE
62
+ save
63
+ end
35
64
  end
36
65
  end
@@ -1,10 +1,11 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module RailsWorkflow
2
4
  class ProcessTemplate < ActiveRecord::Base
3
- include ProcessTemplates::DefaultBuilder
4
5
  include RailsWorkflow::Uuid
5
- include ResetCache
6
-
7
- has_many :operations, -> { order(id: :asc) }, class_name: 'OperationTemplate'
6
+ has_many :operations,
7
+ -> { order(id: :asc) },
8
+ class_name: 'OperationTemplate'
8
9
 
9
10
  def other_processes
10
11
  ProcessTemplate.where.not(id: id)
@@ -13,15 +14,17 @@ module RailsWorkflow
13
14
  # we try to read process class from template
14
15
  # and set default Workflow::Process if blank process_class on template
15
16
  def process_class
16
- get_class_for :process_class, RailsWorkflow.config.process_class
17
+ get_class_for :process_class,
18
+ RailsWorkflow.config.process_class
17
19
  end
18
20
 
19
21
  def manager_class
20
- get_class_for :manager_class, RailsWorkflow.config.manager_class
22
+ get_class_for(:manager_class,
23
+ RailsWorkflow.config.manager_class)
21
24
  end
22
25
 
23
26
  def independent_operations
24
- operations.select(&:independent?)
27
+ operations.independent_only.to_a
25
28
  end
26
29
 
27
30
  # here we calculate template operations that depends on
@@ -29,7 +32,8 @@ module RailsWorkflow
29
32
  def dependent_operations(operation)
30
33
  operations.select do |top|
31
34
  top.dependencies.select do |dp|
32
- dp['id'] == operation.template.id && dp['statuses'].include?(operation.status)
35
+ dp['id'] == operation.template.id &&
36
+ dp['statuses'].include?(operation.status)
33
37
  end.present?
34
38
  end
35
39
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module RailsWorkflow
2
4
  # Used to describe user operations which assignment
3
5
  # is depend on user group.
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module RailsWorkflow
2
4
  # Used to describe user operations which assignment
3
5
  # depends on user role.
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module RailsWorkflow
2
4
  # Default class to describe User operation.
3
5
  # It describes two main differences of user
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module RailsWorkflow
2
4
  class OperationTemplateSerializer < ActiveModel::Serializer
3
5
  attributes :uuid, :title, :source, :dependencies, :operation_class,
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module RailsWorkflow
2
4
  class ProcessTemplateSerializer < ActiveModel::Serializer
3
5
  attributes :uuid, :title, :source,
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module RailsWorkflow
2
4
  class DefaultImporterPreprocessor
3
5
  def prepare(json)
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module RailsWorkflow
2
4
  class ProcessImporter
3
5
  def initialize(json)
@@ -14,19 +14,19 @@ ol.breadcrumb.alert-warning
14
14
  span.badge< = @statistic[:all]
15
15
  = link_to processes_path(filter: {status: "in_progress"}), class: "btn btn-primary" do
16
16
  | In progress
17
- span.badge< = @statistic[:statuses][RailsWorkflow::Process::IN_PROGRESS]
17
+ span.badge< = @statistic[:statuses][RailsWorkflow::Status::IN_PROGRESS]
18
18
  = link_to processes_path(filter: {status: "done"}), class: "btn btn-success" do
19
19
  | Done
20
- span.badge< = @statistic[:statuses][RailsWorkflow::Process::DONE]
20
+ span.badge< = @statistic[:statuses][RailsWorkflow::Status::DONE]
21
21
  = link_to processes_path(filter: {status: "waiting"}), class: "btn btn-info" do
22
22
  | Waiting
23
- span.badge< = @statistic[:statuses][RailsWorkflow::Process::WAITING]
23
+ span.badge< = @statistic[:statuses][RailsWorkflow::Status::WAITING]
24
24
  = link_to processes_path(filter: {status: "not_started"}), class: "btn btn-warning" do
25
25
  | Not Started
26
- span.badge< = @statistic[:statuses][RailsWorkflow::Process::NOT_STARTED]
26
+ span.badge< = @statistic[:statuses][RailsWorkflow::Status::NOT_STARTED]
27
27
  = link_to processes_path(filter: {status: "error"}), class: "btn btn-danger" do
28
28
  | Error
29
- span.badge< = @statistic[:statuses][RailsWorkflow::Process::ERROR]
29
+ span.badge< = @statistic[:statuses][RailsWorkflow::Status::ERROR]
30
30
 
31
31
  table.table.table-striped.table-hover
32
32
  thead
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  class ActionController::Base
2
4
  def set_current_operation
3
5
  session[:current_operation_id] = @operation.id
@@ -20,14 +22,12 @@ class ActionController::Base
20
22
  else
21
23
 
22
24
  @current_workflow_operation = begin
23
-
24
- if RailsWorkflow::Operation.exists?(id: operation_id, status: RailsWorkflow::Operation::WAITING)
25
+ if RailsWorkflow::Operation.exists?(id: operation_id, status: RailsWorkflow::Status::WAITING)
25
26
  operation = RailsWorkflow::Operation.find(operation_id)
26
27
  RailsWorkflow::OperationHelperDecorator.decorate(operation)
27
28
  else
28
29
  clear_current_operation
29
30
  end
30
-
31
31
  end
32
32
  end
33
33
  end
data/config/routes.rb CHANGED
@@ -1,5 +1,7 @@
1
+ # frozen_string_literal: true
2
+
1
3
  RailsWorkflow::Engine.routes.draw do
2
- resources :operations, only: [:index, :show] do
4
+ resources :operations, only: %i[index show] do
3
5
  collection do
4
6
  get :complete
5
7
  get :skip
@@ -20,7 +22,7 @@ RailsWorkflow::Engine.routes.draw do
20
22
  put :retry
21
23
  end
22
24
  end
23
- resources :operations, except: [:create, :update, :destroy] do
25
+ resources :operations, except: %i[create update destroy] do
24
26
  resources :errors, only: [:retry] do
25
27
  member do
26
28
  put :retry
@@ -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
- [:workflow_processes, :rails_workflow_processes],
12
- [:workflow_operations, :rails_workflow_operations],
13
- [:workflow_process_templates, :rails_workflow_process_templates],
14
- [:workflow_operation_templates, :rails_workflow_operation_templates],
15
- [:workflow_contexts, :rails_workflow_contexts],
16
- [:workflow_errors, :rails_workflow_errors]
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, [:parent_id, :parent_type]],
27
- [:rails_workflow_errors, [:parent_id, :parent_type]],
28
- [:rails_workflow_operation_templates, :process_template_id],
29
- [:rails_workflow_operation_templates, :uuid],
30
- [:rails_workflow_process_templates, :uuid],
31
- [:rails_workflow_operations, :process_id],
32
- [:rails_workflow_operations, :template_id]
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,93 +40,93 @@ class CreateWorkflowProcesses < ActiveRecord::Migration
38
40
  def create_columns
39
41
  {
40
42
  rails_workflow_contexts: [
41
- [:integer, :parent_id],
42
- [:string, :parent_type],
43
- [:text, :body],
44
- [:datetime, :created_at],
45
- [:datetime, :updated_at]
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
- [:string, :message],
50
- [:text, :stack_trace],
51
- [:integer, :parent_id],
52
- [:string, :parent_type],
53
- [:datetime, :created_at],
54
- [:datetime, :updated_at],
55
- [:boolean, :resolved]
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
- [:string, :title],
60
- [:string, :version],
61
+ %i[string title],
62
+ %i[string version],
61
63
  # [:uuid, :uuid],
62
- [:string, :uuid],
63
- [:string, :tag],
64
- [:text, :source],
65
- [:text, :dependencies],
66
- [:string, :operation_class],
67
- [:integer, :process_template_id],
68
- [:datetime, :created_at],
69
- [:datetime, :updated_at],
70
- [:boolean, :async],
71
- [:integer, :child_process_id],
72
- [:integer, :assignment_id],
73
- [:string, :assignment_type],
74
- [:string, :kind],
75
- [:string, :role],
76
- [:string, :group],
77
- [:text, :instruction],
78
- [:boolean, :is_background],
79
- [:string, :type],
80
- [:string, :partial_name]
64
+ %i[string uuid],
65
+ %i[string tag],
66
+ %i[text source],
67
+ %i[text dependencies],
68
+ %i[string operation_class],
69
+ %i[integer process_template_id],
70
+ %i[datetime created_at],
71
+ %i[datetime updated_at],
72
+ %i[boolean async],
73
+ %i[integer child_process_id],
74
+ %i[integer assignment_id],
75
+ %i[string assignment_type],
76
+ %i[string kind],
77
+ %i[string role],
78
+ %i[string group],
79
+ %i[text instruction],
80
+ %i[boolean is_background],
81
+ %i[string type],
82
+ %i[string partial_name]
81
83
  ],
82
84
 
83
85
  rails_workflow_operations: [
84
- [:integer, :status],
85
- [:boolean, :async],
86
- [:string, :version],
87
- [:string, :tag],
88
- [:string, :title],
89
- [:datetime, :created_at],
90
- [:datetime, :updated_at],
91
- [:integer, :process_id],
92
- [:integer, :template_id],
93
- [:text, :dependencies],
94
- [:integer, :child_process_id],
95
- [:integer, :assignment_id],
96
- [:string, :assignment_type],
97
- [:datetime, :assigned_at],
98
- [:string, :type],
99
- [:boolean, :is_active],
100
- [:datetime, :completed_at],
101
- [:boolean, :is_background]
86
+ %i[integer status],
87
+ %i[boolean async],
88
+ %i[string version],
89
+ %i[string tag],
90
+ %i[string title],
91
+ %i[datetime created_at],
92
+ %i[datetime updated_at],
93
+ %i[integer process_id],
94
+ %i[integer template_id],
95
+ %i[text dependencies],
96
+ %i[integer child_process_id],
97
+ %i[integer assignment_id],
98
+ %i[string assignment_type],
99
+ %i[datetime assigned_at],
100
+ %i[string type],
101
+ %i[boolean is_active],
102
+ %i[datetime completed_at],
103
+ %i[boolean is_background]
102
104
  ],
103
105
 
104
106
  rails_workflow_process_templates: [
105
- [:string, :title],
106
- [:text, :source],
107
- [:string, :uuid],
108
- [:string, :version],
109
- [:string, :tag],
110
- [:string, :manager_class],
111
- [:string, :process_class],
112
- [:datetime, :created_at],
113
- [:datetime, :updated_at],
114
- [:string, :type],
115
- [:string, :partial_name]
107
+ %i[string title],
108
+ %i[text source],
109
+ %i[string uuid],
110
+ %i[string version],
111
+ %i[string tag],
112
+ %i[string manager_class],
113
+ %i[string process_class],
114
+ %i[datetime created_at],
115
+ %i[datetime updated_at],
116
+ %i[string type],
117
+ %i[string partial_name]
116
118
  ],
117
119
 
118
120
  rails_workflow_processes: [
119
- [:integer, :status],
120
- [:string, :version],
121
- [:string, :tag],
122
- [:boolean, :async],
123
- [:string, :title],
124
- [:datetime, :created_at],
125
- [:datetime, :updated_at],
126
- [:integer, :template_id],
127
- [:string, :type]
121
+ %i[integer status],
122
+ %i[string version],
123
+ %i[string tag],
124
+ %i[boolean async],
125
+ %i[string title],
126
+ %i[datetime created_at],
127
+ %i[datetime updated_at],
128
+ %i[integer template_id],
129
+ %i[string type]
128
130
  ]
129
131
  }.each do |table, columns|
130
132
  columns.map do |column|