tasker-engine 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (605) hide show
  1. checksums.yaml +7 -0
  2. data/LICENSE +22 -0
  3. data/README.md +443 -0
  4. data/Rakefile +10 -0
  5. data/app/controllers/tasker/analytics_controller.rb +179 -0
  6. data/app/controllers/tasker/application_controller.rb +45 -0
  7. data/app/controllers/tasker/graphql_controller.rb +193 -0
  8. data/app/controllers/tasker/handlers_controller.rb +217 -0
  9. data/app/controllers/tasker/health_controller.rb +229 -0
  10. data/app/controllers/tasker/metrics_controller.rb +111 -0
  11. data/app/controllers/tasker/page_sort.rb +97 -0
  12. data/app/controllers/tasker/task_diagrams_controller.rb +30 -0
  13. data/app/controllers/tasker/tasks_controller.rb +123 -0
  14. data/app/controllers/tasker/workflow_steps_controller.rb +69 -0
  15. data/app/graphql/examples/all_tasks.graphql +22 -0
  16. data/app/graphql/examples/pending_tasks.graphql +23 -0
  17. data/app/graphql/tasker/graph_ql_types/annotation_type.rb +14 -0
  18. data/app/graphql/tasker/graph_ql_types/base_argument.rb +9 -0
  19. data/app/graphql/tasker/graph_ql_types/base_connection.rb +11 -0
  20. data/app/graphql/tasker/graph_ql_types/base_edge.rb +10 -0
  21. data/app/graphql/tasker/graph_ql_types/base_enum.rb +9 -0
  22. data/app/graphql/tasker/graph_ql_types/base_field.rb +10 -0
  23. data/app/graphql/tasker/graph_ql_types/base_input_object.rb +10 -0
  24. data/app/graphql/tasker/graph_ql_types/base_interface.rb +14 -0
  25. data/app/graphql/tasker/graph_ql_types/base_object.rb +10 -0
  26. data/app/graphql/tasker/graph_ql_types/base_scalar.rb +9 -0
  27. data/app/graphql/tasker/graph_ql_types/base_union.rb +11 -0
  28. data/app/graphql/tasker/graph_ql_types/dependent_system_object_map_type.rb +18 -0
  29. data/app/graphql/tasker/graph_ql_types/dependent_system_type.rb +13 -0
  30. data/app/graphql/tasker/graph_ql_types/mutation_type.rb +16 -0
  31. data/app/graphql/tasker/graph_ql_types/named_step_type.rb +16 -0
  32. data/app/graphql/tasker/graph_ql_types/named_task_type.rb +14 -0
  33. data/app/graphql/tasker/graph_ql_types/named_tasks_named_step_type.rb +19 -0
  34. data/app/graphql/tasker/graph_ql_types/node_type.rb +12 -0
  35. data/app/graphql/tasker/graph_ql_types/query_type.rb +20 -0
  36. data/app/graphql/tasker/graph_ql_types/task_annotation_type.rb +17 -0
  37. data/app/graphql/tasker/graph_ql_types/task_interface.rb +17 -0
  38. data/app/graphql/tasker/graph_ql_types/task_type.rb +26 -0
  39. data/app/graphql/tasker/graph_ql_types/workflow_step_type.rb +154 -0
  40. data/app/graphql/tasker/graph_ql_types.rb +42 -0
  41. data/app/graphql/tasker/mutations/base_mutation.rb +13 -0
  42. data/app/graphql/tasker/mutations/cancel_step.rb +29 -0
  43. data/app/graphql/tasker/mutations/cancel_task.rb +29 -0
  44. data/app/graphql/tasker/mutations/create_task.rb +52 -0
  45. data/app/graphql/tasker/mutations/update_step.rb +36 -0
  46. data/app/graphql/tasker/mutations/update_task.rb +41 -0
  47. data/app/graphql/tasker/queries/all_annotation_types.rb +17 -0
  48. data/app/graphql/tasker/queries/all_tasks.rb +23 -0
  49. data/app/graphql/tasker/queries/base_query.rb +9 -0
  50. data/app/graphql/tasker/queries/helpers.rb +16 -0
  51. data/app/graphql/tasker/queries/one_step.rb +24 -0
  52. data/app/graphql/tasker/queries/one_task.rb +18 -0
  53. data/app/graphql/tasker/queries/tasks_by_annotation.rb +31 -0
  54. data/app/graphql/tasker/queries/tasks_by_status.rb +30 -0
  55. data/app/graphql/tasker/tasker_rails_schema.rb +52 -0
  56. data/app/jobs/tasker/application_job.rb +8 -0
  57. data/app/jobs/tasker/metrics_export_job.rb +252 -0
  58. data/app/jobs/tasker/task_runner_job.rb +224 -0
  59. data/app/models/tasker/annotation_type.rb +26 -0
  60. data/app/models/tasker/application_record.rb +70 -0
  61. data/app/models/tasker/dependent_system.rb +26 -0
  62. data/app/models/tasker/dependent_system_object_map.rb +64 -0
  63. data/app/models/tasker/diagram/edge.rb +106 -0
  64. data/app/models/tasker/diagram/flowchart.rb +137 -0
  65. data/app/models/tasker/diagram/node.rb +99 -0
  66. data/app/models/tasker/named_step.rb +41 -0
  67. data/app/models/tasker/named_task.rb +121 -0
  68. data/app/models/tasker/named_tasks_named_step.rb +82 -0
  69. data/app/models/tasker/step_dag_relationship.rb +65 -0
  70. data/app/models/tasker/step_readiness_status.rb +59 -0
  71. data/app/models/tasker/task.rb +424 -0
  72. data/app/models/tasker/task_annotation.rb +36 -0
  73. data/app/models/tasker/task_diagram.rb +332 -0
  74. data/app/models/tasker/task_execution_context.rb +29 -0
  75. data/app/models/tasker/task_namespace.rb +41 -0
  76. data/app/models/tasker/task_transition.rb +235 -0
  77. data/app/models/tasker/workflow_step.rb +461 -0
  78. data/app/models/tasker/workflow_step_edge.rb +94 -0
  79. data/app/models/tasker/workflow_step_transition.rb +434 -0
  80. data/app/serializers/tasker/annotation_type_serializer.rb +8 -0
  81. data/app/serializers/tasker/handler_serializer.rb +109 -0
  82. data/app/serializers/tasker/task_annotation_serializer.rb +32 -0
  83. data/app/serializers/tasker/task_serializer.rb +168 -0
  84. data/app/serializers/tasker/workflow_step_serializer.rb +27 -0
  85. data/app/services/tasker/analytics_service.rb +409 -0
  86. data/app/views/tasker/task/_diagram.html.erb +32 -0
  87. data/config/initializers/dry_struct.rb +11 -0
  88. data/config/initializers/statesman.rb +6 -0
  89. data/config/initializers/tasker_orchestration.rb +17 -0
  90. data/config/initializers/time_formats.rb +4 -0
  91. data/config/routes.rb +34 -0
  92. data/config/tasker/subscriptions/example_integrations.yml +67 -0
  93. data/config/tasker/system_events.yml +305 -0
  94. data/db/functions/calculate_dependency_levels_v01.sql +45 -0
  95. data/db/functions/get_analytics_metrics_v01.sql +137 -0
  96. data/db/functions/get_slowest_steps_v01.sql +82 -0
  97. data/db/functions/get_slowest_tasks_v01.sql +96 -0
  98. data/db/functions/get_step_readiness_status_batch_v01.sql +140 -0
  99. data/db/functions/get_step_readiness_status_v01.sql +139 -0
  100. data/db/functions/get_system_health_counts_v01.sql +108 -0
  101. data/db/functions/get_task_execution_context_v01.sql +108 -0
  102. data/db/functions/get_task_execution_contexts_batch_v01.sql +104 -0
  103. data/db/init/schema.sql +2277 -0
  104. data/db/migrate/20250701165431_initial_tasker_schema.rb +116 -0
  105. data/db/views/tasker_step_dag_relationships_v01.sql +69 -0
  106. data/docs/APPLICATION_GENERATOR.md +384 -0
  107. data/docs/AUTH.md +1780 -0
  108. data/docs/CIRCUIT_BREAKER.md +224 -0
  109. data/docs/DEVELOPER_GUIDE.md +2665 -0
  110. data/docs/EVENT_SYSTEM.md +637 -0
  111. data/docs/EXECUTION_CONFIGURATION.md +341 -0
  112. data/docs/FLOW_CHART.md +149 -0
  113. data/docs/HEALTH.md +542 -0
  114. data/docs/METRICS.md +731 -0
  115. data/docs/OPTIMIZATION_PLAN.md +1479 -0
  116. data/docs/OVERVIEW.md +552 -0
  117. data/docs/QUICK_START.md +270 -0
  118. data/docs/REGISTRY_SYSTEMS.md +373 -0
  119. data/docs/REST_API.md +632 -0
  120. data/docs/ROADMAP.md +221 -0
  121. data/docs/SQL_FUNCTIONS.md +1408 -0
  122. data/docs/TASK_DIAGRAM.md +252 -0
  123. data/docs/TASK_EXECUTION_CONTROL_FLOW.md +237 -0
  124. data/docs/TELEMETRY.md +795 -0
  125. data/docs/TROUBLESHOOTING.md +756 -0
  126. data/docs/TaskHandlerGenerator.html +255 -0
  127. data/docs/Tasker/Analysis/RuntimeGraphAnalyzer.html +907 -0
  128. data/docs/Tasker/Analysis/TemplateGraphAnalyzer.html +1236 -0
  129. data/docs/Tasker/Analysis.html +117 -0
  130. data/docs/Tasker/AnalyticsController.html +450 -0
  131. data/docs/Tasker/AnalyticsService/BottleneckAnalytics.html +816 -0
  132. data/docs/Tasker/AnalyticsService/PerformanceAnalytics.html +586 -0
  133. data/docs/Tasker/AnalyticsService.html +2221 -0
  134. data/docs/Tasker/AnnotationType.html +137 -0
  135. data/docs/Tasker/AnnotationTypeSerializer.html +124 -0
  136. data/docs/Tasker/ApplicationController.html +147 -0
  137. data/docs/Tasker/ApplicationJob.html +128 -0
  138. data/docs/Tasker/ApplicationRecord.html +378 -0
  139. data/docs/Tasker/Authentication/AuthenticationError.html +124 -0
  140. data/docs/Tasker/Authentication/ConfigurationError.html +124 -0
  141. data/docs/Tasker/Authentication/Coordinator.html +242 -0
  142. data/docs/Tasker/Authentication/Interface.html +560 -0
  143. data/docs/Tasker/Authentication/InterfaceError.html +124 -0
  144. data/docs/Tasker/Authentication/NoneAuthenticator.html +338 -0
  145. data/docs/Tasker/Authentication.html +119 -0
  146. data/docs/Tasker/Authorization/AuthorizationError.html +139 -0
  147. data/docs/Tasker/Authorization/BaseCoordinator.html +927 -0
  148. data/docs/Tasker/Authorization/ConfigurationError.html +153 -0
  149. data/docs/Tasker/Authorization/ResourceConstants/ACTIONS.html +428 -0
  150. data/docs/Tasker/Authorization/ResourceConstants/RESOURCES.html +365 -0
  151. data/docs/Tasker/Authorization/ResourceConstants.html +146 -0
  152. data/docs/Tasker/Authorization/ResourceRegistry.html +882 -0
  153. data/docs/Tasker/Authorization/UnauthorizedError.html +153 -0
  154. data/docs/Tasker/Authorization.html +582 -0
  155. data/docs/Tasker/CacheCapabilities.html +167 -0
  156. data/docs/Tasker/CacheStrategy.html +1297 -0
  157. data/docs/Tasker/Concerns/Authenticatable.html +116 -0
  158. data/docs/Tasker/Concerns/Authorizable/AdminStatusChecker.html +256 -0
  159. data/docs/Tasker/Concerns/Authorizable.html +816 -0
  160. data/docs/Tasker/Concerns/ControllerAuthorizable.html +157 -0
  161. data/docs/Tasker/Concerns/EventPublisher.html +4023 -0
  162. data/docs/Tasker/Concerns/IdempotentStateTransitions.html +806 -0
  163. data/docs/Tasker/Concerns/LifecycleEventHelpers.html +129 -0
  164. data/docs/Tasker/Concerns/OrchestrationPublisher.html +129 -0
  165. data/docs/Tasker/Concerns/StateMachineBase/ClassMethods.html +1075 -0
  166. data/docs/Tasker/Concerns/StateMachineBase/StateMachineBase/ClassMethods.html +191 -0
  167. data/docs/Tasker/Concerns/StateMachineBase/StateMachineBase.html +126 -0
  168. data/docs/Tasker/Concerns/StateMachineBase.html +153 -0
  169. data/docs/Tasker/Concerns/StructuredLogging.html +1413 -0
  170. data/docs/Tasker/Concerns.html +117 -0
  171. data/docs/Tasker/Configuration/AuthConfiguration.html +1023 -0
  172. data/docs/Tasker/Configuration/ConfigurationProxy.html +581 -0
  173. data/docs/Tasker/Configuration/DatabaseConfiguration.html +475 -0
  174. data/docs/Tasker/Configuration/EngineConfiguration.html +1265 -0
  175. data/docs/Tasker/Configuration/HealthConfiguration.html +791 -0
  176. data/docs/Tasker/Configuration/TelemetryConfiguration.html +1308 -0
  177. data/docs/Tasker/Configuration/TelemetryConfigurationProxy.html +388 -0
  178. data/docs/Tasker/Configuration.html +1669 -0
  179. data/docs/Tasker/ConfigurationError.html +143 -0
  180. data/docs/Tasker/ConfiguredTask.html +514 -0
  181. data/docs/Tasker/Constants/EventDefinitions.html +590 -0
  182. data/docs/Tasker/Constants/LifecycleEvents.html +137 -0
  183. data/docs/Tasker/Constants/ObservabilityEvents/Step.html +152 -0
  184. data/docs/Tasker/Constants/ObservabilityEvents/Task.html +142 -0
  185. data/docs/Tasker/Constants/ObservabilityEvents.html +126 -0
  186. data/docs/Tasker/Constants/RegistryEvents.html +285 -0
  187. data/docs/Tasker/Constants/StepEvents.html +177 -0
  188. data/docs/Tasker/Constants/TaskEvents.html +167 -0
  189. data/docs/Tasker/Constants/TaskExecution/ExecutionStatus.html +207 -0
  190. data/docs/Tasker/Constants/TaskExecution/HealthStatus.html +191 -0
  191. data/docs/Tasker/Constants/TaskExecution/RecommendedAction.html +207 -0
  192. data/docs/Tasker/Constants/TaskExecution.html +126 -0
  193. data/docs/Tasker/Constants/TaskFinalization/ErrorMessages.html +132 -0
  194. data/docs/Tasker/Constants/TaskFinalization/PendingReasons.html +207 -0
  195. data/docs/Tasker/Constants/TaskFinalization/ReenqueueReasons.html +239 -0
  196. data/docs/Tasker/Constants/TaskFinalization.html +126 -0
  197. data/docs/Tasker/Constants/TaskStatuses.html +223 -0
  198. data/docs/Tasker/Constants/TestEvents.html +163 -0
  199. data/docs/Tasker/Constants/WorkflowEvents.html +222 -0
  200. data/docs/Tasker/Constants/WorkflowStepStatuses.html +223 -0
  201. data/docs/Tasker/Constants.html +561 -0
  202. data/docs/Tasker/DependentSystem.html +137 -0
  203. data/docs/Tasker/DependentSystemObjectMap.html +250 -0
  204. data/docs/Tasker/DetectorRegistry.html +598 -0
  205. data/docs/Tasker/Diagram/Edge.html +1191 -0
  206. data/docs/Tasker/Diagram/Flowchart.html +1539 -0
  207. data/docs/Tasker/Diagram/Node.html +1165 -0
  208. data/docs/Tasker/Diagram.html +117 -0
  209. data/docs/Tasker/Engine.html +215 -0
  210. data/docs/Tasker/Error.html +139 -0
  211. data/docs/Tasker/Events/Bus.html +1226 -0
  212. data/docs/Tasker/Events/Catalog/CatalogPrinter.html +258 -0
  213. data/docs/Tasker/Events/Catalog/CustomEventRegistrar.html +276 -0
  214. data/docs/Tasker/Events/Catalog/ExamplePayloadGenerator.html +294 -0
  215. data/docs/Tasker/Events/Catalog.html +1291 -0
  216. data/docs/Tasker/Events/CustomRegistry.html +943 -0
  217. data/docs/Tasker/Events/DefinitionLoader.html +575 -0
  218. data/docs/Tasker/Events/EventPayloadBuilder/ErrorInfoExtractor.html +286 -0
  219. data/docs/Tasker/Events/EventPayloadBuilder/StepPayloadBuilder.html +312 -0
  220. data/docs/Tasker/Events/EventPayloadBuilder.html +664 -0
  221. data/docs/Tasker/Events/Publisher.html +365 -0
  222. data/docs/Tasker/Events/Subscribers/BaseSubscriber/ErrorCategorizer/ErrorTypeClassifier.html +1128 -0
  223. data/docs/Tasker/Events/Subscribers/BaseSubscriber/ErrorCategorizer.html +270 -0
  224. data/docs/Tasker/Events/Subscribers/BaseSubscriber/MetricTagsExtractor.html +266 -0
  225. data/docs/Tasker/Events/Subscribers/BaseSubscriber.html +2556 -0
  226. data/docs/Tasker/Events/Subscribers/MetricsSubscriber.html +723 -0
  227. data/docs/Tasker/Events/Subscribers/TelemetrySubscriber.html +2251 -0
  228. data/docs/Tasker/Events/Subscribers.html +117 -0
  229. data/docs/Tasker/Events/SubscriptionLoader.html +493 -0
  230. data/docs/Tasker/Events.html +294 -0
  231. data/docs/Tasker/EventsGenerator.html +459 -0
  232. data/docs/Tasker/Functions/FunctionBasedAnalyticsMetrics/AnalyticsMetrics.html +135 -0
  233. data/docs/Tasker/Functions/FunctionBasedAnalyticsMetrics.html +412 -0
  234. data/docs/Tasker/Functions/FunctionBasedDependencyLevels.html +598 -0
  235. data/docs/Tasker/Functions/FunctionBasedSlowestSteps/SlowestStep.html +135 -0
  236. data/docs/Tasker/Functions/FunctionBasedSlowestSteps.html +453 -0
  237. data/docs/Tasker/Functions/FunctionBasedSlowestTasks/SlowestTask.html +135 -0
  238. data/docs/Tasker/Functions/FunctionBasedSlowestTasks.html +453 -0
  239. data/docs/Tasker/Functions/FunctionBasedStepReadinessStatus.html +1457 -0
  240. data/docs/Tasker/Functions/FunctionBasedSystemHealthCounts/HealthMetrics.html +135 -0
  241. data/docs/Tasker/Functions/FunctionBasedSystemHealthCounts.html +370 -0
  242. data/docs/Tasker/Functions/FunctionBasedTaskExecutionContext.html +1250 -0
  243. data/docs/Tasker/Functions/FunctionWrapper.html +479 -0
  244. data/docs/Tasker/Functions.html +117 -0
  245. data/docs/Tasker/Generators/AuthenticatorGenerator/UsageInstructionsFormatter.html +244 -0
  246. data/docs/Tasker/Generators/AuthenticatorGenerator.html +373 -0
  247. data/docs/Tasker/Generators/AuthorizationCoordinatorGenerator.html +430 -0
  248. data/docs/Tasker/Generators/SubscriberGenerator.html +377 -0
  249. data/docs/Tasker/Generators/TaskHandlerGenerator.html +263 -0
  250. data/docs/Tasker/Generators.html +117 -0
  251. data/docs/Tasker/GraphQLTypes/AnnotationType.html +132 -0
  252. data/docs/Tasker/GraphQLTypes/BaseArgument.html +124 -0
  253. data/docs/Tasker/GraphQLTypes/BaseConnection.html +124 -0
  254. data/docs/Tasker/GraphQLTypes/BaseEdge.html +130 -0
  255. data/docs/Tasker/GraphQLTypes/BaseEnum.html +124 -0
  256. data/docs/Tasker/GraphQLTypes/BaseField.html +124 -0
  257. data/docs/Tasker/GraphQLTypes/BaseInputObject.html +124 -0
  258. data/docs/Tasker/GraphQLTypes/BaseInterface.html +116 -0
  259. data/docs/Tasker/GraphQLTypes/BaseObject.html +128 -0
  260. data/docs/Tasker/GraphQLTypes/BaseScalar.html +124 -0
  261. data/docs/Tasker/GraphQLTypes/BaseUnion.html +124 -0
  262. data/docs/Tasker/GraphQLTypes/DependentSystemObjectMapType.html +132 -0
  263. data/docs/Tasker/GraphQLTypes/DependentSystemType.html +132 -0
  264. data/docs/Tasker/GraphQLTypes/MutationType.html +132 -0
  265. data/docs/Tasker/GraphQLTypes/NamedStepType.html +132 -0
  266. data/docs/Tasker/GraphQLTypes/NamedTaskType.html +132 -0
  267. data/docs/Tasker/GraphQLTypes/NamedTasksNamedStepType.html +132 -0
  268. data/docs/Tasker/GraphQLTypes/NodeType.html +118 -0
  269. data/docs/Tasker/GraphQLTypes/QueryType.html +139 -0
  270. data/docs/Tasker/GraphQLTypes/TaskAnnotationType.html +132 -0
  271. data/docs/Tasker/GraphQLTypes/TaskInterface.html +111 -0
  272. data/docs/Tasker/GraphQLTypes/TaskType.html +201 -0
  273. data/docs/Tasker/GraphQLTypes/WorkflowStepType.html +694 -0
  274. data/docs/Tasker/GraphQLTypes.html +130 -0
  275. data/docs/Tasker/GraphqlController.html +251 -0
  276. data/docs/Tasker/HandlerFactory.html +1518 -0
  277. data/docs/Tasker/HandlerSerializer.html +682 -0
  278. data/docs/Tasker/HandlersController.html +574 -0
  279. data/docs/Tasker/HashIdentityStrategy.html +278 -0
  280. data/docs/Tasker/Health/ReadinessChecker.html +712 -0
  281. data/docs/Tasker/Health/StatusChecker.html +653 -0
  282. data/docs/Tasker/Health.html +117 -0
  283. data/docs/Tasker/HealthController.html +523 -0
  284. data/docs/Tasker/IdentityStrategy.html +276 -0
  285. data/docs/Tasker/InvalidTaskHandlerConfig.html +135 -0
  286. data/docs/Tasker/LifecycleEvents/Events/Step.html +162 -0
  287. data/docs/Tasker/LifecycleEvents/Events/Task.html +162 -0
  288. data/docs/Tasker/LifecycleEvents/Events.html +204 -0
  289. data/docs/Tasker/LifecycleEvents/Publisher.html +132 -0
  290. data/docs/Tasker/LifecycleEvents.html +799 -0
  291. data/docs/Tasker/Logging/CorrelationIdGenerator.html +688 -0
  292. data/docs/Tasker/Logging.html +115 -0
  293. data/docs/Tasker/MetricsController.html +293 -0
  294. data/docs/Tasker/MetricsExportJob.html +414 -0
  295. data/docs/Tasker/Mutations/BaseMutation.html +128 -0
  296. data/docs/Tasker/Mutations/CancelStep.html +219 -0
  297. data/docs/Tasker/Mutations/CancelTask.html +221 -0
  298. data/docs/Tasker/Mutations/CreateTask.html +243 -0
  299. data/docs/Tasker/Mutations/UpdateStep.html +243 -0
  300. data/docs/Tasker/Mutations/UpdateTask.html +243 -0
  301. data/docs/Tasker/Mutations.html +117 -0
  302. data/docs/Tasker/NamedStep.html +216 -0
  303. data/docs/Tasker/NamedTask.html +910 -0
  304. data/docs/Tasker/NamedTasksNamedStep.html +435 -0
  305. data/docs/Tasker/Orchestration/BackoffCalculator.html +404 -0
  306. data/docs/Tasker/Orchestration/ConnectionBuilder/ConfigValidator.html +258 -0
  307. data/docs/Tasker/Orchestration/ConnectionBuilder.html +435 -0
  308. data/docs/Tasker/Orchestration/ConnectionPoolIntelligence.html +513 -0
  309. data/docs/Tasker/Orchestration/Coordinator.html +641 -0
  310. data/docs/Tasker/Orchestration/FutureStateAnalyzer.html +1045 -0
  311. data/docs/Tasker/Orchestration/Orchestrator.html +679 -0
  312. data/docs/Tasker/Orchestration/PluginIntegration.html +1127 -0
  313. data/docs/Tasker/Orchestration/ResponseProcessor.html +504 -0
  314. data/docs/Tasker/Orchestration/RetryHeaderParser.html +304 -0
  315. data/docs/Tasker/Orchestration/StepExecutor.html +995 -0
  316. data/docs/Tasker/Orchestration/StepSequenceFactory.html +644 -0
  317. data/docs/Tasker/Orchestration/TaskFinalizer/BlockageChecker.html +264 -0
  318. data/docs/Tasker/Orchestration/TaskFinalizer/ContextManager.html +254 -0
  319. data/docs/Tasker/Orchestration/TaskFinalizer/DelayCalculator.html +556 -0
  320. data/docs/Tasker/Orchestration/TaskFinalizer/FinalizationDecisionMaker.html +348 -0
  321. data/docs/Tasker/Orchestration/TaskFinalizer/FinalizationProcessor.html +286 -0
  322. data/docs/Tasker/Orchestration/TaskFinalizer/ReasonDeterminer.html +432 -0
  323. data/docs/Tasker/Orchestration/TaskFinalizer/ReenqueueManager.html +296 -0
  324. data/docs/Tasker/Orchestration/TaskFinalizer/UnclearStateHandler.html +314 -0
  325. data/docs/Tasker/Orchestration/TaskFinalizer.html +1212 -0
  326. data/docs/Tasker/Orchestration/TaskInitializer.html +766 -0
  327. data/docs/Tasker/Orchestration/TaskReenqueuer.html +506 -0
  328. data/docs/Tasker/Orchestration/ViableStepDiscovery.html +442 -0
  329. data/docs/Tasker/Orchestration/WorkflowCoordinator.html +510 -0
  330. data/docs/Tasker/Orchestration.html +130 -0
  331. data/docs/Tasker/PageSort/PageSortParamsBuilder.html +296 -0
  332. data/docs/Tasker/PageSort.html +247 -0
  333. data/docs/Tasker/PermanentError.html +518 -0
  334. data/docs/Tasker/ProceduralError.html +147 -0
  335. data/docs/Tasker/Queries/AllAnnotationTypes.html +217 -0
  336. data/docs/Tasker/Queries/AllTasks.html +221 -0
  337. data/docs/Tasker/Queries/BaseQuery.html +128 -0
  338. data/docs/Tasker/Queries/Helpers.html +187 -0
  339. data/docs/Tasker/Queries/OneStep.html +225 -0
  340. data/docs/Tasker/Queries/OneTask.html +217 -0
  341. data/docs/Tasker/Queries/TasksByAnnotation.html +231 -0
  342. data/docs/Tasker/Queries/TasksByStatus.html +233 -0
  343. data/docs/Tasker/Queries.html +119 -0
  344. data/docs/Tasker/Railtie.html +124 -0
  345. data/docs/Tasker/Registry/BaseRegistry.html +1690 -0
  346. data/docs/Tasker/Registry/EventPublisher.html +667 -0
  347. data/docs/Tasker/Registry/InterfaceValidator.html +569 -0
  348. data/docs/Tasker/Registry/RegistrationError.html +132 -0
  349. data/docs/Tasker/Registry/RegistryError.html +139 -0
  350. data/docs/Tasker/Registry/StatisticsCollector.html +841 -0
  351. data/docs/Tasker/Registry/SubscriberRegistry.html +1504 -0
  352. data/docs/Tasker/Registry/ValidationError.html +132 -0
  353. data/docs/Tasker/Registry.html +119 -0
  354. data/docs/Tasker/RetryableError.html +515 -0
  355. data/docs/Tasker/StateMachine/Compatibility.html +282 -0
  356. data/docs/Tasker/StateMachine/InvalidStateTransition.html +135 -0
  357. data/docs/Tasker/StateMachine/StepStateMachine/StandardizedPayloadBuilder.html +260 -0
  358. data/docs/Tasker/StateMachine/StepStateMachine.html +2215 -0
  359. data/docs/Tasker/StateMachine/TaskStateMachine.html +734 -0
  360. data/docs/Tasker/StateMachine.html +602 -0
  361. data/docs/Tasker/StepDagRelationship.html +657 -0
  362. data/docs/Tasker/StepHandler/Api/Config.html +1091 -0
  363. data/docs/Tasker/StepHandler/Api.html +884 -0
  364. data/docs/Tasker/StepHandler/AutomaticEventPublishing.html +321 -0
  365. data/docs/Tasker/StepHandler/Base.html +970 -0
  366. data/docs/Tasker/StepHandler.html +119 -0
  367. data/docs/Tasker/StepReadinessStatus.html +836 -0
  368. data/docs/Tasker/Task.html +2575 -0
  369. data/docs/Tasker/TaskAnnotation.html +137 -0
  370. data/docs/Tasker/TaskAnnotationSerializer.html +124 -0
  371. data/docs/Tasker/TaskBuilder/StepNameValidator.html +264 -0
  372. data/docs/Tasker/TaskBuilder/StepTemplateDefiner.html +264 -0
  373. data/docs/Tasker/TaskBuilder.html +764 -0
  374. data/docs/Tasker/TaskDiagram/StepToStepEdgeBuilder.html +260 -0
  375. data/docs/Tasker/TaskDiagram/TaskToRootStepEdgeBuilder.html +290 -0
  376. data/docs/Tasker/TaskDiagram.html +548 -0
  377. data/docs/Tasker/TaskDiagramsController.html +240 -0
  378. data/docs/Tasker/TaskExecutionContext.html +469 -0
  379. data/docs/Tasker/TaskHandler/ClassMethods/StepTemplateDefiner/ClassBasedEventRegistrar.html +238 -0
  380. data/docs/Tasker/TaskHandler/ClassMethods/StepTemplateDefiner/YamlEventRegistrar.html +254 -0
  381. data/docs/Tasker/TaskHandler/ClassMethods/StepTemplateDefiner.html +988 -0
  382. data/docs/Tasker/TaskHandler/ClassMethods.html +357 -0
  383. data/docs/Tasker/TaskHandler/InstanceMethods.html +1396 -0
  384. data/docs/Tasker/TaskHandler/StepGroup.html +1748 -0
  385. data/docs/Tasker/TaskHandler.html +271 -0
  386. data/docs/Tasker/TaskNamespace.html +312 -0
  387. data/docs/Tasker/TaskRunnerJob.html +406 -0
  388. data/docs/Tasker/TaskSerializer.html +474 -0
  389. data/docs/Tasker/TaskTransition.html +1517 -0
  390. data/docs/Tasker/TaskWorkflowSummary.html +988 -0
  391. data/docs/Tasker/TaskerRailsSchema/InvalidObjectTypeError.html +132 -0
  392. data/docs/Tasker/TaskerRailsSchema/TypeResolutionError.html +139 -0
  393. data/docs/Tasker/TaskerRailsSchema/UnknownInterfaceError.html +132 -0
  394. data/docs/Tasker/TaskerRailsSchema.html +384 -0
  395. data/docs/Tasker/TasksController.html +595 -0
  396. data/docs/Tasker/Telemetry/EventMapping.html +1307 -0
  397. data/docs/Tasker/Telemetry/EventRouter.html +2178 -0
  398. data/docs/Tasker/Telemetry/Events/ExportEvents.html +246 -0
  399. data/docs/Tasker/Telemetry/Events.html +115 -0
  400. data/docs/Tasker/Telemetry/ExportCoordinator/DistributedLockTimeoutError.html +135 -0
  401. data/docs/Tasker/Telemetry/ExportCoordinator.html +2137 -0
  402. data/docs/Tasker/Telemetry/IntelligentCacheManager.html +1083 -0
  403. data/docs/Tasker/Telemetry/LogBackend.html +1088 -0
  404. data/docs/Tasker/Telemetry/MetricTypes/Counter.html +1054 -0
  405. data/docs/Tasker/Telemetry/MetricTypes/Gauge.html +1270 -0
  406. data/docs/Tasker/Telemetry/MetricTypes/Histogram.html +1492 -0
  407. data/docs/Tasker/Telemetry/MetricTypes.html +153 -0
  408. data/docs/Tasker/Telemetry/MetricsBackend.html +2510 -0
  409. data/docs/Tasker/Telemetry/MetricsExportService.html +578 -0
  410. data/docs/Tasker/Telemetry/PluginRegistry.html +1774 -0
  411. data/docs/Tasker/Telemetry/Plugins/BaseExporter.html +1835 -0
  412. data/docs/Tasker/Telemetry/Plugins/CsvExporter.html +768 -0
  413. data/docs/Tasker/Telemetry/Plugins/JsonExporter.html +747 -0
  414. data/docs/Tasker/Telemetry/Plugins.html +117 -0
  415. data/docs/Tasker/Telemetry/PrometheusExporter.html +481 -0
  416. data/docs/Tasker/Telemetry/TraceBackend.html +891 -0
  417. data/docs/Tasker/Telemetry.html +130 -0
  418. data/docs/Tasker/Types/AuthConfig.html +886 -0
  419. data/docs/Tasker/Types/BackoffConfig.html +1063 -0
  420. data/docs/Tasker/Types/BaseConfig.html +227 -0
  421. data/docs/Tasker/Types/CacheConfig.html +1731 -0
  422. data/docs/Tasker/Types/DatabaseConfig.html +388 -0
  423. data/docs/Tasker/Types/DependencyGraph.html +526 -0
  424. data/docs/Tasker/Types/DependencyGraphConfig.html +753 -0
  425. data/docs/Tasker/Types/EngineConfig.html +1181 -0
  426. data/docs/Tasker/Types/ExecutionConfig.html +1963 -0
  427. data/docs/Tasker/Types/GraphEdge.html +517 -0
  428. data/docs/Tasker/Types/GraphMetadata.html +781 -0
  429. data/docs/Tasker/Types/GraphNode.html +694 -0
  430. data/docs/Tasker/Types/HealthConfig.html +784 -0
  431. data/docs/Tasker/Types/StepSequence.html +353 -0
  432. data/docs/Tasker/Types/StepTemplate.html +1193 -0
  433. data/docs/Tasker/Types/TaskRequest.html +1179 -0
  434. data/docs/Tasker/Types/TelemetryConfig.html +2746 -0
  435. data/docs/Tasker/Types.html +154 -0
  436. data/docs/Tasker/WorkflowStep/StepFinder.html +282 -0
  437. data/docs/Tasker/WorkflowStep.html +2724 -0
  438. data/docs/Tasker/WorkflowStepEdge.html +304 -0
  439. data/docs/Tasker/WorkflowStepSerializer.html +305 -0
  440. data/docs/Tasker/WorkflowStepTransition/TransitionDescriptionFormatter.html +282 -0
  441. data/docs/Tasker/WorkflowStepTransition.html +2201 -0
  442. data/docs/Tasker/WorkflowStepsController.html +462 -0
  443. data/docs/Tasker.html +452 -0
  444. data/docs/VISION.md +584 -0
  445. data/docs/WHY.md +21 -0
  446. data/docs/_index.html +2375 -0
  447. data/docs/class_list.html +54 -0
  448. data/docs/css/common.css +1 -0
  449. data/docs/css/full_list.css +58 -0
  450. data/docs/css/style.css +503 -0
  451. data/docs/events/migration_plan_outcomes.md +80 -0
  452. data/docs/file.README.html +541 -0
  453. data/docs/file_list.html +59 -0
  454. data/docs/frames.html +22 -0
  455. data/docs/index.html +541 -0
  456. data/docs/js/app.js +344 -0
  457. data/docs/js/full_list.js +242 -0
  458. data/docs/js/jquery.js +4 -0
  459. data/docs/method_list.html +9182 -0
  460. data/docs/top-level-namespace.html +110 -0
  461. data/lib/generators/tasker/authenticator_generator.rb +301 -0
  462. data/lib/generators/tasker/authorization_coordinator_generator.rb +139 -0
  463. data/lib/generators/tasker/events_generator.rb +91 -0
  464. data/lib/generators/tasker/subscriber_generator.rb +107 -0
  465. data/lib/generators/tasker/task_handler_generator.rb +138 -0
  466. data/lib/generators/tasker/templates/api_token_authenticator.rb.erb +113 -0
  467. data/lib/generators/tasker/templates/api_token_authenticator_spec.rb.erb +144 -0
  468. data/lib/generators/tasker/templates/authorization_coordinator.rb.erb +95 -0
  469. data/lib/generators/tasker/templates/authorization_coordinator_spec.rb.erb +142 -0
  470. data/lib/generators/tasker/templates/custom_authenticator.rb.erb +108 -0
  471. data/lib/generators/tasker/templates/custom_authenticator_spec.rb.erb +162 -0
  472. data/lib/generators/tasker/templates/custom_events.yml.erb +62 -0
  473. data/lib/generators/tasker/templates/custom_subscriber.rb.erb +72 -0
  474. data/lib/generators/tasker/templates/devise_authenticator.rb.erb +101 -0
  475. data/lib/generators/tasker/templates/devise_authenticator_spec.rb.erb +126 -0
  476. data/lib/generators/tasker/templates/initialize.rb.erb +202 -0
  477. data/lib/generators/tasker/templates/jwt_authenticator.rb.erb +144 -0
  478. data/lib/generators/tasker/templates/jwt_authenticator_spec.rb.erb +298 -0
  479. data/lib/generators/tasker/templates/metrics_subscriber.rb.erb +258 -0
  480. data/lib/generators/tasker/templates/metrics_subscriber_spec.rb.erb +308 -0
  481. data/lib/generators/tasker/templates/omniauth_authenticator.rb.erb +135 -0
  482. data/lib/generators/tasker/templates/omniauth_authenticator_spec.rb.erb +196 -0
  483. data/lib/generators/tasker/templates/opentelemetry_initializer.rb +52 -0
  484. data/lib/generators/tasker/templates/subscriber.rb.erb +64 -0
  485. data/lib/generators/tasker/templates/subscriber_spec.rb.erb +80 -0
  486. data/lib/generators/tasker/templates/task_config.yaml.erb +117 -0
  487. data/lib/generators/tasker/templates/task_handler.rb.erb +59 -0
  488. data/lib/generators/tasker/templates/task_handler_spec.rb.erb +159 -0
  489. data/lib/tasker/analysis/runtime_graph_analyzer.rb +1168 -0
  490. data/lib/tasker/analysis/template_graph_analyzer.rb +328 -0
  491. data/lib/tasker/authentication/coordinator.rb +78 -0
  492. data/lib/tasker/authentication/errors.rb +9 -0
  493. data/lib/tasker/authentication/interface.rb +36 -0
  494. data/lib/tasker/authentication/none_authenticator.rb +26 -0
  495. data/lib/tasker/authorization/base_coordinator.rb +112 -0
  496. data/lib/tasker/authorization/errors.rb +26 -0
  497. data/lib/tasker/authorization/resource_constants.rb +74 -0
  498. data/lib/tasker/authorization/resource_registry.rb +143 -0
  499. data/lib/tasker/authorization.rb +75 -0
  500. data/lib/tasker/cache_capabilities.rb +131 -0
  501. data/lib/tasker/cache_strategy.rb +469 -0
  502. data/lib/tasker/concerns/authenticatable.rb +41 -0
  503. data/lib/tasker/concerns/authorizable.rb +204 -0
  504. data/lib/tasker/concerns/controller_authorizable.rb +124 -0
  505. data/lib/tasker/concerns/event_publisher.rb +716 -0
  506. data/lib/tasker/concerns/idempotent_state_transitions.rb +128 -0
  507. data/lib/tasker/concerns/state_machine_base.rb +218 -0
  508. data/lib/tasker/concerns/structured_logging.rb +387 -0
  509. data/lib/tasker/configuration.rb +325 -0
  510. data/lib/tasker/constants/event_definitions.rb +147 -0
  511. data/lib/tasker/constants/registry_events.rb +54 -0
  512. data/lib/tasker/constants.rb +417 -0
  513. data/lib/tasker/engine.rb +90 -0
  514. data/lib/tasker/errors.rb +90 -0
  515. data/lib/tasker/events/catalog.rb +432 -0
  516. data/lib/tasker/events/custom_registry.rb +175 -0
  517. data/lib/tasker/events/definition_loader.rb +199 -0
  518. data/lib/tasker/events/event_payload_builder.rb +461 -0
  519. data/lib/tasker/events/publisher.rb +149 -0
  520. data/lib/tasker/events/subscribers/base_subscriber.rb +601 -0
  521. data/lib/tasker/events/subscribers/metrics_subscriber.rb +120 -0
  522. data/lib/tasker/events/subscribers/telemetry_subscriber.rb +462 -0
  523. data/lib/tasker/events/subscription_loader.rb +161 -0
  524. data/lib/tasker/events.rb +37 -0
  525. data/lib/tasker/functions/function_based_analytics_metrics.rb +103 -0
  526. data/lib/tasker/functions/function_based_dependency_levels.rb +54 -0
  527. data/lib/tasker/functions/function_based_slowest_steps.rb +84 -0
  528. data/lib/tasker/functions/function_based_slowest_tasks.rb +84 -0
  529. data/lib/tasker/functions/function_based_step_readiness_status.rb +183 -0
  530. data/lib/tasker/functions/function_based_system_health_counts.rb +94 -0
  531. data/lib/tasker/functions/function_based_task_execution_context.rb +148 -0
  532. data/lib/tasker/functions/function_wrapper.rb +42 -0
  533. data/lib/tasker/functions.rb +12 -0
  534. data/lib/tasker/handler_factory.rb +322 -0
  535. data/lib/tasker/health/readiness_checker.rb +186 -0
  536. data/lib/tasker/health/status_checker.rb +203 -0
  537. data/lib/tasker/identity_strategy.rb +38 -0
  538. data/lib/tasker/logging/correlation_id_generator.rb +120 -0
  539. data/lib/tasker/orchestration/backoff_calculator.rb +184 -0
  540. data/lib/tasker/orchestration/connection_builder.rb +122 -0
  541. data/lib/tasker/orchestration/connection_pool_intelligence.rb +177 -0
  542. data/lib/tasker/orchestration/coordinator.rb +119 -0
  543. data/lib/tasker/orchestration/future_state_analyzer.rb +137 -0
  544. data/lib/tasker/orchestration/plugin_integration.rb +124 -0
  545. data/lib/tasker/orchestration/response_processor.rb +168 -0
  546. data/lib/tasker/orchestration/retry_header_parser.rb +78 -0
  547. data/lib/tasker/orchestration/step_executor.rb +941 -0
  548. data/lib/tasker/orchestration/step_sequence_factory.rb +67 -0
  549. data/lib/tasker/orchestration/task_finalizer.rb +564 -0
  550. data/lib/tasker/orchestration/task_initializer.rb +140 -0
  551. data/lib/tasker/orchestration/task_reenqueuer.rb +71 -0
  552. data/lib/tasker/orchestration/viable_step_discovery.rb +65 -0
  553. data/lib/tasker/orchestration/workflow_coordinator.rb +294 -0
  554. data/lib/tasker/orchestration.rb +45 -0
  555. data/lib/tasker/railtie.rb +9 -0
  556. data/lib/tasker/registry/base_registry.rb +177 -0
  557. data/lib/tasker/registry/event_publisher.rb +91 -0
  558. data/lib/tasker/registry/interface_validator.rb +140 -0
  559. data/lib/tasker/registry/statistics_collector.rb +381 -0
  560. data/lib/tasker/registry/subscriber_registry.rb +285 -0
  561. data/lib/tasker/registry.rb +22 -0
  562. data/lib/tasker/state_machine/step_state_machine.rb +508 -0
  563. data/lib/tasker/state_machine/task_state_machine.rb +192 -0
  564. data/lib/tasker/state_machine.rb +83 -0
  565. data/lib/tasker/step_handler/api.rb +410 -0
  566. data/lib/tasker/step_handler/base.rb +206 -0
  567. data/lib/tasker/task_builder.rb +432 -0
  568. data/lib/tasker/task_handler/class_methods.rb +324 -0
  569. data/lib/tasker/task_handler/instance_methods.rb +293 -0
  570. data/lib/tasker/task_handler/step_group.rb +182 -0
  571. data/lib/tasker/task_handler.rb +43 -0
  572. data/lib/tasker/telemetry/event_mapping.rb +126 -0
  573. data/lib/tasker/telemetry/event_router.rb +318 -0
  574. data/lib/tasker/telemetry/events/export_events.rb +38 -0
  575. data/lib/tasker/telemetry/export_coordinator.rb +497 -0
  576. data/lib/tasker/telemetry/intelligent_cache_manager.rb +508 -0
  577. data/lib/tasker/telemetry/log_backend.rb +224 -0
  578. data/lib/tasker/telemetry/metric_types.rb +368 -0
  579. data/lib/tasker/telemetry/metrics_backend.rb +1227 -0
  580. data/lib/tasker/telemetry/metrics_export_service.rb +392 -0
  581. data/lib/tasker/telemetry/plugin_registry.rb +333 -0
  582. data/lib/tasker/telemetry/plugins/base_exporter.rb +246 -0
  583. data/lib/tasker/telemetry/plugins/csv_exporter.rb +198 -0
  584. data/lib/tasker/telemetry/plugins/json_exporter.rb +141 -0
  585. data/lib/tasker/telemetry/prometheus_exporter.rb +249 -0
  586. data/lib/tasker/telemetry/trace_backend.rb +186 -0
  587. data/lib/tasker/telemetry.rb +59 -0
  588. data/lib/tasker/types/auth_config.rb +81 -0
  589. data/lib/tasker/types/backoff_config.rb +142 -0
  590. data/lib/tasker/types/cache_config.rb +257 -0
  591. data/lib/tasker/types/database_config.rb +39 -0
  592. data/lib/tasker/types/dependency_graph.rb +225 -0
  593. data/lib/tasker/types/dependency_graph_config.rb +149 -0
  594. data/lib/tasker/types/engine_config.rb +131 -0
  595. data/lib/tasker/types/execution_config.rb +289 -0
  596. data/lib/tasker/types/health_config.rb +84 -0
  597. data/lib/tasker/types/step_sequence.rb +24 -0
  598. data/lib/tasker/types/step_template.rb +63 -0
  599. data/lib/tasker/types/task_request.rb +60 -0
  600. data/lib/tasker/types/telemetry_config.rb +273 -0
  601. data/lib/tasker/types.rb +64 -0
  602. data/lib/tasker/version.rb +7 -0
  603. data/lib/tasker.rb +82 -0
  604. data/lib/tasks/tasker_tasks.rake +302 -0
  605. metadata +958 -0
@@ -0,0 +1,2575 @@
1
+ <!DOCTYPE html>
2
+ <html>
3
+ <head>
4
+ <meta charset="utf-8">
5
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
6
+ <title>
7
+ Class: Tasker::Task
8
+
9
+ &mdash; Documentation by YARD 0.9.37
10
+
11
+ </title>
12
+
13
+ <link rel="stylesheet" href="../css/style.css" type="text/css" />
14
+
15
+ <link rel="stylesheet" href="../css/common.css" type="text/css" />
16
+
17
+ <script type="text/javascript">
18
+ pathId = "Tasker::Task";
19
+ relpath = '../';
20
+ </script>
21
+
22
+
23
+ <script type="text/javascript" charset="utf-8" src="../js/jquery.js"></script>
24
+
25
+ <script type="text/javascript" charset="utf-8" src="../js/app.js"></script>
26
+
27
+
28
+ </head>
29
+ <body>
30
+ <div class="nav_wrap">
31
+ <iframe id="nav" src="../class_list.html?1"></iframe>
32
+ <div id="resizer"></div>
33
+ </div>
34
+
35
+ <div id="main" tabindex="-1">
36
+ <div id="header">
37
+ <div id="menu">
38
+
39
+ <a href="../_index.html">Index (T)</a> &raquo;
40
+ <span class='title'><span class='object_link'><a href="../Tasker.html" title="Tasker (module)">Tasker</a></span></span>
41
+ &raquo;
42
+ <span class="title">Task</span>
43
+
44
+ </div>
45
+
46
+ <div id="search">
47
+
48
+ <a class="full_list_link" id="class_list_link"
49
+ href="../class_list.html">
50
+
51
+ <svg width="24" height="24">
52
+ <rect x="0" y="4" width="24" height="4" rx="1" ry="1"></rect>
53
+ <rect x="0" y="12" width="24" height="4" rx="1" ry="1"></rect>
54
+ <rect x="0" y="20" width="24" height="4" rx="1" ry="1"></rect>
55
+ </svg>
56
+ </a>
57
+
58
+ </div>
59
+ <div class="clear"></div>
60
+ </div>
61
+
62
+ <div id="content"><h1>Class: Tasker::Task
63
+
64
+
65
+
66
+ </h1>
67
+ <div class="box_info">
68
+
69
+ <dl>
70
+ <dt>Inherits:</dt>
71
+ <dd>
72
+ <span class="inheritName"><span class='object_link'><a href="ApplicationRecord.html" title="Tasker::ApplicationRecord (class)">ApplicationRecord</a></span></span>
73
+
74
+ <ul class="fullTree">
75
+ <li>Object</li>
76
+
77
+ <li class="next">ActiveRecord::Base</li>
78
+
79
+ <li class="next"><span class='object_link'><a href="ApplicationRecord.html" title="Tasker::ApplicationRecord (class)">ApplicationRecord</a></span></li>
80
+
81
+ <li class="next">Tasker::Task</li>
82
+
83
+ </ul>
84
+ <a href="#" class="inheritanceTree">show all</a>
85
+
86
+ </dd>
87
+ </dl>
88
+
89
+
90
+
91
+
92
+
93
+
94
+
95
+
96
+
97
+
98
+
99
+ <dl>
100
+ <dt>Defined in:</dt>
101
+ <dd>app/models/tasker/task.rb</dd>
102
+ </dl>
103
+
104
+ </div>
105
+
106
+ <h2>Overview</h2><div class="docstring">
107
+ <div class="discussion">
108
+
109
+ <p>Task represents a workflow process that contains multiple workflow steps. Each Task is identified by a name and has a context which defines the parameters for the task. Tasks track their status via state machine transitions, initiator, source system, and other metadata.</p>
110
+
111
+
112
+ </div>
113
+ </div>
114
+ <div class="tags">
115
+
116
+ <div class="examples">
117
+ <h4 class="tag_title">Examples:</h4>
118
+
119
+
120
+ <h5 class="example_title"><div class='inline'>
121
+ <p>Creating a task from a task request</p>
122
+ </div></h5>
123
+
124
+ <pre class="example code"><code><span class='id identifier rubyid_task_request'>task_request</span> <span class='op'>=</span> <span class='const'><span class='object_link'><a href="../Tasker.html" title="Tasker (module)">Tasker</a></span></span><span class='op'>::</span><span class='const'><span class='object_link'><a href="Types.html" title="Tasker::Types (module)">Types</a></span></span><span class='op'>::</span><span class='const'><span class='object_link'><a href="Types/TaskRequest.html" title="Tasker::Types::TaskRequest (class)">TaskRequest</a></span></span><span class='period'>.</span><span class='id identifier rubyid_new'>new</span><span class='lparen'>(</span><span class='label'>name:</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>process_order</span><span class='tstring_end'>&#39;</span></span><span class='comma'>,</span> <span class='label'>context:</span> <span class='lbrace'>{</span> <span class='label'>order_id:</span> <span class='int'>123</span> <span class='rbrace'>}</span><span class='rparen'>)</span>
125
+ <span class='id identifier rubyid_task'>task</span> <span class='op'>=</span> <span class='const'><span class='object_link'><a href="../Tasker.html" title="Tasker (module)">Tasker</a></span></span><span class='op'>::</span><span class='const'>Task</span><span class='period'>.</span><span class='id identifier rubyid_create_with_defaults!'><span class='object_link'><a href="#create_with_defaults!-class_method" title="Tasker::Task.create_with_defaults! (method)">create_with_defaults!</a></span></span><span class='lparen'>(</span><span class='id identifier rubyid_task_request'>task_request</span><span class='rparen'>)</span></code></pre>
126
+
127
+ </div>
128
+
129
+
130
+ </div>
131
+
132
+ <h2>
133
+ Constant Summary
134
+ <small><a href="#" class="constants_summary_toggle">collapse</a></small>
135
+ </h2>
136
+
137
+ <dl class="constants">
138
+
139
+ <dt id="ALPHANUM_PLUS_HYPHEN_DASH-constant" class="">ALPHANUM_PLUS_HYPHEN_DASH =
140
+ <div class="docstring">
141
+ <div class="discussion">
142
+
143
+ <p>Regular expression to sanitize strings for database operations</p>
144
+
145
+
146
+ </div>
147
+ </div>
148
+ <div class="tags">
149
+
150
+
151
+ </div>
152
+ </dt>
153
+ <dd><pre class="code"><span class='tstring'><span class='regexp_beg'>/</span><span class='tstring_content'>[^0-9a-z\-_]</span><span class='regexp_end'>/i</span></span></pre></dd>
154
+
155
+ </dl>
156
+
157
+
158
+
159
+
160
+
161
+
162
+
163
+
164
+
165
+ <h2>
166
+ Class Method Summary
167
+ <small><a href="#" class="summary_toggle">collapse</a></small>
168
+ </h2>
169
+
170
+ <ul class="summary">
171
+
172
+ <li class="public ">
173
+ <span class="summary_signature">
174
+
175
+ <a href="#active-class_method" title="active (class method)">.<strong>active</strong> &#x21d2; ActiveRecord::Relation </a>
176
+
177
+
178
+
179
+ </span>
180
+
181
+
182
+
183
+
184
+
185
+
186
+
187
+
188
+
189
+ <span class="summary_desc"><div class='inline'>
190
+ <p>Scopes tasks that are currently active (not in terminal states).</p>
191
+ </div></span>
192
+
193
+ </li>
194
+
195
+
196
+ <li class="public ">
197
+ <span class="summary_signature">
198
+
199
+ <a href="#by_annotation-class_method" title="by_annotation (class method)">.<strong>by_annotation</strong> &#x21d2; ActiveRecord::Relation </a>
200
+
201
+
202
+
203
+ </span>
204
+
205
+
206
+
207
+
208
+
209
+
210
+
211
+
212
+
213
+ <span class="summary_desc"><div class='inline'>
214
+ <p>Scopes a query to find tasks with a specific annotation value.</p>
215
+ </div></span>
216
+
217
+ </li>
218
+
219
+
220
+ <li class="public ">
221
+ <span class="summary_signature">
222
+
223
+ <a href="#by_current_state-class_method" title="by_current_state (class method)">.<strong>by_current_state</strong> &#x21d2; ActiveRecord::Relation </a>
224
+
225
+
226
+
227
+ </span>
228
+
229
+
230
+
231
+
232
+
233
+
234
+
235
+
236
+
237
+ <span class="summary_desc"><div class='inline'>
238
+ <p>Scopes a query to find tasks by their current state using state machine transitions.</p>
239
+ </div></span>
240
+
241
+ </li>
242
+
243
+
244
+ <li class="public ">
245
+ <span class="summary_signature">
246
+
247
+ <a href="#completed_since-class_method" title="completed_since (class method)">.<strong>completed_since</strong> &#x21d2; ActiveRecord::Relation </a>
248
+
249
+
250
+
251
+ </span>
252
+
253
+
254
+
255
+
256
+
257
+
258
+
259
+
260
+
261
+ <span class="summary_desc"><div class='inline'>
262
+ <p>Scopes tasks completed within a specific time period.</p>
263
+ </div></span>
264
+
265
+ </li>
266
+
267
+
268
+ <li class="public ">
269
+ <span class="summary_signature">
270
+
271
+ <a href="#create_with_defaults!-class_method" title="create_with_defaults! (class method)">.<strong>create_with_defaults!</strong>(task_request) &#x21d2; Tasker::Task </a>
272
+
273
+
274
+
275
+ </span>
276
+
277
+
278
+
279
+
280
+
281
+
282
+
283
+
284
+
285
+ <span class="summary_desc"><div class='inline'>
286
+ <p>Creates a task with default values from a task request and saves it to the database.</p>
287
+ </div></span>
288
+
289
+ </li>
290
+
291
+
292
+ <li class="public ">
293
+ <span class="summary_signature">
294
+
295
+ <a href="#created_since-class_method" title="created_since (class method)">.<strong>created_since</strong> &#x21d2; ActiveRecord::Relation </a>
296
+
297
+
298
+
299
+ </span>
300
+
301
+
302
+
303
+
304
+
305
+
306
+
307
+
308
+
309
+ <span class="summary_desc"><div class='inline'>
310
+ <p>Scopes tasks created within a specific time period.</p>
311
+ </div></span>
312
+
313
+ </li>
314
+
315
+
316
+ <li class="public ">
317
+ <span class="summary_signature">
318
+
319
+ <a href="#failed_since-class_method" title="failed_since (class method)">.<strong>failed_since</strong> &#x21d2; ActiveRecord::Relation </a>
320
+
321
+
322
+
323
+ </span>
324
+
325
+
326
+
327
+
328
+
329
+
330
+
331
+
332
+
333
+ <span class="summary_desc"><div class='inline'>
334
+ <p>Scopes tasks that have failed within a specific time period This scope identifies tasks that are actually in a failed state (task status = ‘error’), not just tasks that have some failed steps but may still be progressing.</p>
335
+ </div></span>
336
+
337
+ </li>
338
+
339
+
340
+ <li class="public ">
341
+ <span class="summary_signature">
342
+
343
+ <a href="#from_task_request-class_method" title="from_task_request (class method)">.<strong>from_task_request</strong>(task_request) &#x21d2; Tasker::Task </a>
344
+
345
+
346
+
347
+ </span>
348
+
349
+
350
+
351
+
352
+
353
+
354
+
355
+
356
+
357
+ <span class="summary_desc"><div class='inline'>
358
+ <p>Creates a new unsaved task instance from a task request.</p>
359
+ </div></span>
360
+
361
+ </li>
362
+
363
+
364
+ <li class="public ">
365
+ <span class="summary_signature">
366
+
367
+ <a href="#get_default_task_request_options-class_method" title="get_default_task_request_options (class method)">.<strong>get_default_task_request_options</strong>(named_task) &#x21d2; Hash </a>
368
+
369
+
370
+
371
+ </span>
372
+
373
+
374
+
375
+
376
+
377
+
378
+
379
+
380
+
381
+ <span class="summary_desc"><div class='inline'>
382
+ <p>Provides default options for a task.</p>
383
+ </div></span>
384
+
385
+ </li>
386
+
387
+
388
+ <li class="public ">
389
+ <span class="summary_signature">
390
+
391
+ <a href="#get_request_options-class_method" title="get_request_options (class method)">.<strong>get_request_options</strong>(task_request) &#x21d2; Hash </a>
392
+
393
+
394
+
395
+ </span>
396
+
397
+
398
+
399
+
400
+
401
+
402
+
403
+
404
+
405
+ <span class="summary_desc"><div class='inline'>
406
+ <p>Extracts and compacts options from a task request.</p>
407
+ </div></span>
408
+
409
+ </li>
410
+
411
+
412
+ <li class="public ">
413
+ <span class="summary_signature">
414
+
415
+ <a href="#in_namespace-class_method" title="in_namespace (class method)">.<strong>in_namespace</strong> &#x21d2; ActiveRecord::Relation </a>
416
+
417
+
418
+
419
+ </span>
420
+
421
+
422
+
423
+
424
+
425
+
426
+
427
+
428
+
429
+ <span class="summary_desc"><div class='inline'>
430
+ <p>Scopes tasks by namespace name through the named_task association.</p>
431
+ </div></span>
432
+
433
+ </li>
434
+
435
+
436
+ <li class="public ">
437
+ <span class="summary_signature">
438
+
439
+ <a href="#unique_task_types_count-class_method" title="unique_task_types_count (class method)">.<strong>unique_task_types_count</strong> &#x21d2; Integer </a>
440
+
441
+
442
+
443
+ </span>
444
+
445
+
446
+
447
+
448
+
449
+
450
+
451
+
452
+
453
+ <span class="summary_desc"><div class='inline'>
454
+ <p>Class method for counting unique task types.</p>
455
+ </div></span>
456
+
457
+ </li>
458
+
459
+
460
+ <li class="public ">
461
+ <span class="summary_signature">
462
+
463
+ <a href="#with_task_name-class_method" title="with_task_name (class method)">.<strong>with_task_name</strong> &#x21d2; ActiveRecord::Relation </a>
464
+
465
+
466
+
467
+ </span>
468
+
469
+
470
+
471
+
472
+
473
+
474
+
475
+
476
+
477
+ <span class="summary_desc"><div class='inline'>
478
+ <p>Scopes tasks by task name through the named_task association.</p>
479
+ </div></span>
480
+
481
+ </li>
482
+
483
+
484
+ <li class="public ">
485
+ <span class="summary_signature">
486
+
487
+ <a href="#with_version-class_method" title="with_version (class method)">.<strong>with_version</strong> &#x21d2; ActiveRecord::Relation </a>
488
+
489
+
490
+
491
+ </span>
492
+
493
+
494
+
495
+
496
+
497
+
498
+
499
+
500
+
501
+ <span class="summary_desc"><div class='inline'>
502
+ <p>Scopes tasks by version through the named_task association.</p>
503
+ </div></span>
504
+
505
+ </li>
506
+
507
+
508
+ </ul>
509
+
510
+ <h2>
511
+ Instance Method Summary
512
+ <small><a href="#" class="summary_toggle">collapse</a></small>
513
+ </h2>
514
+
515
+ <ul class="summary">
516
+
517
+ <li class="public ">
518
+ <span class="summary_signature">
519
+
520
+ <a href="#all_steps_complete%3F-instance_method" title="#all_steps_complete? (instance method)">#<strong>all_steps_complete?</strong> &#x21d2; Boolean </a>
521
+
522
+
523
+
524
+ </span>
525
+
526
+
527
+
528
+
529
+
530
+
531
+
532
+
533
+
534
+ <span class="summary_desc"><div class='inline'>
535
+ <p>Checks if all steps in the task are complete.</p>
536
+ </div></span>
537
+
538
+ </li>
539
+
540
+
541
+ <li class="public ">
542
+ <span class="summary_signature">
543
+
544
+ <a href="#dependency_graph-instance_method" title="#dependency_graph (instance method)">#<strong>dependency_graph</strong> &#x21d2; Hash </a>
545
+
546
+
547
+
548
+ </span>
549
+
550
+
551
+
552
+
553
+
554
+
555
+
556
+
557
+
558
+ <span class="summary_desc"><div class='inline'>
559
+ <p>Provides runtime dependency graph analysis Delegates to RuntimeGraphAnalyzer for graph-based analysis.</p>
560
+ </div></span>
561
+
562
+ </li>
563
+
564
+
565
+ <li class="public ">
566
+ <span class="summary_signature">
567
+
568
+ <a href="#diagram-instance_method" title="#diagram (instance method)">#<strong>diagram</strong>(base_url = nil) &#x21d2; Tasker::TaskDiagram </a>
569
+
570
+
571
+
572
+ </span>
573
+
574
+
575
+
576
+
577
+
578
+
579
+
580
+
581
+
582
+ <span class="summary_desc"><div class='inline'>
583
+ <p>Gets or creates a diagram representation of this task.</p>
584
+ </div></span>
585
+
586
+ </li>
587
+
588
+
589
+ <li class="public ">
590
+ <span class="summary_signature">
591
+
592
+ <a href="#get_step_by_name-instance_method" title="#get_step_by_name (instance method)">#<strong>get_step_by_name</strong>(name) &#x21d2; Tasker::WorkflowStep<sup>?</sup> </a>
593
+
594
+
595
+
596
+ </span>
597
+
598
+
599
+
600
+
601
+
602
+
603
+
604
+
605
+
606
+ <span class="summary_desc"><div class='inline'>
607
+ <p>Finds a workflow step by its name.</p>
608
+ </div></span>
609
+
610
+ </li>
611
+
612
+
613
+ <li class="public ">
614
+ <span class="summary_signature">
615
+
616
+ <a href="#reload-instance_method" title="#reload (instance method)">#<strong>reload</strong> &#x21d2; Object </a>
617
+
618
+
619
+
620
+ </span>
621
+
622
+
623
+
624
+
625
+
626
+
627
+
628
+
629
+
630
+ <span class="summary_desc"><div class='inline'></div></span>
631
+
632
+ </li>
633
+
634
+
635
+ <li class="public ">
636
+ <span class="summary_signature">
637
+
638
+ <a href="#runtime_analyzer-instance_method" title="#runtime_analyzer (instance method)">#<strong>runtime_analyzer</strong> &#x21d2; Object </a>
639
+
640
+
641
+
642
+ </span>
643
+
644
+
645
+
646
+
647
+
648
+
649
+
650
+
651
+
652
+ <span class="summary_desc"><div class='inline'></div></span>
653
+
654
+ </li>
655
+
656
+
657
+ <li class="public ">
658
+ <span class="summary_signature">
659
+
660
+ <a href="#state_machine-instance_method" title="#state_machine (instance method)">#<strong>state_machine</strong> &#x21d2; Object </a>
661
+
662
+
663
+
664
+ </span>
665
+
666
+
667
+
668
+
669
+
670
+
671
+
672
+
673
+
674
+ <span class="summary_desc"><div class='inline'>
675
+ <p>State machine integration.</p>
676
+ </div></span>
677
+
678
+ </li>
679
+
680
+
681
+ <li class="public ">
682
+ <span class="summary_signature">
683
+
684
+ <a href="#status-instance_method" title="#status (instance method)">#<strong>status</strong> &#x21d2; Object </a>
685
+
686
+
687
+
688
+ </span>
689
+
690
+
691
+
692
+
693
+
694
+
695
+
696
+
697
+
698
+ <span class="summary_desc"><div class='inline'>
699
+ <p>Status is now entirely managed by the state machine.</p>
700
+ </div></span>
701
+
702
+ </li>
703
+
704
+
705
+ <li class="public ">
706
+ <span class="summary_signature">
707
+
708
+ <a href="#task_execution_context-instance_method" title="#task_execution_context (instance method)">#<strong>task_execution_context</strong> &#x21d2; Object </a>
709
+
710
+
711
+
712
+ </span>
713
+
714
+
715
+
716
+
717
+
718
+
719
+
720
+
721
+
722
+ <span class="summary_desc"><div class='inline'></div></span>
723
+
724
+ </li>
725
+
726
+
727
+ <li class="public ">
728
+ <span class="summary_signature">
729
+
730
+ <a href="#with_all_associated-instance_method" title="#with_all_associated (instance method)">#<strong>with_all_associated</strong> &#x21d2; ActiveRecord::Relation </a>
731
+
732
+
733
+
734
+ </span>
735
+
736
+
737
+
738
+
739
+
740
+
741
+
742
+
743
+
744
+ <span class="summary_desc"><div class='inline'>
745
+ <p>Includes all associated models for efficient querying.</p>
746
+ </div></span>
747
+
748
+ </li>
749
+
750
+
751
+ </ul>
752
+
753
+
754
+
755
+
756
+
757
+
758
+
759
+
760
+
761
+
762
+
763
+ <h3 class="inherited">Methods inherited from <span class='object_link'><a href="ApplicationRecord.html" title="Tasker::ApplicationRecord (class)">ApplicationRecord</a></span></h3>
764
+ <p class="inherited"><span class='object_link'><a href="ApplicationRecord.html#configure_database_connections-class_method" title="Tasker::ApplicationRecord.configure_database_connections (method)">configure_database_connections</a></span>, <span class='object_link'><a href="ApplicationRecord.html#database_configuration_exists%3F-class_method" title="Tasker::ApplicationRecord.database_configuration_exists? (method)">database_configuration_exists?</a></span></p>
765
+
766
+
767
+
768
+ <div id="class_method_details" class="method_details_list">
769
+ <h2>Class Method Details</h2>
770
+
771
+
772
+ <div class="method_details first">
773
+ <h3 class="signature first" id="active-class_method">
774
+
775
+ .<strong>active</strong> &#x21d2; <tt>ActiveRecord::Relation</tt>
776
+
777
+
778
+
779
+
780
+
781
+ </h3><div class="docstring">
782
+ <div class="discussion">
783
+
784
+ <p>Scopes tasks that are currently active (not in terminal states)</p>
785
+
786
+
787
+ </div>
788
+ </div>
789
+ <div class="tags">
790
+
791
+ <p class="tag_title">Returns:</p>
792
+ <ul class="return">
793
+
794
+ <li>
795
+
796
+
797
+ <span class='type'>(<tt>ActiveRecord::Relation</tt>)</span>
798
+
799
+
800
+
801
+ &mdash;
802
+ <div class='inline'>
803
+ <p>Tasks that are not complete, error, or cancelled</p>
804
+ </div>
805
+
806
+ </li>
807
+
808
+ </ul>
809
+
810
+ </div><table class="source_code">
811
+ <tr>
812
+ <td>
813
+ <pre class="lines">
814
+
815
+
816
+ 183
817
+ 184
818
+ 185
819
+ 186
820
+ 187
821
+ 188
822
+ 189
823
+ 190
824
+ 191</pre>
825
+ </td>
826
+ <td>
827
+ <pre class="code"><span class="info file"># File 'app/models/tasker/task.rb', line 183</span>
828
+
829
+ <span class='id identifier rubyid_scope'>scope</span> <span class='symbol'>:active</span><span class='comma'>,</span> <span class='id identifier rubyid_lambda'>lambda</span> <span class='lbrace'>{</span>
830
+ <span class='id identifier rubyid_joins'>joins</span><span class='lparen'>(</span><span class='label'>workflow_steps:</span> <span class='symbol'>:workflow_step_transitions</span><span class='rparen'>)</span>
831
+ <span class='period'>.</span><span class='id identifier rubyid_where'>where</span><span class='period'>.</span><span class='id identifier rubyid_not'>not</span><span class='lparen'>(</span>
832
+ <span class='label'>tasker_workflow_step_transitions:</span> <span class='lbrace'>{</span>
833
+ <span class='label'>to_state:</span> <span class='qwords_beg'>%w[</span><span class='tstring_content'>complete</span><span class='words_sep'> </span><span class='tstring_content'>error</span><span class='words_sep'> </span><span class='tstring_content'>skipped</span><span class='words_sep'> </span><span class='tstring_content'>resolved_manually</span><span class='tstring_end'>]</span></span><span class='comma'>,</span>
834
+ <span class='label'>most_recent:</span> <span class='kw'>true</span>
835
+ <span class='rbrace'>}</span>
836
+ <span class='rparen'>)</span><span class='period'>.</span><span class='id identifier rubyid_distinct'>distinct</span>
837
+ <span class='rbrace'>}</span></pre>
838
+ </td>
839
+ </tr>
840
+ </table>
841
+ </div>
842
+
843
+ <div class="method_details ">
844
+ <h3 class="signature " id="by_annotation-class_method">
845
+
846
+ .<strong>by_annotation</strong> &#x21d2; <tt>ActiveRecord::Relation</tt>
847
+
848
+
849
+
850
+
851
+
852
+ </h3><div class="docstring">
853
+ <div class="discussion">
854
+
855
+ <p>Scopes a query to find tasks with a specific annotation value</p>
856
+
857
+
858
+ </div>
859
+ </div>
860
+ <div class="tags">
861
+ <p class="tag_title">Parameters:</p>
862
+ <ul class="param">
863
+
864
+ <li>
865
+
866
+ <span class='name'>name</span>
867
+
868
+
869
+ <span class='type'>(<tt>String</tt>)</span>
870
+
871
+
872
+
873
+ &mdash;
874
+ <div class='inline'>
875
+ <p>The annotation type name</p>
876
+ </div>
877
+
878
+ </li>
879
+
880
+ <li>
881
+
882
+ <span class='name'>key</span>
883
+
884
+
885
+ <span class='type'>(<tt>String</tt>, <tt>Symbol</tt>)</span>
886
+
887
+
888
+
889
+ &mdash;
890
+ <div class='inline'>
891
+ <p>The key within the annotation to match</p>
892
+ </div>
893
+
894
+ </li>
895
+
896
+ <li>
897
+
898
+ <span class='name'>value</span>
899
+
900
+
901
+ <span class='type'>(<tt>String</tt>)</span>
902
+
903
+
904
+
905
+ &mdash;
906
+ <div class='inline'>
907
+ <p>The value to match against</p>
908
+ </div>
909
+
910
+ </li>
911
+
912
+ </ul>
913
+
914
+ <p class="tag_title">Returns:</p>
915
+ <ul class="return">
916
+
917
+ <li>
918
+
919
+
920
+ <span class='type'>(<tt>ActiveRecord::Relation</tt>)</span>
921
+
922
+
923
+
924
+ &mdash;
925
+ <div class='inline'>
926
+ <p>Tasks matching the annotation criteria</p>
927
+ </div>
928
+
929
+ </li>
930
+
931
+ </ul>
932
+
933
+ </div><table class="source_code">
934
+ <tr>
935
+ <td>
936
+ <pre class="lines">
937
+
938
+
939
+ 97
940
+ 98
941
+ 99
942
+ 100
943
+ 101
944
+ 102
945
+ 103</pre>
946
+ </td>
947
+ <td>
948
+ <pre class="code"><span class="info file"># File 'app/models/tasker/task.rb', line 97</span>
949
+
950
+ <span class='id identifier rubyid_scope'>scope</span> <span class='symbol'>:by_annotation</span><span class='comma'>,</span>
951
+ <span class='id identifier rubyid_lambda'>lambda</span> <span class='lbrace'>{</span> <span class='op'>|</span><span class='id identifier rubyid_name'>name</span><span class='comma'>,</span> <span class='id identifier rubyid_key'>key</span><span class='comma'>,</span> <span class='id identifier rubyid_value'>value</span><span class='op'>|</span>
952
+ <span class='id identifier rubyid_clean_key'>clean_key</span> <span class='op'>=</span> <span class='id identifier rubyid_key'>key</span><span class='period'>.</span><span class='id identifier rubyid_to_s'>to_s</span><span class='period'>.</span><span class='id identifier rubyid_gsub'>gsub</span><span class='lparen'>(</span><span class='const'><span class='object_link'><a href="#ALPHANUM_PLUS_HYPHEN_DASH-constant" title="Tasker::Task::ALPHANUM_PLUS_HYPHEN_DASH (constant)">ALPHANUM_PLUS_HYPHEN_DASH</a></span></span><span class='comma'>,</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_end'>&#39;</span></span><span class='rparen'>)</span>
953
+ <span class='id identifier rubyid_joins'>joins</span><span class='lparen'>(</span><span class='symbol'>:task_annotations</span><span class='comma'>,</span> <span class='symbol'>:annotation_types</span><span class='rparen'>)</span>
954
+ <span class='period'>.</span><span class='id identifier rubyid_where'>where</span><span class='lparen'>(</span><span class='lbrace'>{</span> <span class='label'>annotation_types:</span> <span class='lbrace'>{</span> <span class='label'>name:</span> <span class='id identifier rubyid_name'>name</span><span class='period'>.</span><span class='id identifier rubyid_to_s'>to_s</span><span class='period'>.</span><span class='id identifier rubyid_strip'>strip</span> <span class='rbrace'>}</span> <span class='rbrace'>}</span><span class='rparen'>)</span>
955
+ <span class='period'>.</span><span class='id identifier rubyid_where'>where</span><span class='lparen'>(</span><span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>tasker_task_annotations.annotation-&gt;&gt;&#39;</span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_clean_key'>clean_key</span><span class='embexpr_end'>}</span><span class='tstring_content'>&#39; = :value</span><span class='tstring_end'>&quot;</span></span><span class='comma'>,</span> <span class='label'>value:</span> <span class='id identifier rubyid_value'>value</span><span class='rparen'>)</span>
956
+ <span class='rbrace'>}</span></pre>
957
+ </td>
958
+ </tr>
959
+ </table>
960
+ </div>
961
+
962
+ <div class="method_details ">
963
+ <h3 class="signature " id="by_current_state-class_method">
964
+
965
+ .<strong>by_current_state</strong> &#x21d2; <tt>ActiveRecord::Relation</tt>
966
+
967
+
968
+
969
+
970
+
971
+ </h3><div class="docstring">
972
+ <div class="discussion">
973
+
974
+ <p>Scopes a query to find tasks by their current state using state machine transitions</p>
975
+
976
+
977
+ </div>
978
+ </div>
979
+ <div class="tags">
980
+ <p class="tag_title">Parameters:</p>
981
+ <ul class="param">
982
+
983
+ <li>
984
+
985
+ <span class='name'>state</span>
986
+
987
+
988
+ <span class='type'>(<tt>String</tt>, <tt>nil</tt>)</span>
989
+
990
+
991
+
992
+ &mdash;
993
+ <div class='inline'>
994
+ <p>The state to filter by. If nil, returns all tasks with current state information</p>
995
+ </div>
996
+
997
+ </li>
998
+
999
+ </ul>
1000
+
1001
+ <p class="tag_title">Returns:</p>
1002
+ <ul class="return">
1003
+
1004
+ <li>
1005
+
1006
+
1007
+ <span class='type'>(<tt>ActiveRecord::Relation</tt>)</span>
1008
+
1009
+
1010
+
1011
+ &mdash;
1012
+ <div class='inline'>
1013
+ <p>Tasks with current state, optionally filtered by specific state</p>
1014
+ </div>
1015
+
1016
+ </li>
1017
+
1018
+ </ul>
1019
+
1020
+ </div><table class="source_code">
1021
+ <tr>
1022
+ <td>
1023
+ <pre class="lines">
1024
+
1025
+
1026
+ 110
1027
+ 111
1028
+ 112
1029
+ 113
1030
+ 114
1031
+ 115
1032
+ 116
1033
+ 117
1034
+ 118
1035
+ 119
1036
+ 120
1037
+ 121
1038
+ 122
1039
+ 123
1040
+ 124
1041
+ 125</pre>
1042
+ </td>
1043
+ <td>
1044
+ <pre class="code"><span class="info file"># File 'app/models/tasker/task.rb', line 110</span>
1045
+
1046
+ <span class='id identifier rubyid_scope'>scope</span> <span class='symbol'>:by_current_state</span><span class='comma'>,</span>
1047
+ <span class='id identifier rubyid_lambda'>lambda</span> <span class='lbrace'>{</span> <span class='op'>|</span><span class='id identifier rubyid_state'>state</span> <span class='op'>=</span> <span class='kw'>nil</span><span class='op'>|</span>
1048
+ <span class='id identifier rubyid_relation'>relation</span> <span class='op'>=</span> <span class='id identifier rubyid_joins'>joins</span><span class='lparen'>(</span><span class='heredoc_beg'>&lt;&lt;-SQL</span><span class='period'>.</span><span class='id identifier rubyid_squish'>squish</span><span class='rparen'>)</span>
1049
+ <span class='tstring_content'> INNER JOIN (
1050
+ SELECT DISTINCT ON (task_id) task_id, to_state
1051
+ FROM tasker_task_transitions
1052
+ ORDER BY task_id, sort_key DESC
1053
+ ) current_transitions ON current_transitions.task_id = tasker_tasks.task_id
1054
+ </span><span class='heredoc_end'> SQL
1055
+ </span>
1056
+ <span class='kw'>if</span> <span class='id identifier rubyid_state'>state</span><span class='period'>.</span><span class='id identifier rubyid_present?'>present?</span>
1057
+ <span class='id identifier rubyid_relation'>relation</span><span class='period'>.</span><span class='id identifier rubyid_where'>where</span><span class='lparen'>(</span><span class='label'>current_transitions:</span> <span class='lbrace'>{</span> <span class='label'>to_state:</span> <span class='id identifier rubyid_state'>state</span> <span class='rbrace'>}</span><span class='rparen'>)</span>
1058
+ <span class='kw'>else</span>
1059
+ <span class='id identifier rubyid_relation'>relation</span>
1060
+ <span class='kw'>end</span>
1061
+ <span class='rbrace'>}</span></pre>
1062
+ </td>
1063
+ </tr>
1064
+ </table>
1065
+ </div>
1066
+
1067
+ <div class="method_details ">
1068
+ <h3 class="signature " id="completed_since-class_method">
1069
+
1070
+ .<strong>completed_since</strong> &#x21d2; <tt>ActiveRecord::Relation</tt>
1071
+
1072
+
1073
+
1074
+
1075
+
1076
+ </h3><div class="docstring">
1077
+ <div class="discussion">
1078
+
1079
+ <p>Scopes tasks completed within a specific time period</p>
1080
+
1081
+
1082
+ </div>
1083
+ </div>
1084
+ <div class="tags">
1085
+ <p class="tag_title">Parameters:</p>
1086
+ <ul class="param">
1087
+
1088
+ <li>
1089
+
1090
+ <span class='name'>since_time</span>
1091
+
1092
+
1093
+ <span class='type'>(<tt>Time</tt>)</span>
1094
+
1095
+
1096
+
1097
+ &mdash;
1098
+ <div class='inline'>
1099
+ <p>The earliest completion time to include</p>
1100
+ </div>
1101
+
1102
+ </li>
1103
+
1104
+ </ul>
1105
+
1106
+ <p class="tag_title">Returns:</p>
1107
+ <ul class="return">
1108
+
1109
+ <li>
1110
+
1111
+
1112
+ <span class='type'>(<tt>ActiveRecord::Relation</tt>)</span>
1113
+
1114
+
1115
+
1116
+ &mdash;
1117
+ <div class='inline'>
1118
+ <p>Tasks completed since the specified time</p>
1119
+ </div>
1120
+
1121
+ </li>
1122
+
1123
+ </ul>
1124
+
1125
+ </div><table class="source_code">
1126
+ <tr>
1127
+ <td>
1128
+ <pre class="lines">
1129
+
1130
+
1131
+ 153
1132
+ 154
1133
+ 155
1134
+ 156
1135
+ 157
1136
+ 158</pre>
1137
+ </td>
1138
+ <td>
1139
+ <pre class="code"><span class="info file"># File 'app/models/tasker/task.rb', line 153</span>
1140
+
1141
+ <span class='id identifier rubyid_scope'>scope</span> <span class='symbol'>:completed_since</span><span class='comma'>,</span> <span class='id identifier rubyid_lambda'>lambda</span> <span class='lbrace'>{</span> <span class='op'>|</span><span class='id identifier rubyid_since_time'>since_time</span><span class='op'>|</span>
1142
+ <span class='id identifier rubyid_joins'>joins</span><span class='lparen'>(</span><span class='label'>workflow_steps:</span> <span class='symbol'>:workflow_step_transitions</span><span class='rparen'>)</span>
1143
+ <span class='period'>.</span><span class='id identifier rubyid_where'>where</span><span class='lparen'>(</span><span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>tasker_workflow_step_transitions.to_state = ? AND tasker_workflow_step_transitions.most_recent = ?</span><span class='tstring_end'>&#39;</span></span><span class='comma'>,</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>complete</span><span class='tstring_end'>&#39;</span></span><span class='comma'>,</span> <span class='kw'>true</span><span class='rparen'>)</span>
1144
+ <span class='period'>.</span><span class='id identifier rubyid_where'>where</span><span class='lparen'>(</span><span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>tasker_workflow_step_transitions.created_at &gt; ?</span><span class='tstring_end'>&#39;</span></span><span class='comma'>,</span> <span class='id identifier rubyid_since_time'>since_time</span><span class='rparen'>)</span>
1145
+ <span class='period'>.</span><span class='id identifier rubyid_distinct'>distinct</span>
1146
+ <span class='rbrace'>}</span></pre>
1147
+ </td>
1148
+ </tr>
1149
+ </table>
1150
+ </div>
1151
+
1152
+ <div class="method_details ">
1153
+ <h3 class="signature " id="create_with_defaults!-class_method">
1154
+
1155
+ .<strong>create_with_defaults!</strong>(task_request) &#x21d2; <tt><span class='object_link'><a href="" title="Tasker::Task (class)">Tasker::Task</a></span></tt>
1156
+
1157
+
1158
+
1159
+
1160
+
1161
+ </h3><div class="docstring">
1162
+ <div class="discussion">
1163
+
1164
+ <p>Creates a task with default values from a task request and saves it to the database</p>
1165
+
1166
+
1167
+ </div>
1168
+ </div>
1169
+ <div class="tags">
1170
+ <p class="tag_title">Parameters:</p>
1171
+ <ul class="param">
1172
+
1173
+ <li>
1174
+
1175
+ <span class='name'>task_request</span>
1176
+
1177
+
1178
+ <span class='type'>(<tt><span class='object_link'><a href="Types/TaskRequest.html" title="Tasker::Types::TaskRequest (class)">Tasker::Types::TaskRequest</a></span></tt>)</span>
1179
+
1180
+
1181
+
1182
+ &mdash;
1183
+ <div class='inline'>
1184
+ <p>The task request containing task parameters</p>
1185
+ </div>
1186
+
1187
+ </li>
1188
+
1189
+ </ul>
1190
+
1191
+ <p class="tag_title">Returns:</p>
1192
+ <ul class="return">
1193
+
1194
+ <li>
1195
+
1196
+
1197
+ <span class='type'>(<tt><span class='object_link'><a href="" title="Tasker::Task (class)">Tasker::Task</a></span></tt>)</span>
1198
+
1199
+
1200
+
1201
+ &mdash;
1202
+ <div class='inline'>
1203
+ <p>The created and saved task</p>
1204
+ </div>
1205
+
1206
+ </li>
1207
+
1208
+ </ul>
1209
+ <p class="tag_title">Raises:</p>
1210
+ <ul class="raise">
1211
+
1212
+ <li>
1213
+
1214
+
1215
+ <span class='type'>(<tt>ActiveRecord::RecordInvalid</tt>)</span>
1216
+
1217
+
1218
+
1219
+ &mdash;
1220
+ <div class='inline'>
1221
+ <p>If the task is invalid</p>
1222
+ </div>
1223
+
1224
+ </li>
1225
+
1226
+ </ul>
1227
+
1228
+ </div><table class="source_code">
1229
+ <tr>
1230
+ <td>
1231
+ <pre class="lines">
1232
+
1233
+
1234
+ 235
1235
+ 236
1236
+ 237
1237
+ 238
1238
+ 239</pre>
1239
+ </td>
1240
+ <td>
1241
+ <pre class="code"><span class="info file"># File 'app/models/tasker/task.rb', line 235</span>
1242
+
1243
+ <span class='kw'>def</span> <span class='kw'>self</span><span class='period'>.</span><span class='id identifier rubyid_create_with_defaults!'>create_with_defaults!</span><span class='lparen'>(</span><span class='id identifier rubyid_task_request'>task_request</span><span class='rparen'>)</span>
1244
+ <span class='id identifier rubyid_task'>task</span> <span class='op'>=</span> <span class='id identifier rubyid_from_task_request'>from_task_request</span><span class='lparen'>(</span><span class='id identifier rubyid_task_request'>task_request</span><span class='rparen'>)</span>
1245
+ <span class='id identifier rubyid_task'>task</span><span class='period'>.</span><span class='id identifier rubyid_save!'>save!</span>
1246
+ <span class='id identifier rubyid_task'>task</span>
1247
+ <span class='kw'>end</span></pre>
1248
+ </td>
1249
+ </tr>
1250
+ </table>
1251
+ </div>
1252
+
1253
+ <div class="method_details ">
1254
+ <h3 class="signature " id="created_since-class_method">
1255
+
1256
+ .<strong>created_since</strong> &#x21d2; <tt>ActiveRecord::Relation</tt>
1257
+
1258
+
1259
+
1260
+
1261
+
1262
+ </h3><div class="docstring">
1263
+ <div class="discussion">
1264
+
1265
+ <p>Scopes tasks created within a specific time period</p>
1266
+
1267
+
1268
+ </div>
1269
+ </div>
1270
+ <div class="tags">
1271
+ <p class="tag_title">Parameters:</p>
1272
+ <ul class="param">
1273
+
1274
+ <li>
1275
+
1276
+ <span class='name'>since_time</span>
1277
+
1278
+
1279
+ <span class='type'>(<tt>Time</tt>)</span>
1280
+
1281
+
1282
+
1283
+ &mdash;
1284
+ <div class='inline'>
1285
+ <p>The earliest creation time to include</p>
1286
+ </div>
1287
+
1288
+ </li>
1289
+
1290
+ </ul>
1291
+
1292
+ <p class="tag_title">Returns:</p>
1293
+ <ul class="return">
1294
+
1295
+ <li>
1296
+
1297
+
1298
+ <span class='type'>(<tt>ActiveRecord::Relation</tt>)</span>
1299
+
1300
+
1301
+
1302
+ &mdash;
1303
+ <div class='inline'>
1304
+ <p>Tasks created since the specified time</p>
1305
+ </div>
1306
+
1307
+ </li>
1308
+
1309
+ </ul>
1310
+
1311
+ </div><table class="source_code">
1312
+ <tr>
1313
+ <td>
1314
+ <pre class="lines">
1315
+
1316
+
1317
+ 144
1318
+ 145
1319
+ 146</pre>
1320
+ </td>
1321
+ <td>
1322
+ <pre class="code"><span class="info file"># File 'app/models/tasker/task.rb', line 144</span>
1323
+
1324
+ <span class='id identifier rubyid_scope'>scope</span> <span class='symbol'>:created_since</span><span class='comma'>,</span> <span class='id identifier rubyid_lambda'>lambda</span> <span class='lbrace'>{</span> <span class='op'>|</span><span class='id identifier rubyid_since_time'>since_time</span><span class='op'>|</span>
1325
+ <span class='id identifier rubyid_where'>where</span><span class='lparen'>(</span><span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>tasker_tasks.created_at &gt; ?</span><span class='tstring_end'>&#39;</span></span><span class='comma'>,</span> <span class='id identifier rubyid_since_time'>since_time</span><span class='rparen'>)</span>
1326
+ <span class='rbrace'>}</span></pre>
1327
+ </td>
1328
+ </tr>
1329
+ </table>
1330
+ </div>
1331
+
1332
+ <div class="method_details ">
1333
+ <h3 class="signature " id="failed_since-class_method">
1334
+
1335
+ .<strong>failed_since</strong> &#x21d2; <tt>ActiveRecord::Relation</tt>
1336
+
1337
+
1338
+
1339
+
1340
+
1341
+ </h3><div class="docstring">
1342
+ <div class="discussion">
1343
+
1344
+ <p>Scopes tasks that have failed within a specific time period This scope identifies tasks that are actually in a failed state (task status = ‘error’), not just tasks that have some failed steps but may still be progressing.</p>
1345
+
1346
+
1347
+ </div>
1348
+ </div>
1349
+ <div class="tags">
1350
+ <p class="tag_title">Parameters:</p>
1351
+ <ul class="param">
1352
+
1353
+ <li>
1354
+
1355
+ <span class='name'>since_time</span>
1356
+
1357
+
1358
+ <span class='type'>(<tt>Time</tt>)</span>
1359
+
1360
+
1361
+
1362
+ &mdash;
1363
+ <div class='inline'>
1364
+ <p>The earliest failure time to include</p>
1365
+ </div>
1366
+
1367
+ </li>
1368
+
1369
+ </ul>
1370
+
1371
+ <p class="tag_title">Returns:</p>
1372
+ <ul class="return">
1373
+
1374
+ <li>
1375
+
1376
+
1377
+ <span class='type'>(<tt>ActiveRecord::Relation</tt>)</span>
1378
+
1379
+
1380
+
1381
+ &mdash;
1382
+ <div class='inline'>
1383
+ <p>Tasks that have transitioned to error state since the specified time</p>
1384
+ </div>
1385
+
1386
+ </li>
1387
+
1388
+ </ul>
1389
+
1390
+ </div><table class="source_code">
1391
+ <tr>
1392
+ <td>
1393
+ <pre class="lines">
1394
+
1395
+
1396
+ 167
1397
+ 168
1398
+ 169
1399
+ 170
1400
+ 171
1401
+ 172
1402
+ 173
1403
+ 174
1404
+ 175
1405
+ 176
1406
+ 177</pre>
1407
+ </td>
1408
+ <td>
1409
+ <pre class="code"><span class="info file"># File 'app/models/tasker/task.rb', line 167</span>
1410
+
1411
+ <span class='id identifier rubyid_scope'>scope</span> <span class='symbol'>:failed_since</span><span class='comma'>,</span> <span class='id identifier rubyid_lambda'>lambda</span> <span class='lbrace'>{</span> <span class='op'>|</span><span class='id identifier rubyid_since_time'>since_time</span><span class='op'>|</span>
1412
+ <span class='id identifier rubyid_joins'>joins</span><span class='lparen'>(</span><span class='heredoc_beg'>&lt;&lt;-SQL</span><span class='period'>.</span><span class='id identifier rubyid_squish'>squish</span><span class='rparen'>)</span>
1413
+ <span class='tstring_content'> INNER JOIN (
1414
+ SELECT DISTINCT ON (task_id) task_id, to_state, created_at
1415
+ FROM tasker_task_transitions
1416
+ ORDER BY task_id, sort_key DESC
1417
+ ) current_transitions ON current_transitions.task_id = tasker_tasks.task_id
1418
+ </span><span class='heredoc_end'> SQL
1419
+ </span> <span class='period'>.</span><span class='id identifier rubyid_where'>where</span><span class='lparen'>(</span><span class='label'>current_transitions:</span> <span class='lbrace'>{</span> <span class='label'>to_state:</span> <span class='const'><span class='object_link'><a href="../Tasker.html" title="Tasker (module)">Tasker</a></span></span><span class='op'>::</span><span class='const'><span class='object_link'><a href="Constants.html" title="Tasker::Constants (module)">Constants</a></span></span><span class='op'>::</span><span class='const'><span class='object_link'><a href="Constants/TaskStatuses.html" title="Tasker::Constants::TaskStatuses (module)">TaskStatuses</a></span></span><span class='op'>::</span><span class='const'><span class='object_link'><a href="Constants/TaskStatuses.html#ERROR-constant" title="Tasker::Constants::TaskStatuses::ERROR (constant)">ERROR</a></span></span> <span class='rbrace'>}</span><span class='rparen'>)</span>
1420
+ <span class='period'>.</span><span class='id identifier rubyid_where'>where</span><span class='lparen'>(</span><span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>current_transitions.created_at &gt; ?</span><span class='tstring_end'>&#39;</span></span><span class='comma'>,</span> <span class='id identifier rubyid_since_time'>since_time</span><span class='rparen'>)</span>
1421
+ <span class='rbrace'>}</span></pre>
1422
+ </td>
1423
+ </tr>
1424
+ </table>
1425
+ </div>
1426
+
1427
+ <div class="method_details ">
1428
+ <h3 class="signature " id="from_task_request-class_method">
1429
+
1430
+ .<strong>from_task_request</strong>(task_request) &#x21d2; <tt><span class='object_link'><a href="" title="Tasker::Task (class)">Tasker::Task</a></span></tt>
1431
+
1432
+
1433
+
1434
+
1435
+
1436
+ </h3><div class="docstring">
1437
+ <div class="discussion">
1438
+
1439
+ <p>Creates a new unsaved task instance from a task request</p>
1440
+
1441
+
1442
+ </div>
1443
+ </div>
1444
+ <div class="tags">
1445
+ <p class="tag_title">Parameters:</p>
1446
+ <ul class="param">
1447
+
1448
+ <li>
1449
+
1450
+ <span class='name'>task_request</span>
1451
+
1452
+
1453
+ <span class='type'>(<tt><span class='object_link'><a href="Types/TaskRequest.html" title="Tasker::Types::TaskRequest (class)">Tasker::Types::TaskRequest</a></span></tt>)</span>
1454
+
1455
+
1456
+
1457
+ &mdash;
1458
+ <div class='inline'>
1459
+ <p>The task request containing task parameters</p>
1460
+ </div>
1461
+
1462
+ </li>
1463
+
1464
+ </ul>
1465
+
1466
+ <p class="tag_title">Returns:</p>
1467
+ <ul class="return">
1468
+
1469
+ <li>
1470
+
1471
+
1472
+ <span class='type'>(<tt><span class='object_link'><a href="" title="Tasker::Task (class)">Tasker::Task</a></span></tt>)</span>
1473
+
1474
+
1475
+
1476
+ &mdash;
1477
+ <div class='inline'>
1478
+ <p>A new unsaved task instance</p>
1479
+ </div>
1480
+
1481
+ </li>
1482
+
1483
+ </ul>
1484
+
1485
+ </div><table class="source_code">
1486
+ <tr>
1487
+ <td>
1488
+ <pre class="lines">
1489
+
1490
+
1491
+ 245
1492
+ 246
1493
+ 247
1494
+ 248
1495
+ 249
1496
+ 250
1497
+ 251
1498
+ 252
1499
+ 253
1500
+ 254
1501
+ 255
1502
+ 256</pre>
1503
+ </td>
1504
+ <td>
1505
+ <pre class="code"><span class="info file"># File 'app/models/tasker/task.rb', line 245</span>
1506
+
1507
+ <span class='kw'>def</span> <span class='kw'>self</span><span class='period'>.</span><span class='id identifier rubyid_from_task_request'>from_task_request</span><span class='lparen'>(</span><span class='id identifier rubyid_task_request'>task_request</span><span class='rparen'>)</span>
1508
+ <span class='id identifier rubyid_named_task'>named_task</span> <span class='op'>=</span> <span class='const'><span class='object_link'><a href="../Tasker.html" title="Tasker (module)">Tasker</a></span></span><span class='op'>::</span><span class='const'><span class='object_link'><a href="NamedTask.html" title="Tasker::NamedTask (class)">NamedTask</a></span></span><span class='period'>.</span><span class='id identifier rubyid_find_or_create_by_full_name!'><span class='object_link'><a href="NamedTask.html#find_or_create_by_full_name!-class_method" title="Tasker::NamedTask.find_or_create_by_full_name! (method)">find_or_create_by_full_name!</a></span></span><span class='lparen'>(</span><span class='label'>name:</span> <span class='id identifier rubyid_task_request'>task_request</span><span class='period'>.</span><span class='id identifier rubyid_name'>name</span><span class='comma'>,</span>
1509
+ <span class='label'>namespace_name:</span> <span class='id identifier rubyid_task_request'>task_request</span><span class='period'>.</span><span class='id identifier rubyid_namespace'>namespace</span><span class='comma'>,</span> <span class='label'>version:</span> <span class='id identifier rubyid_task_request'>task_request</span><span class='period'>.</span><span class='id identifier rubyid_version'>version</span><span class='rparen'>)</span>
1510
+ <span class='comment'># Extract values from task_request, removing nils
1511
+ </span> <span class='id identifier rubyid_request_values'>request_values</span> <span class='op'>=</span> <span class='id identifier rubyid_get_request_options'>get_request_options</span><span class='lparen'>(</span><span class='id identifier rubyid_task_request'>task_request</span><span class='rparen'>)</span>
1512
+ <span class='comment'># Merge defaults with request values
1513
+ </span> <span class='id identifier rubyid_options'>options</span> <span class='op'>=</span> <span class='id identifier rubyid_get_default_task_request_options'>get_default_task_request_options</span><span class='lparen'>(</span><span class='id identifier rubyid_named_task'>named_task</span><span class='rparen'>)</span><span class='period'>.</span><span class='id identifier rubyid_merge'>merge</span><span class='lparen'>(</span><span class='id identifier rubyid_request_values'>request_values</span><span class='rparen'>)</span>
1514
+
1515
+ <span class='id identifier rubyid_task'>task</span> <span class='op'>=</span> <span class='id identifier rubyid_new'>new</span><span class='lparen'>(</span><span class='id identifier rubyid_options'>options</span><span class='rparen'>)</span>
1516
+ <span class='id identifier rubyid_task'>task</span><span class='period'>.</span><span class='id identifier rubyid_named_task'>named_task</span> <span class='op'>=</span> <span class='id identifier rubyid_named_task'>named_task</span>
1517
+ <span class='id identifier rubyid_task'>task</span>
1518
+ <span class='kw'>end</span></pre>
1519
+ </td>
1520
+ </tr>
1521
+ </table>
1522
+ </div>
1523
+
1524
+ <div class="method_details ">
1525
+ <h3 class="signature " id="get_default_task_request_options-class_method">
1526
+
1527
+ .<strong>get_default_task_request_options</strong>(named_task) &#x21d2; <tt>Hash</tt>
1528
+
1529
+
1530
+
1531
+
1532
+
1533
+ </h3><div class="docstring">
1534
+ <div class="discussion">
1535
+
1536
+ <p>Provides default options for a task</p>
1537
+
1538
+
1539
+ </div>
1540
+ </div>
1541
+ <div class="tags">
1542
+ <p class="tag_title">Parameters:</p>
1543
+ <ul class="param">
1544
+
1545
+ <li>
1546
+
1547
+ <span class='name'>named_task</span>
1548
+
1549
+
1550
+ <span class='type'>(<tt><span class='object_link'><a href="NamedTask.html" title="Tasker::NamedTask (class)">Tasker::NamedTask</a></span></tt>)</span>
1551
+
1552
+
1553
+
1554
+ &mdash;
1555
+ <div class='inline'>
1556
+ <p>The named task to associate with the task</p>
1557
+ </div>
1558
+
1559
+ </li>
1560
+
1561
+ </ul>
1562
+
1563
+ <p class="tag_title">Returns:</p>
1564
+ <ul class="return">
1565
+
1566
+ <li>
1567
+
1568
+
1569
+ <span class='type'>(<tt>Hash</tt>)</span>
1570
+
1571
+
1572
+
1573
+ &mdash;
1574
+ <div class='inline'>
1575
+ <p>Hash of default task options</p>
1576
+ </div>
1577
+
1578
+ </li>
1579
+
1580
+ </ul>
1581
+
1582
+ </div><table class="source_code">
1583
+ <tr>
1584
+ <td>
1585
+ <pre class="lines">
1586
+
1587
+
1588
+ 278
1589
+ 279
1590
+ 280
1591
+ 281
1592
+ 282
1593
+ 283
1594
+ 284
1595
+ 285
1596
+ 286
1597
+ 287
1598
+ 288
1599
+ 289</pre>
1600
+ </td>
1601
+ <td>
1602
+ <pre class="code"><span class="info file"># File 'app/models/tasker/task.rb', line 278</span>
1603
+
1604
+ <span class='kw'>def</span> <span class='kw'>self</span><span class='period'>.</span><span class='id identifier rubyid_get_default_task_request_options'>get_default_task_request_options</span><span class='lparen'>(</span><span class='id identifier rubyid_named_task'>named_task</span><span class='rparen'>)</span>
1605
+ <span class='lbrace'>{</span>
1606
+ <span class='label'>initiator:</span> <span class='const'><span class='object_link'><a href="../Tasker.html" title="Tasker (module)">Tasker</a></span></span><span class='op'>::</span><span class='const'><span class='object_link'><a href="Constants.html" title="Tasker::Constants (module)">Constants</a></span></span><span class='op'>::</span><span class='const'><span class='object_link'><a href="Constants.html#UNKNOWN-constant" title="Tasker::Constants::UNKNOWN (constant)">UNKNOWN</a></span></span><span class='comma'>,</span>
1607
+ <span class='label'>source_system:</span> <span class='const'><span class='object_link'><a href="Constants.html" title="Tasker::Constants (module)">Constants</a></span></span><span class='op'>::</span><span class='const'><span class='object_link'><a href="Constants.html#UNKNOWN-constant" title="Tasker::Constants::UNKNOWN (constant)">UNKNOWN</a></span></span><span class='comma'>,</span>
1608
+ <span class='label'>reason:</span> <span class='const'><span class='object_link'><a href="../Tasker.html" title="Tasker (module)">Tasker</a></span></span><span class='op'>::</span><span class='const'><span class='object_link'><a href="Constants.html" title="Tasker::Constants (module)">Constants</a></span></span><span class='op'>::</span><span class='const'><span class='object_link'><a href="Constants.html#UNKNOWN-constant" title="Tasker::Constants::UNKNOWN (constant)">UNKNOWN</a></span></span><span class='comma'>,</span>
1609
+ <span class='label'>complete:</span> <span class='kw'>false</span><span class='comma'>,</span>
1610
+ <span class='label'>tags:</span> <span class='lbracket'>[</span><span class='rbracket'>]</span><span class='comma'>,</span>
1611
+ <span class='label'>bypass_steps:</span> <span class='lbracket'>[</span><span class='rbracket'>]</span><span class='comma'>,</span>
1612
+ <span class='label'>requested_at:</span> <span class='const'>Time</span><span class='period'>.</span><span class='id identifier rubyid_zone'>zone</span><span class='period'>.</span><span class='id identifier rubyid_now'>now</span><span class='comma'>,</span>
1613
+ <span class='label'>named_task_id:</span> <span class='id identifier rubyid_named_task'>named_task</span><span class='period'>.</span><span class='id identifier rubyid_named_task_id'>named_task_id</span>
1614
+ <span class='rbrace'>}</span>
1615
+ <span class='kw'>end</span></pre>
1616
+ </td>
1617
+ </tr>
1618
+ </table>
1619
+ </div>
1620
+
1621
+ <div class="method_details ">
1622
+ <h3 class="signature " id="get_request_options-class_method">
1623
+
1624
+ .<strong>get_request_options</strong>(task_request) &#x21d2; <tt>Hash</tt>
1625
+
1626
+
1627
+
1628
+
1629
+
1630
+ </h3><div class="docstring">
1631
+ <div class="discussion">
1632
+
1633
+ <p>Extracts and compacts options from a task request</p>
1634
+
1635
+
1636
+ </div>
1637
+ </div>
1638
+ <div class="tags">
1639
+ <p class="tag_title">Parameters:</p>
1640
+ <ul class="param">
1641
+
1642
+ <li>
1643
+
1644
+ <span class='name'>task_request</span>
1645
+
1646
+
1647
+ <span class='type'>(<tt><span class='object_link'><a href="Types/TaskRequest.html" title="Tasker::Types::TaskRequest (class)">Tasker::Types::TaskRequest</a></span></tt>)</span>
1648
+
1649
+
1650
+
1651
+ &mdash;
1652
+ <div class='inline'>
1653
+ <p>The task request to extract options from</p>
1654
+ </div>
1655
+
1656
+ </li>
1657
+
1658
+ </ul>
1659
+
1660
+ <p class="tag_title">Returns:</p>
1661
+ <ul class="return">
1662
+
1663
+ <li>
1664
+
1665
+
1666
+ <span class='type'>(<tt>Hash</tt>)</span>
1667
+
1668
+
1669
+
1670
+ &mdash;
1671
+ <div class='inline'>
1672
+ <p>Hash of non-nil task options from the request</p>
1673
+ </div>
1674
+
1675
+ </li>
1676
+
1677
+ </ul>
1678
+
1679
+ </div><table class="source_code">
1680
+ <tr>
1681
+ <td>
1682
+ <pre class="lines">
1683
+
1684
+
1685
+ 262
1686
+ 263
1687
+ 264
1688
+ 265
1689
+ 266
1690
+ 267
1691
+ 268
1692
+ 269
1693
+ 270
1694
+ 271
1695
+ 272</pre>
1696
+ </td>
1697
+ <td>
1698
+ <pre class="code"><span class="info file"># File 'app/models/tasker/task.rb', line 262</span>
1699
+
1700
+ <span class='kw'>def</span> <span class='kw'>self</span><span class='period'>.</span><span class='id identifier rubyid_get_request_options'>get_request_options</span><span class='lparen'>(</span><span class='id identifier rubyid_task_request'>task_request</span><span class='rparen'>)</span>
1701
+ <span class='lbrace'>{</span>
1702
+ <span class='label'>initiator:</span> <span class='id identifier rubyid_task_request'>task_request</span><span class='period'>.</span><span class='id identifier rubyid_initiator'>initiator</span><span class='comma'>,</span>
1703
+ <span class='label'>source_system:</span> <span class='id identifier rubyid_task_request'>task_request</span><span class='period'>.</span><span class='id identifier rubyid_source_system'>source_system</span><span class='comma'>,</span>
1704
+ <span class='label'>reason:</span> <span class='id identifier rubyid_task_request'>task_request</span><span class='period'>.</span><span class='id identifier rubyid_reason'>reason</span><span class='comma'>,</span>
1705
+ <span class='label'>tags:</span> <span class='id identifier rubyid_task_request'>task_request</span><span class='period'>.</span><span class='id identifier rubyid_tags'>tags</span><span class='comma'>,</span>
1706
+ <span class='label'>bypass_steps:</span> <span class='id identifier rubyid_task_request'>task_request</span><span class='period'>.</span><span class='id identifier rubyid_bypass_steps'>bypass_steps</span><span class='comma'>,</span>
1707
+ <span class='label'>requested_at:</span> <span class='id identifier rubyid_task_request'>task_request</span><span class='period'>.</span><span class='id identifier rubyid_requested_at'>requested_at</span><span class='comma'>,</span>
1708
+ <span class='label'>context:</span> <span class='id identifier rubyid_task_request'>task_request</span><span class='period'>.</span><span class='id identifier rubyid_context'>context</span>
1709
+ <span class='rbrace'>}</span><span class='period'>.</span><span class='id identifier rubyid_compact'>compact</span>
1710
+ <span class='kw'>end</span></pre>
1711
+ </td>
1712
+ </tr>
1713
+ </table>
1714
+ </div>
1715
+
1716
+ <div class="method_details ">
1717
+ <h3 class="signature " id="in_namespace-class_method">
1718
+
1719
+ .<strong>in_namespace</strong> &#x21d2; <tt>ActiveRecord::Relation</tt>
1720
+
1721
+
1722
+
1723
+
1724
+
1725
+ </h3><div class="docstring">
1726
+ <div class="discussion">
1727
+
1728
+ <p>Scopes tasks by namespace name through the named_task association</p>
1729
+
1730
+
1731
+ </div>
1732
+ </div>
1733
+ <div class="tags">
1734
+ <p class="tag_title">Parameters:</p>
1735
+ <ul class="param">
1736
+
1737
+ <li>
1738
+
1739
+ <span class='name'>namespace_name</span>
1740
+
1741
+
1742
+ <span class='type'>(<tt>String</tt>)</span>
1743
+
1744
+
1745
+
1746
+ &mdash;
1747
+ <div class='inline'>
1748
+ <p>The namespace name to filter by</p>
1749
+ </div>
1750
+
1751
+ </li>
1752
+
1753
+ </ul>
1754
+
1755
+ <p class="tag_title">Returns:</p>
1756
+ <ul class="return">
1757
+
1758
+ <li>
1759
+
1760
+
1761
+ <span class='type'>(<tt>ActiveRecord::Relation</tt>)</span>
1762
+
1763
+
1764
+
1765
+ &mdash;
1766
+ <div class='inline'>
1767
+ <p>Tasks in the specified namespace</p>
1768
+ </div>
1769
+
1770
+ </li>
1771
+
1772
+ </ul>
1773
+
1774
+ </div><table class="source_code">
1775
+ <tr>
1776
+ <td>
1777
+ <pre class="lines">
1778
+
1779
+
1780
+ 198
1781
+ 199
1782
+ 200
1783
+ 201</pre>
1784
+ </td>
1785
+ <td>
1786
+ <pre class="code"><span class="info file"># File 'app/models/tasker/task.rb', line 198</span>
1787
+
1788
+ <span class='id identifier rubyid_scope'>scope</span> <span class='symbol'>:in_namespace</span><span class='comma'>,</span> <span class='id identifier rubyid_lambda'>lambda</span> <span class='lbrace'>{</span> <span class='op'>|</span><span class='id identifier rubyid_namespace_name'>namespace_name</span><span class='op'>|</span>
1789
+ <span class='id identifier rubyid_joins'>joins</span><span class='lparen'>(</span><span class='label'>named_task:</span> <span class='symbol'>:task_namespace</span><span class='rparen'>)</span>
1790
+ <span class='period'>.</span><span class='id identifier rubyid_where'>where</span><span class='lparen'>(</span><span class='label'>tasker_task_namespaces:</span> <span class='lbrace'>{</span> <span class='label'>name:</span> <span class='id identifier rubyid_namespace_name'>namespace_name</span> <span class='rbrace'>}</span><span class='rparen'>)</span>
1791
+ <span class='rbrace'>}</span></pre>
1792
+ </td>
1793
+ </tr>
1794
+ </table>
1795
+ </div>
1796
+
1797
+ <div class="method_details ">
1798
+ <h3 class="signature " id="unique_task_types_count-class_method">
1799
+
1800
+ .<strong>unique_task_types_count</strong> &#x21d2; <tt>Integer</tt>
1801
+
1802
+
1803
+
1804
+
1805
+
1806
+ </h3><div class="docstring">
1807
+ <div class="discussion">
1808
+
1809
+ <p>Class method for counting unique task types</p>
1810
+
1811
+
1812
+ </div>
1813
+ </div>
1814
+ <div class="tags">
1815
+
1816
+ <p class="tag_title">Returns:</p>
1817
+ <ul class="return">
1818
+
1819
+ <li>
1820
+
1821
+
1822
+ <span class='type'>(<tt>Integer</tt>)</span>
1823
+
1824
+
1825
+
1826
+ &mdash;
1827
+ <div class='inline'>
1828
+ <p>Count of unique task names</p>
1829
+ </div>
1830
+
1831
+ </li>
1832
+
1833
+ </ul>
1834
+
1835
+ </div><table class="source_code">
1836
+ <tr>
1837
+ <td>
1838
+ <pre class="lines">
1839
+
1840
+
1841
+ 226
1842
+ 227
1843
+ 228</pre>
1844
+ </td>
1845
+ <td>
1846
+ <pre class="code"><span class="info file"># File 'app/models/tasker/task.rb', line 226</span>
1847
+
1848
+ <span class='kw'>def</span> <span class='kw'>self</span><span class='period'>.</span><span class='id identifier rubyid_unique_task_types_count'>unique_task_types_count</span>
1849
+ <span class='id identifier rubyid_joins'>joins</span><span class='lparen'>(</span><span class='symbol'>:named_task</span><span class='rparen'>)</span><span class='period'>.</span><span class='id identifier rubyid_distinct'>distinct</span><span class='period'>.</span><span class='id identifier rubyid_count'>count</span><span class='lparen'>(</span><span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>tasker_named_tasks.name</span><span class='tstring_end'>&#39;</span></span><span class='rparen'>)</span>
1850
+ <span class='kw'>end</span></pre>
1851
+ </td>
1852
+ </tr>
1853
+ </table>
1854
+ </div>
1855
+
1856
+ <div class="method_details ">
1857
+ <h3 class="signature " id="with_task_name-class_method">
1858
+
1859
+ .<strong>with_task_name</strong> &#x21d2; <tt>ActiveRecord::Relation</tt>
1860
+
1861
+
1862
+
1863
+
1864
+
1865
+ </h3><div class="docstring">
1866
+ <div class="discussion">
1867
+
1868
+ <p>Scopes tasks by task name through the named_task association</p>
1869
+
1870
+
1871
+ </div>
1872
+ </div>
1873
+ <div class="tags">
1874
+ <p class="tag_title">Parameters:</p>
1875
+ <ul class="param">
1876
+
1877
+ <li>
1878
+
1879
+ <span class='name'>task_name</span>
1880
+
1881
+
1882
+ <span class='type'>(<tt>String</tt>)</span>
1883
+
1884
+
1885
+
1886
+ &mdash;
1887
+ <div class='inline'>
1888
+ <p>The task name to filter by</p>
1889
+ </div>
1890
+
1891
+ </li>
1892
+
1893
+ </ul>
1894
+
1895
+ <p class="tag_title">Returns:</p>
1896
+ <ul class="return">
1897
+
1898
+ <li>
1899
+
1900
+
1901
+ <span class='type'>(<tt>ActiveRecord::Relation</tt>)</span>
1902
+
1903
+
1904
+
1905
+ &mdash;
1906
+ <div class='inline'>
1907
+ <p>Tasks with the specified name</p>
1908
+ </div>
1909
+
1910
+ </li>
1911
+
1912
+ </ul>
1913
+
1914
+ </div><table class="source_code">
1915
+ <tr>
1916
+ <td>
1917
+ <pre class="lines">
1918
+
1919
+
1920
+ 208
1921
+ 209
1922
+ 210
1923
+ 211</pre>
1924
+ </td>
1925
+ <td>
1926
+ <pre class="code"><span class="info file"># File 'app/models/tasker/task.rb', line 208</span>
1927
+
1928
+ <span class='id identifier rubyid_scope'>scope</span> <span class='symbol'>:with_task_name</span><span class='comma'>,</span> <span class='id identifier rubyid_lambda'>lambda</span> <span class='lbrace'>{</span> <span class='op'>|</span><span class='id identifier rubyid_task_name'>task_name</span><span class='op'>|</span>
1929
+ <span class='id identifier rubyid_joins'>joins</span><span class='lparen'>(</span><span class='symbol'>:named_task</span><span class='rparen'>)</span>
1930
+ <span class='period'>.</span><span class='id identifier rubyid_where'>where</span><span class='lparen'>(</span><span class='label'>tasker_named_tasks:</span> <span class='lbrace'>{</span> <span class='label'>name:</span> <span class='id identifier rubyid_task_name'>task_name</span> <span class='rbrace'>}</span><span class='rparen'>)</span>
1931
+ <span class='rbrace'>}</span></pre>
1932
+ </td>
1933
+ </tr>
1934
+ </table>
1935
+ </div>
1936
+
1937
+ <div class="method_details ">
1938
+ <h3 class="signature " id="with_version-class_method">
1939
+
1940
+ .<strong>with_version</strong> &#x21d2; <tt>ActiveRecord::Relation</tt>
1941
+
1942
+
1943
+
1944
+
1945
+
1946
+ </h3><div class="docstring">
1947
+ <div class="discussion">
1948
+
1949
+ <p>Scopes tasks by version through the named_task association</p>
1950
+
1951
+
1952
+ </div>
1953
+ </div>
1954
+ <div class="tags">
1955
+ <p class="tag_title">Parameters:</p>
1956
+ <ul class="param">
1957
+
1958
+ <li>
1959
+
1960
+ <span class='name'>version</span>
1961
+
1962
+
1963
+ <span class='type'>(<tt>String</tt>)</span>
1964
+
1965
+
1966
+
1967
+ &mdash;
1968
+ <div class='inline'>
1969
+ <p>The version to filter by</p>
1970
+ </div>
1971
+
1972
+ </li>
1973
+
1974
+ </ul>
1975
+
1976
+ <p class="tag_title">Returns:</p>
1977
+ <ul class="return">
1978
+
1979
+ <li>
1980
+
1981
+
1982
+ <span class='type'>(<tt>ActiveRecord::Relation</tt>)</span>
1983
+
1984
+
1985
+
1986
+ &mdash;
1987
+ <div class='inline'>
1988
+ <p>Tasks with the specified version</p>
1989
+ </div>
1990
+
1991
+ </li>
1992
+
1993
+ </ul>
1994
+
1995
+ </div><table class="source_code">
1996
+ <tr>
1997
+ <td>
1998
+ <pre class="lines">
1999
+
2000
+
2001
+ 218
2002
+ 219
2003
+ 220
2004
+ 221</pre>
2005
+ </td>
2006
+ <td>
2007
+ <pre class="code"><span class="info file"># File 'app/models/tasker/task.rb', line 218</span>
2008
+
2009
+ <span class='id identifier rubyid_scope'>scope</span> <span class='symbol'>:with_version</span><span class='comma'>,</span> <span class='id identifier rubyid_lambda'>lambda</span> <span class='lbrace'>{</span> <span class='op'>|</span><span class='id identifier rubyid_version'>version</span><span class='op'>|</span>
2010
+ <span class='id identifier rubyid_joins'>joins</span><span class='lparen'>(</span><span class='symbol'>:named_task</span><span class='rparen'>)</span>
2011
+ <span class='period'>.</span><span class='id identifier rubyid_where'>where</span><span class='lparen'>(</span><span class='label'>tasker_named_tasks:</span> <span class='lbrace'>{</span> <span class='label'>version:</span> <span class='id identifier rubyid_version'>version</span> <span class='rbrace'>}</span><span class='rparen'>)</span>
2012
+ <span class='rbrace'>}</span></pre>
2013
+ </td>
2014
+ </tr>
2015
+ </table>
2016
+ </div>
2017
+
2018
+ </div>
2019
+
2020
+ <div id="instance_method_details" class="method_details_list">
2021
+ <h2>Instance Method Details</h2>
2022
+
2023
+
2024
+ <div class="method_details first">
2025
+ <h3 class="signature first" id="all_steps_complete?-instance_method">
2026
+
2027
+ #<strong>all_steps_complete?</strong> &#x21d2; <tt>Boolean</tt>
2028
+
2029
+
2030
+
2031
+
2032
+
2033
+ </h3><div class="docstring">
2034
+ <div class="discussion">
2035
+
2036
+ <p>Checks if all steps in the task are complete</p>
2037
+
2038
+
2039
+ </div>
2040
+ </div>
2041
+ <div class="tags">
2042
+
2043
+ <p class="tag_title">Returns:</p>
2044
+ <ul class="return">
2045
+
2046
+ <li>
2047
+
2048
+
2049
+ <span class='type'>(<tt>Boolean</tt>)</span>
2050
+
2051
+
2052
+
2053
+ &mdash;
2054
+ <div class='inline'>
2055
+ <p>True if all steps are complete, false otherwise</p>
2056
+ </div>
2057
+
2058
+ </li>
2059
+
2060
+ </ul>
2061
+
2062
+ </div><table class="source_code">
2063
+ <tr>
2064
+ <td>
2065
+ <pre class="lines">
2066
+
2067
+
2068
+ 322
2069
+ 323
2070
+ 324</pre>
2071
+ </td>
2072
+ <td>
2073
+ <pre class="code"><span class="info file"># File 'app/models/tasker/task.rb', line 322</span>
2074
+
2075
+ <span class='kw'>def</span> <span class='id identifier rubyid_all_steps_complete?'>all_steps_complete?</span>
2076
+ <span class='const'><span class='object_link'><a href="../Tasker.html" title="Tasker (module)">Tasker</a></span></span><span class='op'>::</span><span class='const'><span class='object_link'><a href="StepReadinessStatus.html" title="Tasker::StepReadinessStatus (class)">StepReadinessStatus</a></span></span><span class='period'>.</span><span class='id identifier rubyid_all_steps_complete_for_task?'><span class='object_link'><a href="StepReadinessStatus.html#all_steps_complete_for_task%3F-class_method" title="Tasker::StepReadinessStatus.all_steps_complete_for_task? (method)">all_steps_complete_for_task?</a></span></span><span class='lparen'>(</span><span class='kw'>self</span><span class='rparen'>)</span>
2077
+ <span class='kw'>end</span></pre>
2078
+ </td>
2079
+ </tr>
2080
+ </table>
2081
+ </div>
2082
+
2083
+ <div class="method_details ">
2084
+ <h3 class="signature " id="dependency_graph-instance_method">
2085
+
2086
+ #<strong>dependency_graph</strong> &#x21d2; <tt>Hash</tt>
2087
+
2088
+
2089
+
2090
+
2091
+
2092
+ </h3><div class="docstring">
2093
+ <div class="discussion">
2094
+
2095
+ <p>Provides runtime dependency graph analysis Delegates to RuntimeGraphAnalyzer for graph-based analysis</p>
2096
+
2097
+
2098
+ </div>
2099
+ </div>
2100
+ <div class="tags">
2101
+
2102
+ <p class="tag_title">Returns:</p>
2103
+ <ul class="return">
2104
+
2105
+ <li>
2106
+
2107
+
2108
+ <span class='type'>(<tt>Hash</tt>)</span>
2109
+
2110
+
2111
+
2112
+ &mdash;
2113
+ <div class='inline'>
2114
+ <p>Runtime dependency graph analysis</p>
2115
+ </div>
2116
+
2117
+ </li>
2118
+
2119
+ </ul>
2120
+
2121
+ </div><table class="source_code">
2122
+ <tr>
2123
+ <td>
2124
+ <pre class="lines">
2125
+
2126
+
2127
+ 315
2128
+ 316
2129
+ 317</pre>
2130
+ </td>
2131
+ <td>
2132
+ <pre class="code"><span class="info file"># File 'app/models/tasker/task.rb', line 315</span>
2133
+
2134
+ <span class='kw'>def</span> <span class='id identifier rubyid_dependency_graph'>dependency_graph</span>
2135
+ <span class='id identifier rubyid_runtime_analyzer'>runtime_analyzer</span><span class='period'>.</span><span class='id identifier rubyid_analyze'>analyze</span>
2136
+ <span class='kw'>end</span></pre>
2137
+ </td>
2138
+ </tr>
2139
+ </table>
2140
+ </div>
2141
+
2142
+ <div class="method_details ">
2143
+ <h3 class="signature " id="diagram-instance_method">
2144
+
2145
+ #<strong>diagram</strong>(base_url = nil) &#x21d2; <tt><span class='object_link'><a href="TaskDiagram.html" title="Tasker::TaskDiagram (class)">Tasker::TaskDiagram</a></span></tt>
2146
+
2147
+
2148
+
2149
+
2150
+
2151
+ </h3><div class="docstring">
2152
+ <div class="discussion">
2153
+
2154
+ <p>Gets or creates a diagram representation of this task</p>
2155
+
2156
+
2157
+ </div>
2158
+ </div>
2159
+ <div class="tags">
2160
+ <p class="tag_title">Parameters:</p>
2161
+ <ul class="param">
2162
+
2163
+ <li>
2164
+
2165
+ <span class='name'>base_url</span>
2166
+
2167
+
2168
+ <span class='type'>(<tt>String</tt>, <tt>nil</tt>)</span>
2169
+
2170
+
2171
+ <em class="default">(defaults to: <tt>nil</tt>)</em>
2172
+
2173
+
2174
+ &mdash;
2175
+ <div class='inline'>
2176
+ <p>The base URL to use for links in the diagram, defaults to nil</p>
2177
+ </div>
2178
+
2179
+ </li>
2180
+
2181
+ </ul>
2182
+
2183
+ <p class="tag_title">Returns:</p>
2184
+ <ul class="return">
2185
+
2186
+ <li>
2187
+
2188
+
2189
+ <span class='type'>(<tt><span class='object_link'><a href="TaskDiagram.html" title="Tasker::TaskDiagram (class)">Tasker::TaskDiagram</a></span></tt>)</span>
2190
+
2191
+
2192
+
2193
+ &mdash;
2194
+ <div class='inline'>
2195
+ <p>The diagram representation of this task</p>
2196
+ </div>
2197
+
2198
+ </li>
2199
+
2200
+ </ul>
2201
+
2202
+ </div><table class="source_code">
2203
+ <tr>
2204
+ <td>
2205
+ <pre class="lines">
2206
+
2207
+
2208
+ 303
2209
+ 304
2210
+ 305</pre>
2211
+ </td>
2212
+ <td>
2213
+ <pre class="code"><span class="info file"># File 'app/models/tasker/task.rb', line 303</span>
2214
+
2215
+ <span class='kw'>def</span> <span class='id identifier rubyid_diagram'>diagram</span><span class='lparen'>(</span><span class='id identifier rubyid_base_url'>base_url</span> <span class='op'>=</span> <span class='kw'>nil</span><span class='rparen'>)</span>
2216
+ <span class='ivar'>@diagram</span> <span class='op'>||=</span> <span class='const'><span class='object_link'><a href="../Tasker.html" title="Tasker (module)">Tasker</a></span></span><span class='op'>::</span><span class='const'><span class='object_link'><a href="TaskDiagram.html" title="Tasker::TaskDiagram (class)">TaskDiagram</a></span></span><span class='period'>.</span><span class='id identifier rubyid_new'><span class='object_link'><a href="TaskDiagram.html#initialize-instance_method" title="Tasker::TaskDiagram#initialize (method)">new</a></span></span><span class='lparen'>(</span><span class='kw'>self</span><span class='comma'>,</span> <span class='id identifier rubyid_base_url'>base_url</span><span class='rparen'>)</span>
2217
+ <span class='kw'>end</span></pre>
2218
+ </td>
2219
+ </tr>
2220
+ </table>
2221
+ </div>
2222
+
2223
+ <div class="method_details ">
2224
+ <h3 class="signature " id="get_step_by_name-instance_method">
2225
+
2226
+ #<strong>get_step_by_name</strong>(name) &#x21d2; <tt><span class='object_link'><a href="WorkflowStep.html" title="Tasker::WorkflowStep (class)">Tasker::WorkflowStep</a></span></tt><sup>?</sup>
2227
+
2228
+
2229
+
2230
+
2231
+
2232
+ </h3><div class="docstring">
2233
+ <div class="discussion">
2234
+
2235
+ <p>Finds a workflow step by its name</p>
2236
+
2237
+
2238
+ </div>
2239
+ </div>
2240
+ <div class="tags">
2241
+ <p class="tag_title">Parameters:</p>
2242
+ <ul class="param">
2243
+
2244
+ <li>
2245
+
2246
+ <span class='name'>name</span>
2247
+
2248
+
2249
+ <span class='type'>(<tt>String</tt>)</span>
2250
+
2251
+
2252
+
2253
+ &mdash;
2254
+ <div class='inline'>
2255
+ <p>The name of the step to find</p>
2256
+ </div>
2257
+
2258
+ </li>
2259
+
2260
+ </ul>
2261
+
2262
+ <p class="tag_title">Returns:</p>
2263
+ <ul class="return">
2264
+
2265
+ <li>
2266
+
2267
+
2268
+ <span class='type'>(<tt><span class='object_link'><a href="WorkflowStep.html" title="Tasker::WorkflowStep (class)">Tasker::WorkflowStep</a></span></tt>, <tt>nil</tt>)</span>
2269
+
2270
+
2271
+
2272
+ &mdash;
2273
+ <div class='inline'>
2274
+ <p>The workflow step with the given name, or nil if not found</p>
2275
+ </div>
2276
+
2277
+ </li>
2278
+
2279
+ </ul>
2280
+
2281
+ </div><table class="source_code">
2282
+ <tr>
2283
+ <td>
2284
+ <pre class="lines">
2285
+
2286
+
2287
+ 295
2288
+ 296
2289
+ 297</pre>
2290
+ </td>
2291
+ <td>
2292
+ <pre class="code"><span class="info file"># File 'app/models/tasker/task.rb', line 295</span>
2293
+
2294
+ <span class='kw'>def</span> <span class='id identifier rubyid_get_step_by_name'>get_step_by_name</span><span class='lparen'>(</span><span class='id identifier rubyid_name'>name</span><span class='rparen'>)</span>
2295
+ <span class='id identifier rubyid_workflow_steps'>workflow_steps</span><span class='period'>.</span><span class='id identifier rubyid_includes'>includes</span><span class='lparen'>(</span><span class='symbol'>:named_step</span><span class='rparen'>)</span><span class='period'>.</span><span class='id identifier rubyid_where'>where</span><span class='lparen'>(</span><span class='label'>named_step:</span> <span class='lbrace'>{</span> <span class='label'>name:</span> <span class='id identifier rubyid_name'>name</span> <span class='rbrace'>}</span><span class='rparen'>)</span><span class='period'>.</span><span class='id identifier rubyid_first'>first</span>
2296
+ <span class='kw'>end</span></pre>
2297
+ </td>
2298
+ </tr>
2299
+ </table>
2300
+ </div>
2301
+
2302
+ <div class="method_details ">
2303
+ <h3 class="signature " id="reload-instance_method">
2304
+
2305
+ #<strong>reload</strong> &#x21d2; <tt>Object</tt>
2306
+
2307
+
2308
+
2309
+
2310
+
2311
+ </h3><table class="source_code">
2312
+ <tr>
2313
+ <td>
2314
+ <pre class="lines">
2315
+
2316
+
2317
+ 330
2318
+ 331
2319
+ 332
2320
+ 333
2321
+ 334</pre>
2322
+ </td>
2323
+ <td>
2324
+ <pre class="code"><span class="info file"># File 'app/models/tasker/task.rb', line 330</span>
2325
+
2326
+ <span class='kw'>def</span> <span class='id identifier rubyid_reload'>reload</span>
2327
+ <span class='kw'>super</span>
2328
+ <span class='ivar'>@task_execution_context</span> <span class='op'>=</span> <span class='kw'>nil</span>
2329
+ <span class='ivar'>@diagram</span> <span class='op'>=</span> <span class='kw'>nil</span>
2330
+ <span class='kw'>end</span></pre>
2331
+ </td>
2332
+ </tr>
2333
+ </table>
2334
+ </div>
2335
+
2336
+ <div class="method_details ">
2337
+ <h3 class="signature " id="runtime_analyzer-instance_method">
2338
+
2339
+ #<strong>runtime_analyzer</strong> &#x21d2; <tt>Object</tt>
2340
+
2341
+
2342
+
2343
+
2344
+
2345
+ </h3><table class="source_code">
2346
+ <tr>
2347
+ <td>
2348
+ <pre class="lines">
2349
+
2350
+
2351
+ 307
2352
+ 308
2353
+ 309</pre>
2354
+ </td>
2355
+ <td>
2356
+ <pre class="code"><span class="info file"># File 'app/models/tasker/task.rb', line 307</span>
2357
+
2358
+ <span class='kw'>def</span> <span class='id identifier rubyid_runtime_analyzer'>runtime_analyzer</span>
2359
+ <span class='ivar'>@runtime_analyzer</span> <span class='op'>||=</span> <span class='const'><span class='object_link'><a href="../Tasker.html" title="Tasker (module)">Tasker</a></span></span><span class='op'>::</span><span class='const'><span class='object_link'><a href="Analysis.html" title="Tasker::Analysis (module)">Analysis</a></span></span><span class='op'>::</span><span class='const'><span class='object_link'><a href="Analysis/RuntimeGraphAnalyzer.html" title="Tasker::Analysis::RuntimeGraphAnalyzer (class)">RuntimeGraphAnalyzer</a></span></span><span class='period'>.</span><span class='id identifier rubyid_new'><span class='object_link'><a href="Analysis/RuntimeGraphAnalyzer.html#initialize-instance_method" title="Tasker::Analysis::RuntimeGraphAnalyzer#initialize (method)">new</a></span></span><span class='lparen'>(</span><span class='label'>task:</span> <span class='kw'>self</span><span class='rparen'>)</span>
2360
+ <span class='kw'>end</span></pre>
2361
+ </td>
2362
+ </tr>
2363
+ </table>
2364
+ </div>
2365
+
2366
+ <div class="method_details ">
2367
+ <h3 class="signature " id="state_machine-instance_method">
2368
+
2369
+ #<strong>state_machine</strong> &#x21d2; <tt>Object</tt>
2370
+
2371
+
2372
+
2373
+
2374
+
2375
+ </h3><div class="docstring">
2376
+ <div class="discussion">
2377
+
2378
+ <p>State machine integration</p>
2379
+
2380
+
2381
+ </div>
2382
+ </div>
2383
+ <div class="tags">
2384
+
2385
+
2386
+ </div><table class="source_code">
2387
+ <tr>
2388
+ <td>
2389
+ <pre class="lines">
2390
+
2391
+
2392
+ 71
2393
+ 72
2394
+ 73
2395
+ 74
2396
+ 75
2397
+ 76
2398
+ 77</pre>
2399
+ </td>
2400
+ <td>
2401
+ <pre class="code"><span class="info file"># File 'app/models/tasker/task.rb', line 71</span>
2402
+
2403
+ <span class='kw'>def</span> <span class='id identifier rubyid_state_machine'>state_machine</span>
2404
+ <span class='ivar'>@state_machine</span> <span class='op'>||=</span> <span class='const'><span class='object_link'><a href="../Tasker.html" title="Tasker (module)">Tasker</a></span></span><span class='op'>::</span><span class='const'><span class='object_link'><a href="StateMachine.html" title="Tasker::StateMachine (module)">StateMachine</a></span></span><span class='op'>::</span><span class='const'><span class='object_link'><a href="StateMachine/TaskStateMachine.html" title="Tasker::StateMachine::TaskStateMachine (class)">TaskStateMachine</a></span></span><span class='period'>.</span><span class='id identifier rubyid_new'>new</span><span class='lparen'>(</span>
2405
+ <span class='kw'>self</span><span class='comma'>,</span>
2406
+ <span class='label'>transition_class:</span> <span class='const'><span class='object_link'><a href="../Tasker.html" title="Tasker (module)">Tasker</a></span></span><span class='op'>::</span><span class='const'><span class='object_link'><a href="TaskTransition.html" title="Tasker::TaskTransition (class)">TaskTransition</a></span></span><span class='comma'>,</span>
2407
+ <span class='label'>association_name:</span> <span class='symbol'>:task_transitions</span>
2408
+ <span class='rparen'>)</span>
2409
+ <span class='kw'>end</span></pre>
2410
+ </td>
2411
+ </tr>
2412
+ </table>
2413
+ </div>
2414
+
2415
+ <div class="method_details ">
2416
+ <h3 class="signature " id="status-instance_method">
2417
+
2418
+ #<strong>status</strong> &#x21d2; <tt>Object</tt>
2419
+
2420
+
2421
+
2422
+
2423
+
2424
+ </h3><div class="docstring">
2425
+ <div class="discussion">
2426
+
2427
+ <p>Status is now entirely managed by the state machine</p>
2428
+
2429
+
2430
+ </div>
2431
+ </div>
2432
+ <div class="tags">
2433
+
2434
+
2435
+ </div><table class="source_code">
2436
+ <tr>
2437
+ <td>
2438
+ <pre class="lines">
2439
+
2440
+
2441
+ 80
2442
+ 81
2443
+ 82
2444
+ 83
2445
+ 84
2446
+ 85
2447
+ 86
2448
+ 87
2449
+ 88</pre>
2450
+ </td>
2451
+ <td>
2452
+ <pre class="code"><span class="info file"># File 'app/models/tasker/task.rb', line 80</span>
2453
+
2454
+ <span class='kw'>def</span> <span class='id identifier rubyid_status'>status</span>
2455
+ <span class='kw'>if</span> <span class='id identifier rubyid_new_record?'>new_record?</span>
2456
+ <span class='comment'># For new records, return the initial state
2457
+ </span> <span class='const'><span class='object_link'><a href="../Tasker.html" title="Tasker (module)">Tasker</a></span></span><span class='op'>::</span><span class='const'><span class='object_link'><a href="Constants.html" title="Tasker::Constants (module)">Constants</a></span></span><span class='op'>::</span><span class='const'><span class='object_link'><a href="Constants/TaskStatuses.html" title="Tasker::Constants::TaskStatuses (module)">TaskStatuses</a></span></span><span class='op'>::</span><span class='const'><span class='object_link'><a href="Constants/TaskStatuses.html#PENDING-constant" title="Tasker::Constants::TaskStatuses::PENDING (constant)">PENDING</a></span></span>
2458
+ <span class='kw'>else</span>
2459
+ <span class='comment'># For persisted records, use state machine
2460
+ </span> <span class='id identifier rubyid_state_machine'>state_machine</span><span class='period'>.</span><span class='id identifier rubyid_current_state'>current_state</span>
2461
+ <span class='kw'>end</span>
2462
+ <span class='kw'>end</span></pre>
2463
+ </td>
2464
+ </tr>
2465
+ </table>
2466
+ </div>
2467
+
2468
+ <div class="method_details ">
2469
+ <h3 class="signature " id="task_execution_context-instance_method">
2470
+
2471
+ #<strong>task_execution_context</strong> &#x21d2; <tt>Object</tt>
2472
+
2473
+
2474
+
2475
+
2476
+
2477
+ </h3><table class="source_code">
2478
+ <tr>
2479
+ <td>
2480
+ <pre class="lines">
2481
+
2482
+
2483
+ 326
2484
+ 327
2485
+ 328</pre>
2486
+ </td>
2487
+ <td>
2488
+ <pre class="code"><span class="info file"># File 'app/models/tasker/task.rb', line 326</span>
2489
+
2490
+ <span class='kw'>def</span> <span class='id identifier rubyid_task_execution_context'>task_execution_context</span>
2491
+ <span class='ivar'>@task_execution_context</span> <span class='op'>||=</span> <span class='const'><span class='object_link'><a href="../Tasker.html" title="Tasker (module)">Tasker</a></span></span><span class='op'>::</span><span class='const'><span class='object_link'><a href="TaskExecutionContext.html" title="Tasker::TaskExecutionContext (class)">TaskExecutionContext</a></span></span><span class='period'>.</span><span class='id identifier rubyid_new'><span class='object_link'><a href="TaskExecutionContext.html#initialize-instance_method" title="Tasker::TaskExecutionContext#initialize (method)">new</a></span></span><span class='lparen'>(</span><span class='id identifier rubyid_task_id'>task_id</span><span class='rparen'>)</span>
2492
+ <span class='kw'>end</span></pre>
2493
+ </td>
2494
+ </tr>
2495
+ </table>
2496
+ </div>
2497
+
2498
+ <div class="method_details ">
2499
+ <h3 class="signature " id="with_all_associated-instance_method">
2500
+
2501
+ #<strong>with_all_associated</strong> &#x21d2; <tt>ActiveRecord::Relation</tt>
2502
+
2503
+
2504
+
2505
+
2506
+
2507
+ </h3><div class="docstring">
2508
+ <div class="discussion">
2509
+
2510
+ <p>Includes all associated models for efficient querying</p>
2511
+
2512
+
2513
+ </div>
2514
+ </div>
2515
+ <div class="tags">
2516
+
2517
+ <p class="tag_title">Returns:</p>
2518
+ <ul class="return">
2519
+
2520
+ <li>
2521
+
2522
+
2523
+ <span class='type'>(<tt>ActiveRecord::Relation</tt>)</span>
2524
+
2525
+
2526
+
2527
+ &mdash;
2528
+ <div class='inline'>
2529
+ <p>Tasks with all associated records preloaded</p>
2530
+ </div>
2531
+
2532
+ </li>
2533
+
2534
+ </ul>
2535
+
2536
+ </div><table class="source_code">
2537
+ <tr>
2538
+ <td>
2539
+ <pre class="lines">
2540
+
2541
+
2542
+ 130
2543
+ 131
2544
+ 132
2545
+ 133
2546
+ 134
2547
+ 135</pre>
2548
+ </td>
2549
+ <td>
2550
+ <pre class="code"><span class="info file"># File 'app/models/tasker/task.rb', line 130</span>
2551
+
2552
+ <span class='id identifier rubyid_scope'>scope</span> <span class='symbol'>:with_all_associated</span><span class='comma'>,</span> <span class='id identifier rubyid_lambda'>lambda</span> <span class='lbrace'>{</span>
2553
+ <span class='id identifier rubyid_includes'>includes</span><span class='lparen'>(</span><span class='label'>named_task:</span> <span class='lbracket'>[</span><span class='symbol'>:task_namespace</span><span class='rbracket'>]</span><span class='rparen'>)</span>
2554
+ <span class='period'>.</span><span class='id identifier rubyid_includes'>includes</span><span class='lparen'>(</span><span class='label'>workflow_steps:</span> <span class='qsymbols_beg'>%i[</span><span class='tstring_content'>named_step</span><span class='words_sep'> </span><span class='tstring_content'>parents</span><span class='words_sep'> </span><span class='tstring_content'>children</span><span class='tstring_end'>]</span></span><span class='rparen'>)</span>
2555
+ <span class='period'>.</span><span class='id identifier rubyid_includes'>includes</span><span class='lparen'>(</span><span class='label'>task_annotations:</span> <span class='qsymbols_beg'>%i[</span><span class='tstring_content'>annotation_type</span><span class='tstring_end'>]</span></span><span class='rparen'>)</span>
2556
+ <span class='period'>.</span><span class='id identifier rubyid_includes'>includes</span><span class='lparen'>(</span><span class='symbol'>:task_transitions</span><span class='rparen'>)</span>
2557
+ <span class='rbrace'>}</span></pre>
2558
+ </td>
2559
+ </tr>
2560
+ </table>
2561
+ </div>
2562
+
2563
+ </div>
2564
+
2565
+ </div>
2566
+
2567
+ <div id="footer">
2568
+ Generated on Tue Jul 1 16:47:35 2025 by
2569
+ <a href="https://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
2570
+ 0.9.37 (ruby-3.2.4).
2571
+ </div>
2572
+
2573
+ </div>
2574
+ </body>
2575
+ </html>