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.
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|