tasker-engine 0.1.0 → 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.

Potentially problematic release.


This version of tasker-engine might be problematic. Click here for more details.

Files changed (390) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +12 -9
  3. data/app/controllers/tasker/analytics_controller.rb +2 -2
  4. data/app/controllers/tasker/graphql_controller.rb +3 -3
  5. data/app/controllers/tasker/health_controller.rb +1 -1
  6. data/app/controllers/tasker/metrics_controller.rb +3 -3
  7. data/app/controllers/tasker/task_diagrams_controller.rb +30 -0
  8. data/app/jobs/tasker/metrics_export_job.rb +1 -1
  9. data/app/models/tasker/application_record.rb +5 -5
  10. data/app/models/tasker/diagram/edge.rb +106 -0
  11. data/app/models/tasker/diagram/flowchart.rb +137 -0
  12. data/app/models/tasker/diagram/node.rb +99 -0
  13. data/app/models/tasker/task.rb +11 -1
  14. data/app/models/tasker/task_diagram.rb +332 -0
  15. data/app/models/tasker/workflow_step_edge.rb +4 -5
  16. data/app/views/tasker/task/_diagram.html.erb +32 -0
  17. data/config/routes.rb +3 -3
  18. data/db/init/schema.sql +23 -0
  19. data/docs/APPLICATION_GENERATOR.md +1 -1
  20. data/docs/AUTH.md +51 -12
  21. data/docs/DEVELOPER_GUIDE.md +9 -8
  22. data/docs/EXECUTION_CONFIGURATION.md +1 -1
  23. data/docs/HEALTH.md +3 -3
  24. data/docs/METRICS.md +4 -4
  25. data/docs/OPTIMIZATION_PLAN.md +3 -3
  26. data/docs/OVERVIEW.md +4 -0
  27. data/docs/QUICK_START.md +1 -1
  28. data/docs/REST_API.md +1 -1
  29. data/docs/TASK_DIAGRAM.md +252 -0
  30. data/docs/TELEMETRY.md +5 -5
  31. data/docs/TROUBLESHOOTING.md +3 -3
  32. data/docs/TaskHandlerGenerator.html +55 -55
  33. data/docs/Tasker/Analysis/RuntimeGraphAnalyzer.html +1 -1
  34. data/docs/Tasker/Analysis/TemplateGraphAnalyzer.html +1 -1
  35. data/docs/Tasker/Analysis.html +1 -1
  36. data/docs/Tasker/AnalyticsController.html +1 -1
  37. data/docs/Tasker/AnalyticsService/BottleneckAnalytics.html +1 -1
  38. data/docs/Tasker/AnalyticsService/PerformanceAnalytics.html +1 -1
  39. data/docs/Tasker/AnalyticsService.html +1 -1
  40. data/docs/Tasker/AnnotationType.html +1 -1
  41. data/docs/Tasker/AnnotationTypeSerializer.html +1 -1
  42. data/docs/Tasker/ApplicationController.html +2 -2
  43. data/docs/Tasker/ApplicationJob.html +1 -1
  44. data/docs/Tasker/ApplicationRecord.html +6 -6
  45. data/docs/Tasker/Authentication/AuthenticationError.html +1 -1
  46. data/docs/Tasker/Authentication/ConfigurationError.html +1 -1
  47. data/docs/Tasker/Authentication/Coordinator.html +1 -1
  48. data/docs/Tasker/Authentication/Interface.html +1 -1
  49. data/docs/Tasker/Authentication/InterfaceError.html +1 -1
  50. data/docs/Tasker/Authentication/NoneAuthenticator.html +1 -1
  51. data/docs/Tasker/Authentication.html +1 -1
  52. data/docs/Tasker/Authorization/AuthorizationError.html +1 -1
  53. data/docs/Tasker/Authorization/BaseCoordinator.html +2 -2
  54. data/docs/Tasker/Authorization/ConfigurationError.html +1 -1
  55. data/docs/Tasker/Authorization/ResourceConstants/ACTIONS.html +10 -10
  56. data/docs/Tasker/Authorization/ResourceConstants/RESOURCES.html +13 -8
  57. data/docs/Tasker/Authorization/ResourceConstants.html +1 -1
  58. data/docs/Tasker/Authorization/ResourceRegistry.html +40 -33
  59. data/docs/Tasker/Authorization/UnauthorizedError.html +1 -1
  60. data/docs/Tasker/Authorization.html +2 -2
  61. data/docs/Tasker/CacheCapabilities.html +1 -1
  62. data/docs/Tasker/CacheStrategy.html +1 -1
  63. data/docs/Tasker/Concerns/Authenticatable.html +1 -1
  64. data/docs/Tasker/Concerns/Authorizable/AdminStatusChecker.html +1 -1
  65. data/docs/Tasker/Concerns/Authorizable.html +1 -1
  66. data/docs/Tasker/Concerns/ControllerAuthorizable.html +1 -1
  67. data/docs/Tasker/Concerns/EventPublisher.html +1 -1
  68. data/docs/Tasker/Concerns/IdempotentStateTransitions.html +1 -1
  69. data/docs/Tasker/Concerns/StateMachineBase/ClassMethods.html +1 -1
  70. data/docs/Tasker/Concerns/StateMachineBase/StateMachineBase/ClassMethods.html +1 -1
  71. data/docs/Tasker/Concerns/StateMachineBase/StateMachineBase.html +1 -1
  72. data/docs/Tasker/Concerns/StateMachineBase.html +1 -1
  73. data/docs/Tasker/Concerns/StructuredLogging.html +1 -1
  74. data/docs/Tasker/Concerns.html +1 -1
  75. data/docs/Tasker/Configuration/ConfigurationProxy.html +1 -1
  76. data/docs/Tasker/Configuration/TelemetryConfigurationProxy.html +1 -1
  77. data/docs/Tasker/Configuration.html +1 -1
  78. data/docs/Tasker/ConfigurationError.html +1 -1
  79. data/docs/Tasker/ConfiguredTask.html +2 -2
  80. data/docs/Tasker/Constants/EventDefinitions.html +1 -1
  81. data/docs/Tasker/Constants/ObservabilityEvents/Step.html +1 -1
  82. data/docs/Tasker/Constants/ObservabilityEvents/Task.html +1 -1
  83. data/docs/Tasker/Constants/ObservabilityEvents.html +1 -1
  84. data/docs/Tasker/Constants/RegistryEvents.html +1 -1
  85. data/docs/Tasker/Constants/StepEvents.html +1 -1
  86. data/docs/Tasker/Constants/TaskEvents.html +1 -1
  87. data/docs/Tasker/Constants/TaskExecution/ExecutionStatus.html +1 -1
  88. data/docs/Tasker/Constants/TaskExecution/HealthStatus.html +1 -1
  89. data/docs/Tasker/Constants/TaskExecution/RecommendedAction.html +1 -1
  90. data/docs/Tasker/Constants/TaskExecution.html +1 -1
  91. data/docs/Tasker/Constants/TaskFinalization/ErrorMessages.html +1 -1
  92. data/docs/Tasker/Constants/TaskFinalization/PendingReasons.html +1 -1
  93. data/docs/Tasker/Constants/TaskFinalization/ReenqueueReasons.html +1 -1
  94. data/docs/Tasker/Constants/TaskFinalization.html +1 -1
  95. data/docs/Tasker/Constants/TaskStatuses.html +1 -1
  96. data/docs/Tasker/Constants/TestEvents.html +1 -1
  97. data/docs/Tasker/Constants/WorkflowEvents.html +1 -1
  98. data/docs/Tasker/Constants/WorkflowStepStatuses.html +1 -1
  99. data/docs/Tasker/Constants.html +1 -1
  100. data/docs/Tasker/DependentSystem.html +1 -1
  101. data/docs/Tasker/DependentSystemObjectMap.html +1 -1
  102. data/docs/Tasker/DetectorRegistry.html +1 -1
  103. data/docs/Tasker/Diagram/Edge.html +1 -1
  104. data/docs/Tasker/Diagram/Flowchart.html +1 -1
  105. data/docs/Tasker/Diagram/Node.html +1 -1
  106. data/docs/Tasker/Diagram.html +1 -1
  107. data/docs/Tasker/Engine.html +1 -1
  108. data/docs/Tasker/Error.html +1 -1
  109. data/docs/Tasker/Events/Catalog/CatalogPrinter.html +1 -1
  110. data/docs/Tasker/Events/Catalog/CustomEventRegistrar.html +1 -1
  111. data/docs/Tasker/Events/Catalog/ExamplePayloadGenerator.html +1 -1
  112. data/docs/Tasker/Events/Catalog.html +1 -1
  113. data/docs/Tasker/Events/CustomRegistry.html +1 -1
  114. data/docs/Tasker/Events/DefinitionLoader.html +1 -1
  115. data/docs/Tasker/Events/EventPayloadBuilder/ErrorInfoExtractor.html +1 -1
  116. data/docs/Tasker/Events/EventPayloadBuilder/StepPayloadBuilder.html +1 -1
  117. data/docs/Tasker/Events/EventPayloadBuilder.html +1 -1
  118. data/docs/Tasker/Events/Publisher.html +1 -1
  119. data/docs/Tasker/Events/Subscribers/BaseSubscriber/ErrorCategorizer/ErrorTypeClassifier.html +1 -1
  120. data/docs/Tasker/Events/Subscribers/BaseSubscriber/ErrorCategorizer.html +1 -1
  121. data/docs/Tasker/Events/Subscribers/BaseSubscriber/MetricTagsExtractor.html +1 -1
  122. data/docs/Tasker/Events/Subscribers/BaseSubscriber.html +1 -1
  123. data/docs/Tasker/Events/Subscribers/MetricsSubscriber.html +2 -2
  124. data/docs/Tasker/Events/Subscribers/TelemetrySubscriber.html +5 -5
  125. data/docs/Tasker/Events/Subscribers.html +1 -1
  126. data/docs/Tasker/Events/SubscriptionLoader.html +1 -1
  127. data/docs/Tasker/Events.html +1 -1
  128. data/docs/Tasker/EventsGenerator.html +2 -2
  129. data/docs/Tasker/Functions/FunctionBasedAnalyticsMetrics/AnalyticsMetrics.html +1 -1
  130. data/docs/Tasker/Functions/FunctionBasedAnalyticsMetrics.html +1 -1
  131. data/docs/Tasker/Functions/FunctionBasedDependencyLevels.html +1 -1
  132. data/docs/Tasker/Functions/FunctionBasedSlowestSteps/SlowestStep.html +1 -1
  133. data/docs/Tasker/Functions/FunctionBasedSlowestSteps.html +1 -1
  134. data/docs/Tasker/Functions/FunctionBasedSlowestTasks/SlowestTask.html +1 -1
  135. data/docs/Tasker/Functions/FunctionBasedSlowestTasks.html +1 -1
  136. data/docs/Tasker/Functions/FunctionBasedStepReadinessStatus.html +1 -1
  137. data/docs/Tasker/Functions/FunctionBasedSystemHealthCounts/HealthMetrics.html +1 -1
  138. data/docs/Tasker/Functions/FunctionBasedSystemHealthCounts.html +1 -1
  139. data/docs/Tasker/Functions/FunctionBasedTaskExecutionContext.html +1 -1
  140. data/docs/Tasker/Functions/FunctionWrapper.html +1 -1
  141. data/docs/Tasker/Functions.html +1 -1
  142. data/docs/Tasker/Generators/AuthenticatorGenerator/UsageInstructionsFormatter.html +1 -1
  143. data/docs/Tasker/Generators/AuthenticatorGenerator.html +1 -1
  144. data/docs/Tasker/Generators/AuthorizationCoordinatorGenerator.html +1 -1
  145. data/docs/Tasker/Generators/SubscriberGenerator.html +1 -1
  146. data/docs/Tasker/Generators/TaskHandlerGenerator.html +4 -4
  147. data/docs/Tasker/Generators.html +1 -1
  148. data/docs/Tasker/GraphQLTypes/AnnotationType.html +1 -1
  149. data/docs/Tasker/GraphQLTypes/BaseArgument.html +1 -1
  150. data/docs/Tasker/GraphQLTypes/BaseConnection.html +1 -1
  151. data/docs/Tasker/GraphQLTypes/BaseEdge.html +1 -1
  152. data/docs/Tasker/GraphQLTypes/BaseEnum.html +1 -1
  153. data/docs/Tasker/GraphQLTypes/BaseField.html +1 -1
  154. data/docs/Tasker/GraphQLTypes/BaseInputObject.html +1 -1
  155. data/docs/Tasker/GraphQLTypes/BaseInterface.html +1 -1
  156. data/docs/Tasker/GraphQLTypes/BaseObject.html +1 -1
  157. data/docs/Tasker/GraphQLTypes/BaseScalar.html +1 -1
  158. data/docs/Tasker/GraphQLTypes/BaseUnion.html +1 -1
  159. data/docs/Tasker/GraphQLTypes/DependentSystemObjectMapType.html +1 -1
  160. data/docs/Tasker/GraphQLTypes/DependentSystemType.html +1 -1
  161. data/docs/Tasker/GraphQLTypes/MutationType.html +1 -1
  162. data/docs/Tasker/GraphQLTypes/NamedStepType.html +1 -1
  163. data/docs/Tasker/GraphQLTypes/NamedTaskType.html +1 -1
  164. data/docs/Tasker/GraphQLTypes/NamedTasksNamedStepType.html +1 -1
  165. data/docs/Tasker/GraphQLTypes/NodeType.html +1 -1
  166. data/docs/Tasker/GraphQLTypes/QueryType.html +1 -1
  167. data/docs/Tasker/GraphQLTypes/TaskAnnotationType.html +1 -1
  168. data/docs/Tasker/GraphQLTypes/TaskInterface.html +1 -1
  169. data/docs/Tasker/GraphQLTypes/TaskType.html +1 -1
  170. data/docs/Tasker/GraphQLTypes/WorkflowStepType.html +1 -1
  171. data/docs/Tasker/GraphQLTypes.html +1 -1
  172. data/docs/Tasker/GraphqlController.html +1 -1
  173. data/docs/Tasker/HandlerFactory.html +44 -54
  174. data/docs/Tasker/HandlerSerializer.html +1 -1
  175. data/docs/Tasker/HandlersController.html +1 -1
  176. data/docs/Tasker/HashIdentityStrategy.html +1 -1
  177. data/docs/Tasker/Health/ReadinessChecker.html +2 -2
  178. data/docs/Tasker/Health/StatusChecker.html +2 -2
  179. data/docs/Tasker/Health.html +1 -1
  180. data/docs/Tasker/HealthController.html +1 -1
  181. data/docs/Tasker/IdentityStrategy.html +1 -1
  182. data/docs/Tasker/InvalidTaskHandlerConfig.html +1 -1
  183. data/docs/Tasker/Logging/CorrelationIdGenerator.html +2 -2
  184. data/docs/Tasker/Logging.html +1 -1
  185. data/docs/Tasker/MetricsController.html +1 -1
  186. data/docs/Tasker/MetricsExportJob.html +1 -1
  187. data/docs/Tasker/Mutations/BaseMutation.html +1 -1
  188. data/docs/Tasker/Mutations/CancelStep.html +1 -1
  189. data/docs/Tasker/Mutations/CancelTask.html +1 -1
  190. data/docs/Tasker/Mutations/CreateTask.html +1 -1
  191. data/docs/Tasker/Mutations/UpdateStep.html +1 -1
  192. data/docs/Tasker/Mutations/UpdateTask.html +1 -1
  193. data/docs/Tasker/Mutations.html +1 -1
  194. data/docs/Tasker/NamedStep.html +1 -1
  195. data/docs/Tasker/NamedTask.html +1 -1
  196. data/docs/Tasker/NamedTasksNamedStep.html +1 -1
  197. data/docs/Tasker/Orchestration/BackoffCalculator.html +1 -1
  198. data/docs/Tasker/Orchestration/ConnectionBuilder/ConfigValidator.html +1 -1
  199. data/docs/Tasker/Orchestration/ConnectionBuilder.html +2 -2
  200. data/docs/Tasker/Orchestration/ConnectionPoolIntelligence.html +3 -3
  201. data/docs/Tasker/Orchestration/Coordinator.html +1 -1
  202. data/docs/Tasker/Orchestration/FutureStateAnalyzer.html +1 -1
  203. data/docs/Tasker/Orchestration/PluginIntegration.html +1 -1
  204. data/docs/Tasker/Orchestration/ResponseProcessor.html +1 -1
  205. data/docs/Tasker/Orchestration/RetryHeaderParser.html +1 -1
  206. data/docs/Tasker/Orchestration/StepExecutor.html +4 -4
  207. data/docs/Tasker/Orchestration/StepSequenceFactory.html +1 -1
  208. data/docs/Tasker/Orchestration/TaskFinalizer/BlockageChecker.html +1 -1
  209. data/docs/Tasker/Orchestration/TaskFinalizer/ContextManager.html +1 -1
  210. data/docs/Tasker/Orchestration/TaskFinalizer/DelayCalculator.html +2 -2
  211. data/docs/Tasker/Orchestration/TaskFinalizer/FinalizationDecisionMaker.html +1 -1
  212. data/docs/Tasker/Orchestration/TaskFinalizer/FinalizationProcessor.html +1 -1
  213. data/docs/Tasker/Orchestration/TaskFinalizer/ReasonDeterminer.html +1 -1
  214. data/docs/Tasker/Orchestration/TaskFinalizer/ReenqueueManager.html +1 -1
  215. data/docs/Tasker/Orchestration/TaskFinalizer/UnclearStateHandler.html +1 -1
  216. data/docs/Tasker/Orchestration/TaskFinalizer.html +1 -1
  217. data/docs/Tasker/Orchestration/TaskInitializer.html +1 -1
  218. data/docs/Tasker/Orchestration/TaskReenqueuer.html +1 -1
  219. data/docs/Tasker/Orchestration/ViableStepDiscovery.html +1 -1
  220. data/docs/Tasker/Orchestration/WorkflowCoordinator.html +1 -1
  221. data/docs/Tasker/Orchestration.html +1 -1
  222. data/docs/Tasker/PageSort/PageSortParamsBuilder.html +1 -1
  223. data/docs/Tasker/PageSort.html +1 -1
  224. data/docs/Tasker/PermanentError.html +1 -1
  225. data/docs/Tasker/ProceduralError.html +1 -1
  226. data/docs/Tasker/Queries/AllAnnotationTypes.html +1 -1
  227. data/docs/Tasker/Queries/AllTasks.html +1 -1
  228. data/docs/Tasker/Queries/BaseQuery.html +1 -1
  229. data/docs/Tasker/Queries/Helpers.html +1 -1
  230. data/docs/Tasker/Queries/OneStep.html +1 -1
  231. data/docs/Tasker/Queries/OneTask.html +1 -1
  232. data/docs/Tasker/Queries/TasksByAnnotation.html +1 -1
  233. data/docs/Tasker/Queries/TasksByStatus.html +1 -1
  234. data/docs/Tasker/Queries.html +1 -1
  235. data/docs/Tasker/Railtie.html +1 -1
  236. data/docs/Tasker/Registry/BaseRegistry.html +2 -2
  237. data/docs/Tasker/Registry/EventPublisher.html +1 -1
  238. data/docs/Tasker/Registry/InterfaceValidator.html +1 -1
  239. data/docs/Tasker/Registry/RegistrationError.html +1 -1
  240. data/docs/Tasker/Registry/RegistryError.html +1 -1
  241. data/docs/Tasker/Registry/StatisticsCollector.html +1 -1
  242. data/docs/Tasker/Registry/SubscriberRegistry.html +1 -1
  243. data/docs/Tasker/Registry/ValidationError.html +1 -1
  244. data/docs/Tasker/Registry.html +1 -1
  245. data/docs/Tasker/RetryableError.html +1 -1
  246. data/docs/Tasker/StateMachine/Compatibility.html +1 -1
  247. data/docs/Tasker/StateMachine/InvalidStateTransition.html +1 -1
  248. data/docs/Tasker/StateMachine/StepStateMachine.html +1 -1
  249. data/docs/Tasker/StateMachine/TaskStateMachine.html +1 -1
  250. data/docs/Tasker/StateMachine.html +1 -1
  251. data/docs/Tasker/StepDagRelationship.html +1 -1
  252. data/docs/Tasker/StepHandler/Api/Config.html +1 -1
  253. data/docs/Tasker/StepHandler/Api.html +1 -1
  254. data/docs/Tasker/StepHandler/AutomaticEventPublishing.html +1 -1
  255. data/docs/Tasker/StepHandler/Base.html +1 -1
  256. data/docs/Tasker/StepHandler.html +1 -1
  257. data/docs/Tasker/StepReadinessStatus.html +1 -1
  258. data/docs/Tasker/Task.html +210 -113
  259. data/docs/Tasker/TaskAnnotation.html +1 -1
  260. data/docs/Tasker/TaskAnnotationSerializer.html +1 -1
  261. data/docs/Tasker/TaskBuilder/StepNameValidator.html +1 -1
  262. data/docs/Tasker/TaskBuilder/StepTemplateDefiner.html +1 -1
  263. data/docs/Tasker/TaskBuilder.html +1 -1
  264. data/docs/Tasker/TaskDiagram/StepToStepEdgeBuilder.html +1 -1
  265. data/docs/Tasker/TaskDiagram/TaskToRootStepEdgeBuilder.html +1 -1
  266. data/docs/Tasker/TaskDiagram.html +1 -1
  267. data/docs/Tasker/TaskDiagramsController.html +1 -1
  268. data/docs/Tasker/TaskExecutionContext.html +1 -1
  269. data/docs/Tasker/TaskHandler/ClassMethods/StepTemplateDefiner/ClassBasedEventRegistrar.html +1 -1
  270. data/docs/Tasker/TaskHandler/ClassMethods/StepTemplateDefiner/YamlEventRegistrar.html +1 -1
  271. data/docs/Tasker/TaskHandler/ClassMethods/StepTemplateDefiner.html +1 -1
  272. data/docs/Tasker/TaskHandler/ClassMethods.html +6 -44
  273. data/docs/Tasker/TaskHandler/InstanceMethods.html +1 -1
  274. data/docs/Tasker/TaskHandler/StepGroup.html +1 -1
  275. data/docs/Tasker/TaskHandler.html +1 -1
  276. data/docs/Tasker/TaskNamespace.html +1 -1
  277. data/docs/Tasker/TaskRunnerJob.html +1 -1
  278. data/docs/Tasker/TaskSerializer.html +1 -1
  279. data/docs/Tasker/TaskTransition.html +1 -1
  280. data/docs/Tasker/TaskerRailsSchema/InvalidObjectTypeError.html +1 -1
  281. data/docs/Tasker/TaskerRailsSchema/TypeResolutionError.html +1 -1
  282. data/docs/Tasker/TaskerRailsSchema/UnknownInterfaceError.html +1 -1
  283. data/docs/Tasker/TaskerRailsSchema.html +1 -1
  284. data/docs/Tasker/TasksController.html +1 -1
  285. data/docs/Tasker/Telemetry/EventMapping.html +1 -1
  286. data/docs/Tasker/Telemetry/EventRouter.html +1 -1
  287. data/docs/Tasker/Telemetry/Events/ExportEvents.html +1 -1
  288. data/docs/Tasker/Telemetry/Events.html +1 -1
  289. data/docs/Tasker/Telemetry/ExportCoordinator.html +1 -1
  290. data/docs/Tasker/Telemetry/IntelligentCacheManager.html +2 -2
  291. data/docs/Tasker/Telemetry/LogBackend.html +1 -1
  292. data/docs/Tasker/Telemetry/MetricTypes/Counter.html +2 -2
  293. data/docs/Tasker/Telemetry/MetricTypes/Gauge.html +73 -73
  294. data/docs/Tasker/Telemetry/MetricTypes/Histogram.html +103 -103
  295. data/docs/Tasker/Telemetry/MetricTypes.html +1 -1
  296. data/docs/Tasker/Telemetry/MetricsBackend.html +1 -1
  297. data/docs/Tasker/Telemetry/MetricsExportService.html +1 -1
  298. data/docs/Tasker/Telemetry/PluginRegistry.html +1 -1
  299. data/docs/Tasker/Telemetry/Plugins/BaseExporter.html +1 -1
  300. data/docs/Tasker/Telemetry/Plugins/CsvExporter.html +1 -1
  301. data/docs/Tasker/Telemetry/Plugins/JsonExporter.html +1 -1
  302. data/docs/Tasker/Telemetry/Plugins.html +1 -1
  303. data/docs/Tasker/Telemetry/PrometheusExporter.html +1 -1
  304. data/docs/Tasker/Telemetry/TraceBackend.html +1 -1
  305. data/docs/Tasker/Telemetry.html +1 -1
  306. data/docs/Tasker/Types/AuthConfig.html +1 -1
  307. data/docs/Tasker/Types/BackoffConfig.html +1 -1
  308. data/docs/Tasker/Types/BaseConfig.html +1 -1
  309. data/docs/Tasker/Types/CacheConfig.html +1 -1
  310. data/docs/Tasker/Types/DatabaseConfig.html +1 -1
  311. data/docs/Tasker/Types/DependencyGraph.html +1 -1
  312. data/docs/Tasker/Types/DependencyGraphConfig.html +1 -1
  313. data/docs/Tasker/Types/EngineConfig.html +1 -1
  314. data/docs/Tasker/Types/ExecutionConfig.html +1 -1
  315. data/docs/Tasker/Types/GraphEdge.html +1 -1
  316. data/docs/Tasker/Types/GraphMetadata.html +1 -1
  317. data/docs/Tasker/Types/GraphNode.html +1 -1
  318. data/docs/Tasker/Types/HealthConfig.html +1 -1
  319. data/docs/Tasker/Types/StepSequence.html +1 -1
  320. data/docs/Tasker/Types/StepTemplate.html +1 -1
  321. data/docs/Tasker/Types/TaskRequest.html +1 -1
  322. data/docs/Tasker/Types/TelemetryConfig.html +2 -2
  323. data/docs/Tasker/Types.html +1 -1
  324. data/docs/Tasker/WorkflowStep/StepFinder.html +1 -1
  325. data/docs/Tasker/WorkflowStep.html +1 -1
  326. data/docs/Tasker/WorkflowStepEdge.html +4 -6
  327. data/docs/Tasker/WorkflowStepSerializer.html +1 -1
  328. data/docs/Tasker/WorkflowStepTransition/TransitionDescriptionFormatter.html +1 -1
  329. data/docs/Tasker/WorkflowStepTransition.html +1 -1
  330. data/docs/Tasker/WorkflowStepsController.html +1 -1
  331. data/docs/Tasker.html +5 -21
  332. data/docs/VISION.md +1 -1
  333. data/docs/_index.html +77 -21
  334. data/docs/class_list.html +1 -1
  335. data/docs/file.README.html +14 -10
  336. data/docs/index.html +14 -10
  337. data/docs/method_list.html +1433 -1105
  338. data/docs/top-level-namespace.html +1 -1
  339. data/lib/generators/tasker/authenticator_generator.rb +5 -5
  340. data/lib/generators/tasker/authorization_coordinator_generator.rb +1 -1
  341. data/lib/generators/tasker/events_generator.rb +1 -1
  342. data/lib/generators/tasker/task_handler_generator.rb +4 -4
  343. data/lib/generators/tasker/templates/api_token_authenticator.rb.erb +1 -1
  344. data/lib/generators/tasker/templates/authorization_coordinator.rb.erb +13 -0
  345. data/lib/generators/tasker/templates/authorization_coordinator_spec.rb.erb +7 -1
  346. data/lib/generators/tasker/templates/custom_authenticator.rb.erb +1 -1
  347. data/lib/generators/tasker/templates/devise_authenticator.rb.erb +1 -1
  348. data/lib/generators/tasker/templates/initialize.rb.erb +1 -1
  349. data/lib/generators/tasker/templates/jwt_authenticator.rb.erb +1 -1
  350. data/lib/generators/tasker/templates/omniauth_authenticator.rb.erb +1 -1
  351. data/lib/generators/tasker/templates/opentelemetry_initializer.rb +4 -4
  352. data/lib/generators/tasker/templates/task_config.yaml.erb +25 -25
  353. data/lib/generators/tasker/templates/task_handler.rb.erb +2 -3
  354. data/lib/generators/tasker/templates/task_handler_spec.rb.erb +43 -49
  355. data/lib/tasker/analysis/runtime_graph_analyzer.rb +1 -1
  356. data/lib/tasker/authentication/coordinator.rb +2 -2
  357. data/lib/tasker/authorization/base_coordinator.rb +1 -1
  358. data/lib/tasker/authorization/resource_constants.rb +2 -1
  359. data/lib/tasker/authorization/resource_registry.rb +7 -0
  360. data/lib/tasker/authorization.rb +1 -1
  361. data/lib/tasker/concerns/authenticatable.rb +1 -1
  362. data/lib/tasker/concerns/controller_authorizable.rb +3 -3
  363. data/lib/tasker/concerns/structured_logging.rb +2 -2
  364. data/lib/tasker/events/definition_loader.rb +1 -1
  365. data/lib/tasker/events/subscribers/metrics_subscriber.rb +1 -1
  366. data/lib/tasker/events/subscribers/telemetry_subscriber.rb +5 -5
  367. data/lib/tasker/handler_factory.rb +2 -7
  368. data/lib/tasker/health/readiness_checker.rb +1 -1
  369. data/lib/tasker/health/status_checker.rb +1 -1
  370. data/lib/tasker/logging/correlation_id_generator.rb +1 -1
  371. data/lib/tasker/orchestration/backoff_calculator.rb +1 -1
  372. data/lib/tasker/orchestration/connection_builder.rb +1 -1
  373. data/lib/tasker/orchestration/connection_pool_intelligence.rb +3 -3
  374. data/lib/tasker/orchestration/step_executor.rb +2 -2
  375. data/lib/tasker/orchestration/task_finalizer.rb +1 -1
  376. data/lib/tasker/registry/base_registry.rb +1 -1
  377. data/lib/tasker/task_builder.rb +1 -1
  378. data/lib/tasker/task_handler/class_methods.rb +1 -4
  379. data/lib/tasker/telemetry/intelligent_cache_manager.rb +1 -1
  380. data/lib/tasker/telemetry/metric_types.rb +9 -57
  381. data/lib/tasker/telemetry/metrics_backend.rb +3 -3
  382. data/lib/tasker/telemetry/metrics_export_service.rb +1 -1
  383. data/lib/tasker/telemetry/prometheus_exporter.rb +2 -2
  384. data/lib/tasker/types/telemetry_config.rb +1 -1
  385. data/lib/tasker/version.rb +1 -2
  386. data/lib/tasks/tasker_tasks.rake +4 -85
  387. metadata +11 -7
  388. data/db/functions/get_step_readiness_status_single_and_batch_v02.sql +0 -223
  389. data/db/migrate/20250710110830_step_readiness_sql_functions_v02.rb +0 -39
  390. data/docs/REVERSIONING.md +0 -404
@@ -100,7 +100,7 @@
100
100
  </div>
101
101
 
102
102
  <div id="footer">
103
- Generated on Sun Jul 13 16:58:45 2025 by
103
+ Generated on Tue Jul 1 16:47:34 2025 by
104
104
  <a href="https://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
105
105
  0.9.37 (ruby-3.2.4).
106
106
  </div>
@@ -204,7 +204,7 @@ module Tasker
204
204
  def jwt_config_example
205
205
  <<~CONFIG
206
206
  # config/initializers/tasker.rb
207
- Tasker::Configuration.configuration do |config|
207
+ Tasker.configuration do |config|
208
208
  config.auth do |auth|
209
209
  auth.authentication_enabled = true
210
210
  auth.authenticator_class = '#{class_name}Authenticator'
@@ -217,7 +217,7 @@ module Tasker
217
217
  def devise_config_example
218
218
  <<~CONFIG
219
219
  # config/initializers/tasker.rb
220
- Tasker::Configuration.configuration do |config|
220
+ Tasker.configuration do |config|
221
221
  config.auth do |auth|
222
222
  auth.authentication_enabled = true
223
223
  auth.authenticator_class = '#{class_name}Authenticator'
@@ -230,7 +230,7 @@ module Tasker
230
230
  def api_token_config_example
231
231
  <<~CONFIG
232
232
  # config/initializers/tasker.rb
233
- Tasker::Configuration.configuration do |config|
233
+ Tasker.configuration do |config|
234
234
  config.auth do |auth|
235
235
  auth.authentication_enabled = true
236
236
  auth.authenticator_class = '#{class_name}Authenticator'
@@ -243,7 +243,7 @@ module Tasker
243
243
  def omniauth_config_example
244
244
  <<~CONFIG
245
245
  # config/initializers/tasker.rb
246
- Tasker::Configuration.configuration do |config|
246
+ Tasker.configuration do |config|
247
247
  config.auth do |auth|
248
248
  auth.authentication_enabled = true
249
249
  auth.authenticator_class = '#{class_name}Authenticator'
@@ -256,7 +256,7 @@ module Tasker
256
256
  def custom_config_example
257
257
  <<~CONFIG
258
258
  # config/initializers/tasker.rb
259
- Tasker::Configuration.configuration do |config|
259
+ Tasker.configuration do |config|
260
260
  config.auth do |auth|
261
261
  auth.authentication_enabled = true
262
262
  auth.authenticator_class = '#{class_name}Authenticator'
@@ -101,7 +101,7 @@ module Tasker
101
101
 
102
102
  ```ruby
103
103
  # config/initializers/tasker.rb
104
- Tasker::Configuration.configuration do |config|
104
+ Tasker.configuration do |config|
105
105
  config.auth do |auth|
106
106
  auth.authorization_enabled = true
107
107
  auth.authorization_coordinator_class = '#{coordinator_class_name}'
@@ -57,7 +57,7 @@ module Tasker
57
57
  🔧 Advanced Configuration (if needed):
58
58
  For complex organizational needs, configure additional directories:
59
59
 
60
- Tasker::Configuration.configuration do |config|
60
+ Tasker.configuration do |config|
61
61
  config.add_custom_events_directories(
62
62
  'vendor/gems/my_gem/events',
63
63
  'app/modules/billing/events'
@@ -11,7 +11,7 @@ module Tasker
11
11
 
12
12
  class_option :module_namespace, type: :string, default: nil,
13
13
  desc: 'The module namespace for the task handler ' \
14
- '(defaults to Tasker::Configuration.configuration.engine.default_module_namespace)'
14
+ '(defaults to Tasker.configuration.engine.default_module_namespace)'
15
15
  class_option :namespace_name, type: :string, default: 'default',
16
16
  desc: 'The TaskNamespace for organizing the task (e.g., payments, inventory, notifications)'
17
17
  class_option :version, type: :string, default: '0.1.0',
@@ -23,7 +23,7 @@ module Tasker
23
23
 
24
24
  def create_task_handler_files
25
25
  # Set variables first
26
- @module_namespace = options[:module_namespace] || Tasker::Configuration.configuration.engine.default_module_namespace
26
+ @module_namespace = options[:module_namespace] || Tasker.configuration.engine.default_module_namespace
27
27
  @module_path = @module_namespace&.underscore
28
28
  @task_handler_class = name.camelize
29
29
  @task_name = name.underscore
@@ -36,8 +36,8 @@ module Tasker
36
36
  ensure_configuration_loaded
37
37
 
38
38
  # Get directory paths from configuration
39
- @task_handler_directory = Tasker::Configuration.configuration.engine.task_handler_directory
40
- @task_config_directory = Tasker::Configuration.configuration.engine.task_config_directory
39
+ @task_handler_directory = Tasker.configuration.engine.task_handler_directory
40
+ @task_config_directory = Tasker.configuration.engine.task_config_directory
41
41
 
42
42
  # Ensure directories exist
43
43
  ensure_directories_exist(
@@ -7,7 +7,7 @@
7
7
  # Expects tokens to be passed in request headers and looks up users by token.
8
8
  #
9
9
  # Configuration example:
10
- # Tasker::Configuration.configuration do |config|
10
+ # Tasker.configuration do |config|
11
11
  # config.auth do |auth|
12
12
  # auth.strategy = :custom
13
13
  # auth.options = {
@@ -28,6 +28,8 @@ class <%= @coordinator_class_name %> < Tasker::Authorization::BaseCoordinator
28
28
  authorize_task(action, context)
29
29
  when Tasker::Authorization::ResourceConstants::RESOURCES::WORKFLOW_STEP
30
30
  authorize_workflow_step(action, context)
31
+ when Tasker::Authorization::ResourceConstants::RESOURCES::TASK_DIAGRAM
32
+ authorize_task_diagram(action, context)
31
33
  when Tasker::Authorization::ResourceConstants::RESOURCES::HEALTH_STATUS
32
34
  authorize_system_status(action, context)
33
35
  else
@@ -68,6 +70,17 @@ class <%= @coordinator_class_name %> < Tasker::Authorization::BaseCoordinator
68
70
  end
69
71
  end
70
72
 
73
+ # Authorize task diagram operations
74
+ def authorize_task_diagram(action, context)
75
+ case action
76
+ when :index, :show
77
+ # TODO: Implement your diagram access logic
78
+ user.has_tasker_permission?("tasker.task_diagram:#{action}")
79
+ else
80
+ false
81
+ end
82
+ end
83
+
71
84
  # Authorize system status operations
72
85
  def authorize_system_status(action, context)
73
86
  case action
@@ -20,7 +20,8 @@ RSpec.describe <%= @coordinator_class_name %>, type: :model do
20
20
  permissions: [
21
21
  'tasker.task:index',
22
22
  'tasker.task:show',
23
- 'tasker.workflow_step:index'
23
+ 'tasker.workflow_step:index',
24
+ 'tasker.task_diagram:index'
24
25
  ],
25
26
  roles: ['user'],
26
27
  admin: false
@@ -54,6 +55,7 @@ RSpec.describe <%= @coordinator_class_name %>, type: :model do
54
55
  expect { coordinator.authorize!('tasker.task', :index) }.not_to raise_error
55
56
  expect { coordinator.authorize!('tasker.task', :create) }.not_to raise_error
56
57
  expect { coordinator.authorize!('tasker.workflow_step', :update) }.not_to raise_error
58
+ expect { coordinator.authorize!('tasker.task_diagram', :show) }.not_to raise_error
57
59
  end
58
60
  end
59
61
 
@@ -64,6 +66,7 @@ RSpec.describe <%= @coordinator_class_name %>, type: :model do
64
66
  expect { coordinator.authorize!('tasker.task', :index) }.not_to raise_error
65
67
  expect { coordinator.authorize!('tasker.task', :show) }.not_to raise_error
66
68
  expect { coordinator.authorize!('tasker.workflow_step', :index) }.not_to raise_error
69
+ expect { coordinator.authorize!('tasker.task_diagram', :index) }.not_to raise_error
67
70
  end
68
71
 
69
72
  it 'denies access to forbidden resources' do
@@ -79,6 +82,7 @@ RSpec.describe <%= @coordinator_class_name %>, type: :model do
79
82
  it 'denies all operations' do
80
83
  expect { coordinator.authorize!('tasker.task', :index) }.to raise_error(Tasker::Authorization::UnauthorizedError)
81
84
  expect { coordinator.authorize!('tasker.workflow_step', :show) }.to raise_error(Tasker::Authorization::UnauthorizedError)
85
+ expect { coordinator.authorize!('tasker.task_diagram', :show) }.to raise_error(Tasker::Authorization::UnauthorizedError)
82
86
  end
83
87
  end
84
88
  end
@@ -91,6 +95,7 @@ RSpec.describe <%= @coordinator_class_name %>, type: :model do
91
95
  expect(coordinator.can?('tasker.task', :index)).to be true
92
96
  expect(coordinator.can?('tasker.task', :create)).to be true
93
97
  expect(coordinator.can?('tasker.workflow_step', :update)).to be true
98
+ expect(coordinator.can?('tasker.task_diagram', :show)).to be true
94
99
  end
95
100
  end
96
101
 
@@ -101,6 +106,7 @@ RSpec.describe <%= @coordinator_class_name %>, type: :model do
101
106
  expect(coordinator.can?('tasker.task', :index)).to be true
102
107
  expect(coordinator.can?('tasker.task', :show)).to be true
103
108
  expect(coordinator.can?('tasker.workflow_step', :index)).to be true
109
+ expect(coordinator.can?('tasker.task_diagram', :index)).to be true
104
110
  end
105
111
 
106
112
  it 'returns false for forbidden operations' do
@@ -7,7 +7,7 @@
7
7
  # custom authentication logic in your Tasker application.
8
8
  #
9
9
  # Configuration example:
10
- # Tasker::Configuration.configuration do |config|
10
+ # Tasker.configuration do |config|
11
11
  # config.auth do |auth|
12
12
  # auth.strategy = :custom
13
13
  # auth.options = {
@@ -7,7 +7,7 @@
7
7
  # Uses Devise's built-in authentication methods and scopes.
8
8
  #
9
9
  # Configuration example:
10
- # Tasker::Configuration.configuration do |config|
10
+ # Tasker.configuration do |config|
11
11
  # config.auth do |auth|
12
12
  # auth.strategy = :custom
13
13
  # auth.options = {
@@ -1,7 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  # Configure Tasker
4
- Tasker::Configuration.configuration do |config|
4
+ Tasker.configuration do |config|
5
5
  # Engine configuration
6
6
  # config.engine do |engine|
7
7
  # engine.task_handler_directory = 'custom_tasks'
@@ -7,7 +7,7 @@
7
7
  # Supports both Bearer token and raw token formats in Authorization headers.
8
8
  #
9
9
  # Configuration example:
10
- # Tasker::Configuration.configuration do |config|
10
+ # Tasker.configuration do |config|
11
11
  # config.auth do |auth|
12
12
  # auth.strategy = :custom
13
13
  # auth.options = {
@@ -7,7 +7,7 @@
7
7
  # Supports multiple authentication providers and session-based authentication.
8
8
  #
9
9
  # Configuration example:
10
- # Tasker::Configuration.configuration do |config|
10
+ # Tasker.configuration do |config|
11
11
  # config.auth do |auth|
12
12
  # auth.strategy = :custom
13
13
  # auth.options = {
@@ -9,10 +9,10 @@ require 'opentelemetry/instrumentation/all'
9
9
 
10
10
  # Configure OpenTelemetry
11
11
  OpenTelemetry::SDK.configure do |c|
12
- c.service_name = Tasker::Configuration.configuration.telemetry.service_name
12
+ c.service_name = Tasker.configuration.telemetry.service_name
13
13
 
14
14
  # Service version must be configured for instrumentation to work properly
15
- c.service_version = 'v0.1.0'
15
+ c.service_version = 'v1.0.0'
16
16
 
17
17
  # Configure OTLP exporter to send to local Jaeger
18
18
  otlp_exporter = OpenTelemetry::Exporter::OTLP::Exporter.new(
@@ -27,8 +27,8 @@ OpenTelemetry::SDK.configure do |c|
27
27
  # Resource configuration
28
28
  c.resource = OpenTelemetry::SDK::Resources::Resource.create({
29
29
  # Core service identification
30
- 'service.name' => Tasker::Configuration.configuration.telemetry.service_name,
31
- 'service.version' => Tasker::Configuration.configuration.telemetry.service_version,
30
+ 'service.name' => Tasker.configuration.telemetry.service_name,
31
+ 'service.version' => Tasker.configuration.telemetry.service_version,
32
32
  'service.framework' => 'tasker'
33
33
  })
34
34
 
@@ -8,17 +8,17 @@ module_namespace: <%= @module_namespace %>
8
8
  task_handler_class: <%= @task_handler_class %>
9
9
  description: "<%= @description || "Generated task handler for #{@task_name}" %>"
10
10
 
11
- default_dependent_system: '<%= @dependent_system || 'default_system' %>'
11
+ default_dependent_system: <%= @dependent_system %>
12
12
  named_steps:
13
- <% if @steps && @steps.any? %>
14
- <% @steps.each do |step| %>
13
+ <% if @steps && @steps.any? -%>
14
+ <% @steps.each do |step| -%>
15
15
  - <%= step %>
16
- <% end %>
17
- <% else %>
16
+ <% end -%>
17
+ <% else -%>
18
18
  - fetch_data
19
19
  - process_data
20
20
  - complete_task
21
- <% end %>
21
+ <% end -%>
22
22
 
23
23
  schema:
24
24
  type: object
@@ -29,16 +29,16 @@ schema:
29
29
  type: integer
30
30
 
31
31
  step_templates:
32
- <% if @steps && @steps.any? %>
33
- <% @steps.each_with_index do |step, index| %>
32
+ <% if @steps && @steps.any? -%>
33
+ <% @steps.each_with_index do |step, index| -%>
34
34
  - name: <%= step %>
35
35
  description: <%= step.humanize %> step
36
36
  handler_class: <%= @module_namespace ? "#{@module_namespace}::" : '' %><%= @task_handler_class %>::<%= step.classify %>StepHandler
37
- <% if index > 0 %>
37
+ <% if index > 0 -%>
38
38
  depends_on_step: <%= @steps[index - 1] %>
39
- <% end %>
40
- <% end %>
41
- <% else %>
39
+ <% end -%>
40
+ <% end -%>
41
+ <% else -%>
42
42
  - name: fetch_data
43
43
  description: Fetch required data from dependent system
44
44
  handler_class: <%= @module_namespace ? "#{@module_namespace}::" : '' %><%= @task_handler_class %>::FetchDataStepHandler
@@ -63,55 +63,55 @@ step_templates:
63
63
  description: Complete the task with processed data
64
64
  depends_on_step: process_data
65
65
  handler_class: <%= @module_namespace ? "#{@module_namespace}::" : '' %><%= @task_handler_class %>::CompleteTaskStepHandler
66
- <% end %>
66
+ <% end -%>
67
67
 
68
68
  environments:
69
69
  development:
70
70
  step_templates:
71
- <% if @steps && @steps.any? %>
72
- <% first_step = @steps.first %>
71
+ <% if @steps && @steps.any? -%>
72
+ <% first_step = @steps.first -%>
73
73
  - name: <%= first_step %>
74
74
  handler_config:
75
75
  params:
76
76
  debug: true
77
- <% else %>
77
+ <% else -%>
78
78
  - name: fetch_data
79
79
  handler_config:
80
80
  url: http://localhost:3000/api/data
81
81
  params:
82
82
  id: 1
83
83
  debug: true
84
- <% end %>
84
+ <% end -%>
85
85
 
86
86
  test:
87
87
  step_templates:
88
- <% if @steps && @steps.any? %>
89
- <% first_step = @steps.first %>
88
+ <% if @steps && @steps.any? -%>
89
+ <% first_step = @steps.first -%>
90
90
  - name: <%= first_step %>
91
91
  handler_config:
92
92
  params:
93
93
  test_mode: true
94
- <% else %>
94
+ <% else -%>
95
95
  - name: fetch_data
96
96
  handler_config:
97
97
  url: http://test-api.example.com/data
98
98
  params:
99
99
  id: 1
100
100
  test_mode: true
101
- <% end %>
101
+ <% end -%>
102
102
 
103
103
  production:
104
104
  step_templates:
105
- <% if @steps && @steps.any? %>
106
- <% first_step = @steps.first %>
105
+ <% if @steps && @steps.any? -%>
106
+ <% first_step = @steps.first -%>
107
107
  - name: <%= first_step %>
108
108
  handler_config:
109
109
  params: {}
110
- <% else %>
110
+ <% else -%>
111
111
  - name: fetch_data
112
112
  handler_config:
113
113
  url: https://api.example.com/data
114
114
  params:
115
115
  id: 1
116
116
  api_key: ${API_KEY}
117
- <% end %>
117
+ <% end -%>
@@ -19,10 +19,9 @@ module <%= @module_namespace %>
19
19
  connection.get("/data/#{input_id}")
20
20
  end
21
21
 
22
- def process_results(step, response, initial_results)
22
+ def process_results(_task, _sequence, step)
23
23
  # Extract the response ID from the API response
24
- data = JSON.parse(response.body)
25
- step.results = { response_id: data.deep_symbolize_keys.dig(:data, :id) }
24
+ step.results = { response_id: step.results.deep_symbolize_keys.dig(:data, :id) }
26
25
  end
27
26
  end
28
27
 
@@ -5,17 +5,26 @@ require 'rails_helper'
5
5
  RSpec.describe <%= @module_namespace ? "#{@module_namespace}::" : '' %><%= @task_handler_class %> do
6
6
  let(:stubs) { Faraday::Adapter::Test::Stubs.new }
7
7
  let(:connection) { Faraday.new { |b| b.adapter(:test, stubs) } }
8
- let(:task_handler) { create_api_task_handler_with_connection(described_class, connection) }
8
+ let(:task_handler) do
9
+ handler = described_class.new
10
+ mock_connection = connection # Capture connection in closure
11
+ original_get_step_handler = handler.method(:get_step_handler)
12
+ handler.define_singleton_method(:get_step_handler) do |step|
13
+ step_handler = original_get_step_handler.call(step)
14
+ step_handler.instance_variable_set(:@connection, mock_connection)
15
+ step_handler
16
+ end
17
+ handler
18
+ end
9
19
  let(:yaml_path) { described_class.yaml_path }
10
- let(:yaml_config) { described_class.config }
20
+ let(:yaml_config) { YAML.load_file(yaml_path) }
11
21
  let(:handler_class) { described_class }
12
- let(:input_id) { 1 }
13
22
  let(:task_request) do
14
23
  Tasker::Types::TaskRequest.new(
15
24
  name: "<%= @task_name %>",
16
25
  namespace: "<%= @namespace_name || 'default' %>",
17
26
  version: "<%= @version || '0.1.0' %>",
18
- context: { "input_id" => input_id },
27
+ context: { "input_id" => "123" },
19
28
  initiator: "user",
20
29
  reason: "test",
21
30
  source_system: "test_system"
@@ -24,33 +33,6 @@ RSpec.describe <%= @module_namespace ? "#{@module_namespace}::" : '' %><%= @task
24
33
  let(:task) { task_handler.initialize_task!(task_request) }
25
34
  let(:factory) { Tasker::HandlerFactory.instance }
26
35
 
27
- before do
28
- # Register handler with namespace + version support
29
- factory.register(
30
- "<%= @task_name %>",
31
- described_class,
32
- namespace_name: "<%= @namespace_name || 'default' %>",
33
- version: "<%= @version || '0.1.0' %>",
34
- replace: true
35
- )
36
- # Stub data endpoint
37
- stubs.get("/data/#{input_id}") do |_env|
38
- [
39
- 200,
40
- { 'Content-Type' => 'application/json' },
41
- { data: { id: input_id } }.to_json
42
- ]
43
- end
44
- # Stub data endpoint
45
- stubs.get("/data") do |_env|
46
- [
47
- 200,
48
- { 'Content-Type' => 'application/json' },
49
- { data: [ { id: input_id } ] }.to_json
50
- ]
51
- end
52
- end
53
-
54
36
  describe '#initialize' do
55
37
  it 'loads the task configuration from YAML' do
56
38
  expect(task_handler.config).to be_a(Hash)
@@ -122,6 +104,36 @@ RSpec.describe <%= @module_namespace ? "#{@module_namespace}::" : '' %><%= @task
122
104
  end
123
105
 
124
106
  describe 'complete workflow' do
107
+ before do
108
+ # Register handler with namespace + version support
109
+ factory.register(
110
+ "<%= @task_name %>",
111
+ described_class,
112
+ namespace_name: "<%= @namespace_name || 'default' %>",
113
+ version: "<%= @version || '0.1.0' %>"
114
+ )
115
+ stubs.get("/data") do |env|
116
+ Faraday::Response.new(
117
+ Faraday::Env.from(
118
+ status: 200,
119
+ response_headers: { 'Content-Type' => 'application/json' },
120
+ body: { data: { id: 123 } }.to_json,
121
+ url: env.url
122
+ )
123
+ )
124
+ end
125
+ stubs.get("/data/123") do |env|
126
+ Faraday::Response.new(
127
+ Faraday::Env.from(
128
+ status: 200,
129
+ response_headers: { 'Content-Type' => 'application/json' },
130
+ body: { data: { id: 123 } }.to_json,
131
+ url: env.url
132
+ )
133
+ )
134
+ end
135
+ end
136
+
125
137
  it 'can handle the task' do
126
138
  expect(task).to be_valid
127
139
  expect(task.save).to be_truthy
@@ -145,21 +157,3 @@ RSpec.describe <%= @module_namespace ? "#{@module_namespace}::" : '' %><%= @task
145
157
  end
146
158
  end
147
159
  end
148
-
149
- # Create task handler with connection stubbing (for API integration tests)
150
- def create_api_task_handler_with_connection(handler_class, connection)
151
- handler = handler_class.new
152
-
153
- # Override get_step_handler to inject the mocked connection
154
- original_get_step_handler = handler.method(:get_step_handler)
155
- handler.define_singleton_method(:get_step_handler) do |step|
156
- step_handler = original_get_step_handler.call(step)
157
-
158
- # For API step handlers, override the connection that was built during initialization
159
- step_handler.instance_variable_set(:@connection, connection) if step_handler.is_a?(Tasker::StepHandler::Api)
160
-
161
- step_handler
162
- end
163
-
164
- handler
165
- end
@@ -127,7 +127,7 @@ module Tasker
127
127
  # @return [Tasker::Types::DependencyGraphConfig] Configuration for calculations
128
128
  # @api private
129
129
  def dependency_graph_config
130
- @dependency_graph_config ||= Tasker::Configuration.configuration.dependency_graph
130
+ @dependency_graph_config ||= Tasker.configuration.dependency_graph
131
131
  end
132
132
 
133
133
  # Generate cache version based on task state for intelligent cache invalidation
@@ -24,7 +24,7 @@ module Tasker
24
24
  private
25
25
 
26
26
  def build_authenticator
27
- auth_config = Tasker::Configuration.configuration.auth
27
+ auth_config = Tasker.configuration.auth
28
28
 
29
29
  if auth_config.authentication_enabled
30
30
  build_custom_authenticator(auth_config)
@@ -43,7 +43,7 @@ module Tasker
43
43
 
44
44
  # Instantiate the host app's authenticator
45
45
  klass = authenticator_class.constantize
46
- # Pass empty options hash for now - authenticators can get config from Tasker::Configuration.configuration
46
+ # Pass empty options hash for now - authenticators can get config from Tasker.configuration
47
47
  authenticator = klass.new({})
48
48
 
49
49
  # Validate it implements the interface
@@ -100,7 +100,7 @@ module Tasker
100
100
  #
101
101
  # @return [Boolean] True if authorization is enabled
102
102
  def authorization_enabled?
103
- Tasker::Configuration.configuration.auth.authorization_enabled
103
+ Tasker.configuration.auth.authorization_enabled
104
104
  end
105
105
 
106
106
  # The user object for authorization checks
@@ -16,6 +16,7 @@ module Tasker
16
16
  module RESOURCES
17
17
  TASK = 'tasker.task'
18
18
  WORKFLOW_STEP = 'tasker.workflow_step'
19
+ TASK_DIAGRAM = 'tasker.task_diagram'
19
20
  HEALTH_STATUS = 'tasker.health_status'
20
21
  HANDLER = 'tasker.handler'
21
22
  METRICS = 'tasker.metrics'
@@ -25,7 +26,7 @@ module Tasker
25
26
  #
26
27
  # @return [Array<String>] All defined resource names
27
28
  def self.all
28
- [TASK, WORKFLOW_STEP, HEALTH_STATUS, HANDLER, METRICS, ANALYTICS]
29
+ [TASK, WORKFLOW_STEP, TASK_DIAGRAM, HEALTH_STATUS, HANDLER, METRICS, ANALYTICS]
29
30
  end
30
31
 
31
32
  # Check if a resource constant is defined
@@ -48,6 +48,13 @@ module Tasker
48
48
  ],
49
49
  description: 'Individual workflow steps'
50
50
  },
51
+ ResourceConstants::RESOURCES::TASK_DIAGRAM => {
52
+ actions: [
53
+ ResourceConstants::ACTIONS::INDEX,
54
+ ResourceConstants::ACTIONS::SHOW
55
+ ],
56
+ description: 'Task workflow diagrams'
57
+ },
51
58
  ResourceConstants::RESOURCES::HEALTH_STATUS => {
52
59
  actions: [
53
60
  ResourceConstants::ACTIONS::INDEX
@@ -19,7 +19,7 @@ module Tasker
19
19
  # - User model integration via the Authorizable concern
20
20
  #
21
21
  # @example Basic configuration
22
- # Tasker::Configuration.configuration do |config|
22
+ # Tasker.configuration do |config|
23
23
  # config.auth do |auth|
24
24
  # auth.enabled = true
25
25
  # auth.coordinator_class = 'MyAuthorizationCoordinator'
@@ -34,7 +34,7 @@ module Tasker
34
34
  end
35
35
 
36
36
  def skip_authentication?
37
- !Tasker::Configuration.configuration.auth.authentication_enabled
37
+ !Tasker.configuration.auth.authentication_enabled
38
38
  end
39
39
  end
40
40
  end
@@ -66,10 +66,10 @@ module Tasker
66
66
  #
67
67
  # @return [BaseCoordinator] New coordinator instance
68
68
  def build_authorization_coordinator
69
- coordinator_class = Tasker::Configuration.configuration.auth.authorization_coordinator_class.constantize
69
+ coordinator_class = Tasker.configuration.auth.authorization_coordinator_class.constantize
70
70
  coordinator_class.new(current_tasker_user)
71
71
  rescue NameError => e
72
- coordinator_class_name = Tasker::Configuration.configuration.auth.authorization_coordinator_class
72
+ coordinator_class_name = Tasker.configuration.auth.authorization_coordinator_class
73
73
  raise Tasker::Authorization::ConfigurationError,
74
74
  "Authorization coordinator class '#{coordinator_class_name}' not found: #{e.message}"
75
75
  end
@@ -117,7 +117,7 @@ module Tasker
117
117
  #
118
118
  # @return [Boolean] True if authorization should be skipped
119
119
  def skip_authorization?
120
- !Tasker::Configuration.configuration.auth.authorization_enabled
120
+ !Tasker.configuration.auth.authorization_enabled
121
121
  end
122
122
  end
123
123
  end
@@ -322,7 +322,7 @@ module Tasker
322
322
  def extract_standard_context
323
323
  context = {
324
324
  environment: Rails.env,
325
- tasker_version: Tasker::Version
325
+ tasker_version: Tasker::VERSION
326
326
  }
327
327
 
328
328
  # Add process/thread info if available
@@ -380,7 +380,7 @@ module Tasker
380
380
  #
381
381
  # @return [Tasker::Types::TelemetryConfig] Telemetry configuration
382
382
  def telemetry_config
383
- @telemetry_config ||= Tasker::Configuration.configuration.telemetry
383
+ @telemetry_config ||= Tasker.configuration.telemetry
384
384
  end
385
385
  end
386
386
  end