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,1518 @@
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::HandlerFactory
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::HandlerFactory";
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 (H)</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">HandlerFactory</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::HandlerFactory
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="Registry/BaseRegistry.html" title="Tasker::Registry::BaseRegistry (class)">Registry::BaseRegistry</a></span></span>
73
+
74
+ <ul class="fullTree">
75
+ <li>Object</li>
76
+
77
+ <li class="next"><span class='object_link'><a href="Registry/BaseRegistry.html" title="Tasker::Registry::BaseRegistry (class)">Registry::BaseRegistry</a></span></li>
78
+
79
+ <li class="next">Tasker::HandlerFactory</li>
80
+
81
+ </ul>
82
+ <a href="#" class="inheritanceTree">show all</a>
83
+
84
+ </dd>
85
+ </dl>
86
+
87
+
88
+
89
+
90
+
91
+
92
+ <dl>
93
+ <dt>Includes:</dt>
94
+ <dd>Singleton</dd>
95
+ </dl>
96
+
97
+
98
+
99
+
100
+
101
+
102
+ <dl>
103
+ <dt>Defined in:</dt>
104
+ <dd>lib/tasker/handler_factory.rb</dd>
105
+ </dl>
106
+
107
+ </div>
108
+
109
+ <h2>Overview</h2><div class="docstring">
110
+ <div class="discussion">
111
+
112
+ <p>Factory for creating task handler instances</p>
113
+
114
+ <p>This class maintains a registry of task handlers by name and dependent system, providing namespaced handler organization while maintaining backward compatibility. It follows the Singleton pattern to ensure a single registry and uses thread-safe storage with modern registry patterns.</p>
115
+
116
+
117
+ </div>
118
+ </div>
119
+ <div class="tags">
120
+
121
+
122
+ </div>
123
+
124
+
125
+ <h2>Constant Summary</h2>
126
+
127
+ <h3 class="inherited">Constants included
128
+ from <span class='object_link'><a href="Concerns/StructuredLogging.html" title="Tasker::Concerns::StructuredLogging (module)">Concerns::StructuredLogging</a></span></h3>
129
+ <p class="inherited"><span class='object_link'><a href="Concerns/StructuredLogging.html#CORRELATION_ID_KEY-constant" title="Tasker::Concerns::StructuredLogging::CORRELATION_ID_KEY (constant)">Concerns::StructuredLogging::CORRELATION_ID_KEY</a></span></p>
130
+
131
+
132
+ <h2>Instance Attribute Summary <small><a href="#" class="summary_toggle">collapse</a></small></h2>
133
+ <ul class="summary">
134
+
135
+ <li class="public ">
136
+ <span class="summary_signature">
137
+
138
+ <a href="#handler_classes-instance_method" title="#handler_classes (instance method)">#<strong>handler_classes</strong> &#x21d2; Concurrent::Hash </a>
139
+
140
+
141
+
142
+ </span>
143
+
144
+
145
+
146
+
147
+ <span class="note title readonly">readonly</span>
148
+
149
+
150
+
151
+
152
+
153
+
154
+
155
+
156
+
157
+ <span class="summary_desc"><div class='inline'>
158
+ <p>Thread-safe registered handler classes by dependent system and handler name.</p>
159
+ </div></span>
160
+
161
+ </li>
162
+
163
+
164
+ <li class="public ">
165
+ <span class="summary_signature">
166
+
167
+ <a href="#namespaces-instance_method" title="#namespaces (instance method)">#<strong>namespaces</strong> &#x21d2; Set </a>
168
+
169
+
170
+
171
+ </span>
172
+
173
+
174
+
175
+
176
+ <span class="note title readonly">readonly</span>
177
+
178
+
179
+
180
+
181
+
182
+
183
+
184
+
185
+
186
+ <span class="summary_desc"><div class='inline'>
187
+ <p>Set of registered namespaces for efficient enumeration.</p>
188
+ </div></span>
189
+
190
+ </li>
191
+
192
+
193
+ </ul>
194
+
195
+
196
+
197
+
198
+
199
+ <h2>
200
+ Instance Method Summary
201
+ <small><a href="#" class="summary_toggle">collapse</a></small>
202
+ </h2>
203
+
204
+ <ul class="summary">
205
+
206
+ <li class="public ">
207
+ <span class="summary_signature">
208
+
209
+ <a href="#all_items-instance_method" title="#all_items (instance method)">#<strong>all_items</strong> &#x21d2; Hash </a>
210
+
211
+
212
+
213
+ </span>
214
+
215
+
216
+
217
+
218
+
219
+
220
+
221
+
222
+
223
+ <span class="summary_desc"><div class='inline'>
224
+ <p>Get all registered handlers (required by BaseRegistry).</p>
225
+ </div></span>
226
+
227
+ </li>
228
+
229
+
230
+ <li class="public ">
231
+ <span class="summary_signature">
232
+
233
+ <a href="#clear!-instance_method" title="#clear! (instance method)">#<strong>clear!</strong> &#x21d2; Boolean </a>
234
+
235
+
236
+
237
+ </span>
238
+
239
+
240
+
241
+
242
+
243
+
244
+
245
+
246
+
247
+ <span class="summary_desc"><div class='inline'>
248
+ <p>Clear all registered handlers (required by BaseRegistry).</p>
249
+ </div></span>
250
+
251
+ </li>
252
+
253
+
254
+ <li class="public ">
255
+ <span class="summary_signature">
256
+
257
+ <a href="#clear_all!-instance_method" title="#clear_all! (instance method)">#<strong>clear_all!</strong> &#x21d2; Boolean </a>
258
+
259
+
260
+
261
+ </span>
262
+
263
+
264
+
265
+
266
+
267
+
268
+
269
+
270
+
271
+ <span class="summary_desc"><div class='inline'>
272
+ <p>Clear all registered handlers (for testing).</p>
273
+ </div></span>
274
+
275
+ </li>
276
+
277
+
278
+ <li class="public ">
279
+ <span class="summary_signature">
280
+
281
+ <a href="#get-instance_method" title="#get (instance method)">#<strong>get</strong>(name, namespace_name: :default, version: &#39;0.1.0&#39;) &#x21d2; Object </a>
282
+
283
+
284
+
285
+ </span>
286
+
287
+
288
+
289
+
290
+
291
+
292
+
293
+
294
+
295
+ <span class="summary_desc"><div class='inline'>
296
+ <p>Get a task handler instance by name and optional dependent system.</p>
297
+ </div></span>
298
+
299
+ </li>
300
+
301
+
302
+ <li class="public ">
303
+ <span class="summary_signature">
304
+
305
+ <a href="#initialize-instance_method" title="#initialize (instance method)">#<strong>initialize</strong> &#x21d2; HandlerFactory </a>
306
+
307
+
308
+
309
+ </span>
310
+
311
+
312
+ <span class="note title constructor">constructor</span>
313
+
314
+
315
+
316
+
317
+
318
+
319
+
320
+
321
+ <span class="summary_desc"><div class='inline'>
322
+ <p>Initialize a new handler factory.</p>
323
+ </div></span>
324
+
325
+ </li>
326
+
327
+
328
+ <li class="public ">
329
+ <span class="summary_signature">
330
+
331
+ <a href="#list_handlers-instance_method" title="#list_handlers (instance method)">#<strong>list_handlers</strong>(namespace: nil) &#x21d2; Hash </a>
332
+
333
+
334
+
335
+ </span>
336
+
337
+
338
+
339
+
340
+
341
+
342
+
343
+
344
+
345
+ <span class="summary_desc"><div class='inline'>
346
+ <p>List handlers, optionally filtered by namespace.</p>
347
+ </div></span>
348
+
349
+ </li>
350
+
351
+
352
+ <li class="public ">
353
+ <span class="summary_signature">
354
+
355
+ <a href="#register-instance_method" title="#register (instance method)">#<strong>register</strong>(name, class_or_class_name, namespace_name: :default, version: &#39;0.1.0&#39;, **options) &#x21d2; Boolean </a>
356
+
357
+
358
+
359
+ </span>
360
+
361
+
362
+
363
+
364
+
365
+
366
+
367
+
368
+
369
+ <span class="summary_desc"><div class='inline'>
370
+ <p>Register a task handler class with a name and optional dependent system.</p>
371
+ </div></span>
372
+
373
+ </li>
374
+
375
+
376
+ <li class="public ">
377
+ <span class="summary_signature">
378
+
379
+ <a href="#registered_namespaces-instance_method" title="#registered_namespaces (instance method)">#<strong>registered_namespaces</strong> &#x21d2; Array&lt;Symbol&gt; </a>
380
+
381
+
382
+
383
+ </span>
384
+
385
+
386
+
387
+
388
+
389
+
390
+
391
+
392
+
393
+ <span class="summary_desc"><div class='inline'>
394
+ <p>Get list of all registered namespaces.</p>
395
+ </div></span>
396
+
397
+ </li>
398
+
399
+
400
+ <li class="public ">
401
+ <span class="summary_signature">
402
+
403
+ <a href="#stats-instance_method" title="#stats (instance method)">#<strong>stats</strong> &#x21d2; Hash </a>
404
+
405
+
406
+
407
+ </span>
408
+
409
+
410
+
411
+
412
+
413
+
414
+
415
+
416
+
417
+ <span class="summary_desc"><div class='inline'>
418
+ <p>Get comprehensive registry statistics.</p>
419
+ </div></span>
420
+
421
+ </li>
422
+
423
+
424
+ </ul>
425
+
426
+
427
+
428
+
429
+
430
+
431
+
432
+
433
+
434
+
435
+
436
+
437
+ <h3 class="inherited">Methods inherited from <span class='object_link'><a href="Registry/BaseRegistry.html" title="Tasker::Registry::BaseRegistry (class)">Registry::BaseRegistry</a></span></h3>
438
+ <p class="inherited"><span class='object_link'><a href="Registry/BaseRegistry.html#base_stats-instance_method" title="Tasker::Registry::BaseRegistry#base_stats (method)">#base_stats</a></span>, <span class='object_link'><a href="Registry/BaseRegistry.html#health_check-instance_method" title="Tasker::Registry::BaseRegistry#health_check (method)">#health_check</a></span>, <span class='object_link'><a href="Registry/BaseRegistry.html#healthy%3F-instance_method" title="Tasker::Registry::BaseRegistry#healthy? (method)">#healthy?</a></span>, <span class='object_link'><a href="Registry/BaseRegistry.html#log_registration-instance_method" title="Tasker::Registry::BaseRegistry#log_registration (method)">#log_registration</a></span>, <span class='object_link'><a href="Registry/BaseRegistry.html#log_registry_error-instance_method" title="Tasker::Registry::BaseRegistry#log_registry_error (method)">#log_registry_error</a></span>, <span class='object_link'><a href="Registry/BaseRegistry.html#log_registry_operation-instance_method" title="Tasker::Registry::BaseRegistry#log_registry_operation (method)">#log_registry_operation</a></span>, <span class='object_link'><a href="Registry/BaseRegistry.html#log_unregistration-instance_method" title="Tasker::Registry::BaseRegistry#log_unregistration (method)">#log_unregistration</a></span>, <span class='object_link'><a href="Registry/BaseRegistry.html#log_validation_failure-instance_method" title="Tasker::Registry::BaseRegistry#log_validation_failure (method)">#log_validation_failure</a></span>, <span class='object_link'><a href="Registry/BaseRegistry.html#thread_safe_operation-instance_method" title="Tasker::Registry::BaseRegistry#thread_safe_operation (method)">#thread_safe_operation</a></span>, <span class='object_link'><a href="Registry/BaseRegistry.html#validate_registration_params!-instance_method" title="Tasker::Registry::BaseRegistry#validate_registration_params! (method)">#validate_registration_params!</a></span></p>
439
+
440
+
441
+
442
+
443
+
444
+
445
+
446
+
447
+
448
+ <h3 class="inherited">Methods included from <span class='object_link'><a href="Concerns/StructuredLogging.html" title="Tasker::Concerns::StructuredLogging (module)">Concerns::StructuredLogging</a></span></h3>
449
+ <p class="inherited"><span class='object_link'><a href="Concerns/StructuredLogging.html#correlation_id-instance_method" title="Tasker::Concerns::StructuredLogging#correlation_id (method)">#correlation_id</a></span>, <span class='object_link'><a href="Concerns/StructuredLogging.html#correlation_id=-instance_method" title="Tasker::Concerns::StructuredLogging#correlation_id= (method)">#correlation_id=</a></span>, <span class='object_link'><a href="Concerns/StructuredLogging.html#log_exception-instance_method" title="Tasker::Concerns::StructuredLogging#log_exception (method)">#log_exception</a></span>, <span class='object_link'><a href="Concerns/StructuredLogging.html#log_orchestration_event-instance_method" title="Tasker::Concerns::StructuredLogging#log_orchestration_event (method)">#log_orchestration_event</a></span>, <span class='object_link'><a href="Concerns/StructuredLogging.html#log_performance_event-instance_method" title="Tasker::Concerns::StructuredLogging#log_performance_event (method)">#log_performance_event</a></span>, <span class='object_link'><a href="Concerns/StructuredLogging.html#log_step_event-instance_method" title="Tasker::Concerns::StructuredLogging#log_step_event (method)">#log_step_event</a></span>, <span class='object_link'><a href="Concerns/StructuredLogging.html#log_structured-instance_method" title="Tasker::Concerns::StructuredLogging#log_structured (method)">#log_structured</a></span>, <span class='object_link'><a href="Concerns/StructuredLogging.html#log_task_event-instance_method" title="Tasker::Concerns::StructuredLogging#log_task_event (method)">#log_task_event</a></span>, <span class='object_link'><a href="Concerns/StructuredLogging.html#with_correlation_id-instance_method" title="Tasker::Concerns::StructuredLogging#with_correlation_id (method)">#with_correlation_id</a></span></p>
450
+
451
+ <div id="constructor_details" class="method_details_list">
452
+ <h2>Constructor Details</h2>
453
+
454
+ <div class="method_details first">
455
+ <h3 class="signature first" id="initialize-instance_method">
456
+
457
+ #<strong>initialize</strong> &#x21d2; <tt><span class='object_link'><a href="" title="Tasker::HandlerFactory (class)">HandlerFactory</a></span></tt>
458
+
459
+
460
+
461
+
462
+
463
+ </h3><div class="docstring">
464
+ <div class="discussion">
465
+
466
+ <p>Initialize a new handler factory</p>
467
+
468
+
469
+ </div>
470
+ </div>
471
+ <div class="tags">
472
+
473
+
474
+ </div><table class="source_code">
475
+ <tr>
476
+ <td>
477
+ <pre class="lines">
478
+
479
+
480
+ 28
481
+ 29
482
+ 30
483
+ 31
484
+ 32
485
+ 33</pre>
486
+ </td>
487
+ <td>
488
+ <pre class="code"><span class="info file"># File 'lib/tasker/handler_factory.rb', line 28</span>
489
+
490
+ <span class='kw'>def</span> <span class='id identifier rubyid_initialize'>initialize</span>
491
+ <span class='kw'>super</span>
492
+ <span class='ivar'>@handler_classes</span> <span class='op'>=</span> <span class='const'>Concurrent</span><span class='op'>::</span><span class='const'>Hash</span><span class='period'>.</span><span class='id identifier rubyid_new'>new</span>
493
+ <span class='ivar'>@namespaces</span> <span class='op'>=</span> <span class='const'>Set</span><span class='period'>.</span><span class='id identifier rubyid_new'>new</span><span class='lparen'>(</span><span class='lbracket'>[</span><span class='symbol'>:default</span><span class='rbracket'>]</span><span class='rparen'>)</span>
494
+ <span class='id identifier rubyid_log_registry_operation'>log_registry_operation</span><span class='lparen'>(</span><span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>initialized</span><span class='tstring_end'>&#39;</span></span><span class='comma'>,</span> <span class='label'>namespaces:</span> <span class='ivar'>@namespaces</span><span class='period'>.</span><span class='id identifier rubyid_to_a'>to_a</span><span class='rparen'>)</span>
495
+ <span class='kw'>end</span></pre>
496
+ </td>
497
+ </tr>
498
+ </table>
499
+ </div>
500
+
501
+ </div>
502
+
503
+ <div id="instance_attr_details" class="attr_details">
504
+ <h2>Instance Attribute Details</h2>
505
+
506
+
507
+ <span id=""></span>
508
+ <div class="method_details first">
509
+ <h3 class="signature first" id="handler_classes-instance_method">
510
+
511
+ #<strong>handler_classes</strong> &#x21d2; <tt>Concurrent::Hash</tt> <span class="extras">(readonly)</span>
512
+
513
+
514
+
515
+
516
+
517
+ </h3><div class="docstring">
518
+ <div class="discussion">
519
+
520
+ <p>Returns Thread-safe registered handler classes by dependent system and handler name.</p>
521
+
522
+
523
+ </div>
524
+ </div>
525
+ <div class="tags">
526
+
527
+ <p class="tag_title">Returns:</p>
528
+ <ul class="return">
529
+
530
+ <li>
531
+
532
+
533
+ <span class='type'>(<tt>Concurrent::Hash</tt>)</span>
534
+
535
+
536
+
537
+ &mdash;
538
+ <div class='inline'>
539
+ <p>Thread-safe registered handler classes by dependent system and handler name</p>
540
+ </div>
541
+
542
+ </li>
543
+
544
+ </ul>
545
+
546
+ </div><table class="source_code">
547
+ <tr>
548
+ <td>
549
+ <pre class="lines">
550
+
551
+
552
+ 20
553
+ 21
554
+ 22</pre>
555
+ </td>
556
+ <td>
557
+ <pre class="code"><span class="info file"># File 'lib/tasker/handler_factory.rb', line 20</span>
558
+
559
+ <span class='kw'>def</span> <span class='id identifier rubyid_handler_classes'>handler_classes</span>
560
+ <span class='ivar'>@handler_classes</span>
561
+ <span class='kw'>end</span></pre>
562
+ </td>
563
+ </tr>
564
+ </table>
565
+ </div>
566
+
567
+
568
+ <span id=""></span>
569
+ <div class="method_details ">
570
+ <h3 class="signature " id="namespaces-instance_method">
571
+
572
+ #<strong>namespaces</strong> &#x21d2; <tt>Set</tt> <span class="extras">(readonly)</span>
573
+
574
+
575
+
576
+
577
+
578
+ </h3><div class="docstring">
579
+ <div class="discussion">
580
+
581
+ <p>Returns Set of registered namespaces for efficient enumeration.</p>
582
+
583
+
584
+ </div>
585
+ </div>
586
+ <div class="tags">
587
+
588
+ <p class="tag_title">Returns:</p>
589
+ <ul class="return">
590
+
591
+ <li>
592
+
593
+
594
+ <span class='type'>(<tt>Set</tt>)</span>
595
+
596
+
597
+
598
+ &mdash;
599
+ <div class='inline'>
600
+ <p>Set of registered namespaces for efficient enumeration</p>
601
+ </div>
602
+
603
+ </li>
604
+
605
+ </ul>
606
+
607
+ </div><table class="source_code">
608
+ <tr>
609
+ <td>
610
+ <pre class="lines">
611
+
612
+
613
+ 23
614
+ 24
615
+ 25</pre>
616
+ </td>
617
+ <td>
618
+ <pre class="code"><span class="info file"># File 'lib/tasker/handler_factory.rb', line 23</span>
619
+
620
+ <span class='kw'>def</span> <span class='id identifier rubyid_namespaces'>namespaces</span>
621
+ <span class='ivar'>@namespaces</span>
622
+ <span class='kw'>end</span></pre>
623
+ </td>
624
+ </tr>
625
+ </table>
626
+ </div>
627
+
628
+ </div>
629
+
630
+
631
+ <div id="instance_method_details" class="method_details_list">
632
+ <h2>Instance Method Details</h2>
633
+
634
+
635
+ <div class="method_details first">
636
+ <h3 class="signature first" id="all_items-instance_method">
637
+
638
+ #<strong>all_items</strong> &#x21d2; <tt>Hash</tt>
639
+
640
+
641
+
642
+
643
+
644
+ </h3><div class="docstring">
645
+ <div class="discussion">
646
+
647
+ <p>Get all registered handlers (required by BaseRegistry)</p>
648
+
649
+
650
+ </div>
651
+ </div>
652
+ <div class="tags">
653
+
654
+ <p class="tag_title">Returns:</p>
655
+ <ul class="return">
656
+
657
+ <li>
658
+
659
+
660
+ <span class='type'>(<tt>Hash</tt>)</span>
661
+
662
+
663
+
664
+ &mdash;
665
+ <div class='inline'>
666
+ <p>All registered handlers</p>
667
+ </div>
668
+
669
+ </li>
670
+
671
+ </ul>
672
+
673
+ </div><table class="source_code">
674
+ <tr>
675
+ <td>
676
+ <pre class="lines">
677
+
678
+
679
+ 156
680
+ 157
681
+ 158</pre>
682
+ </td>
683
+ <td>
684
+ <pre class="code"><span class="info file"># File 'lib/tasker/handler_factory.rb', line 156</span>
685
+
686
+ <span class='kw'>def</span> <span class='id identifier rubyid_all_items'>all_items</span>
687
+ <span class='ivar'>@handler_classes</span><span class='period'>.</span><span class='id identifier rubyid_dup'>dup</span>
688
+ <span class='kw'>end</span></pre>
689
+ </td>
690
+ </tr>
691
+ </table>
692
+ </div>
693
+
694
+ <div class="method_details ">
695
+ <h3 class="signature " id="clear!-instance_method">
696
+
697
+ #<strong>clear!</strong> &#x21d2; <tt>Boolean</tt>
698
+
699
+
700
+
701
+
702
+
703
+ </h3><div class="docstring">
704
+ <div class="discussion">
705
+
706
+ <p>Clear all registered handlers (required by BaseRegistry)</p>
707
+
708
+
709
+ </div>
710
+ </div>
711
+ <div class="tags">
712
+
713
+ <p class="tag_title">Returns:</p>
714
+ <ul class="return">
715
+
716
+ <li>
717
+
718
+
719
+ <span class='type'>(<tt>Boolean</tt>)</span>
720
+
721
+
722
+
723
+ &mdash;
724
+ <div class='inline'>
725
+ <p>True if cleared successfully</p>
726
+ </div>
727
+
728
+ </li>
729
+
730
+ </ul>
731
+
732
+ </div><table class="source_code">
733
+ <tr>
734
+ <td>
735
+ <pre class="lines">
736
+
737
+
738
+ 163
739
+ 164
740
+ 165</pre>
741
+ </td>
742
+ <td>
743
+ <pre class="code"><span class="info file"># File 'lib/tasker/handler_factory.rb', line 163</span>
744
+
745
+ <span class='kw'>def</span> <span class='id identifier rubyid_clear!'>clear!</span>
746
+ <span class='id identifier rubyid_clear_all!'>clear_all!</span>
747
+ <span class='kw'>end</span></pre>
748
+ </td>
749
+ </tr>
750
+ </table>
751
+ </div>
752
+
753
+ <div class="method_details ">
754
+ <h3 class="signature " id="clear_all!-instance_method">
755
+
756
+ #<strong>clear_all!</strong> &#x21d2; <tt>Boolean</tt>
757
+
758
+
759
+
760
+
761
+
762
+ </h3><div class="docstring">
763
+ <div class="discussion">
764
+
765
+ <p>Clear all registered handlers (for testing)</p>
766
+
767
+
768
+ </div>
769
+ </div>
770
+ <div class="tags">
771
+
772
+ <p class="tag_title">Returns:</p>
773
+ <ul class="return">
774
+
775
+ <li>
776
+
777
+
778
+ <span class='type'>(<tt>Boolean</tt>)</span>
779
+
780
+
781
+
782
+ &mdash;
783
+ <div class='inline'>
784
+ <p>True if cleared successfully</p>
785
+ </div>
786
+
787
+ </li>
788
+
789
+ </ul>
790
+
791
+ </div><table class="source_code">
792
+ <tr>
793
+ <td>
794
+ <pre class="lines">
795
+
796
+
797
+ 170
798
+ 171
799
+ 172
800
+ 173
801
+ 174
802
+ 175
803
+ 176
804
+ 177</pre>
805
+ </td>
806
+ <td>
807
+ <pre class="code"><span class="info file"># File 'lib/tasker/handler_factory.rb', line 170</span>
808
+
809
+ <span class='kw'>def</span> <span class='id identifier rubyid_clear_all!'>clear_all!</span>
810
+ <span class='id identifier rubyid_thread_safe_operation'>thread_safe_operation</span> <span class='kw'>do</span>
811
+ <span class='ivar'>@handler_classes</span><span class='period'>.</span><span class='id identifier rubyid_clear'>clear</span>
812
+ <span class='ivar'>@namespaces</span> <span class='op'>=</span> <span class='const'>Set</span><span class='period'>.</span><span class='id identifier rubyid_new'>new</span><span class='lparen'>(</span><span class='lbracket'>[</span><span class='symbol'>:default</span><span class='rbracket'>]</span><span class='rparen'>)</span>
813
+ <span class='id identifier rubyid_log_registry_operation'>log_registry_operation</span><span class='lparen'>(</span><span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>cleared_all</span><span class='tstring_end'>&#39;</span></span><span class='rparen'>)</span>
814
+ <span class='kw'>true</span>
815
+ <span class='kw'>end</span>
816
+ <span class='kw'>end</span></pre>
817
+ </td>
818
+ </tr>
819
+ </table>
820
+ </div>
821
+
822
+ <div class="method_details ">
823
+ <h3 class="signature " id="get-instance_method">
824
+
825
+ #<strong>get</strong>(name, namespace_name: :default, version: &#39;0.1.0&#39;) &#x21d2; <tt>Object</tt>
826
+
827
+
828
+
829
+
830
+
831
+ </h3><div class="docstring">
832
+ <div class="discussion">
833
+
834
+ <p>Get a task handler instance by name and optional dependent system</p>
835
+
836
+
837
+ </div>
838
+ </div>
839
+ <div class="tags">
840
+ <p class="tag_title">Parameters:</p>
841
+ <ul class="param">
842
+
843
+ <li>
844
+
845
+ <span class='name'>name</span>
846
+
847
+
848
+ <span class='type'>(<tt>String</tt>, <tt>Symbol</tt>)</span>
849
+
850
+
851
+
852
+ &mdash;
853
+ <div class='inline'>
854
+ <p>The name of the handler to retrieve</p>
855
+ </div>
856
+
857
+ </li>
858
+
859
+ <li>
860
+
861
+ <span class='name'>namespace_name</span>
862
+
863
+
864
+ <span class='type'>(<tt>String</tt>, <tt>Symbol</tt>)</span>
865
+
866
+
867
+ <em class="default">(defaults to: <tt>:default</tt>)</em>
868
+
869
+
870
+ &mdash;
871
+ <div class='inline'>
872
+ <p>The dependent system namespace (defaults to ‘default’)</p>
873
+ </div>
874
+
875
+ </li>
876
+
877
+ <li>
878
+
879
+ <span class='name'>version</span>
880
+
881
+
882
+ <span class='type'>(<tt>String</tt>)</span>
883
+
884
+
885
+ <em class="default">(defaults to: <tt>&#39;0.1.0&#39;</tt>)</em>
886
+
887
+
888
+ &mdash;
889
+ <div class='inline'>
890
+ <p>The version of the handler (defaults to ‘0.1.0’)</p>
891
+ </div>
892
+
893
+ </li>
894
+
895
+ </ul>
896
+
897
+ <p class="tag_title">Returns:</p>
898
+ <ul class="return">
899
+
900
+ <li>
901
+
902
+
903
+ <span class='type'>(<tt>Object</tt>)</span>
904
+
905
+
906
+
907
+ &mdash;
908
+ <div class='inline'>
909
+ <p>An instance of the requested task handler</p>
910
+ </div>
911
+
912
+ </li>
913
+
914
+ </ul>
915
+ <p class="tag_title">Raises:</p>
916
+ <ul class="raise">
917
+
918
+ <li>
919
+
920
+
921
+ <span class='type'>(<tt><span class='object_link'><a href="ProceduralError.html" title="Tasker::ProceduralError (class)">Tasker::ProceduralError</a></span></tt>)</span>
922
+
923
+
924
+
925
+ &mdash;
926
+ <div class='inline'>
927
+ <p>If no handler is registered with the given name in the specified system</p>
928
+ </div>
929
+
930
+ </li>
931
+
932
+ </ul>
933
+
934
+ </div><table class="source_code">
935
+ <tr>
936
+ <td>
937
+ <pre class="lines">
938
+
939
+
940
+ 42
941
+ 43
942
+ 44
943
+ 45
944
+ 46
945
+ 47
946
+ 48
947
+ 49
948
+ 50
949
+ 51
950
+ 52
951
+ 53
952
+ 54
953
+ 55
954
+ 56
955
+ 57
956
+ 58</pre>
957
+ </td>
958
+ <td>
959
+ <pre class="code"><span class="info file"># File 'lib/tasker/handler_factory.rb', line 42</span>
960
+
961
+ <span class='kw'>def</span> <span class='id identifier rubyid_get'>get</span><span class='lparen'>(</span><span class='id identifier rubyid_name'>name</span><span class='comma'>,</span> <span class='label'>namespace_name:</span> <span class='symbol'>:default</span><span class='comma'>,</span> <span class='label'>version:</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>0.1.0</span><span class='tstring_end'>&#39;</span></span><span class='rparen'>)</span>
962
+ <span class='id identifier rubyid_namespace_name'>namespace_name</span> <span class='op'>=</span> <span class='id identifier rubyid_namespace_name'>namespace_name</span><span class='period'>.</span><span class='id identifier rubyid_to_sym'>to_sym</span>
963
+ <span class='id identifier rubyid_name_sym'>name_sym</span> <span class='op'>=</span> <span class='id identifier rubyid_name'>name</span><span class='period'>.</span><span class='id identifier rubyid_to_sym'>to_sym</span>
964
+
965
+ <span class='id identifier rubyid_thread_safe_operation'>thread_safe_operation</span> <span class='kw'>do</span>
966
+ <span class='comment'># Direct namespace lookup - allows same name in different systems
967
+ </span> <span class='id identifier rubyid_handler_class'>handler_class</span> <span class='op'>=</span> <span class='ivar'>@handler_classes</span><span class='period'>.</span><span class='id identifier rubyid_dig'>dig</span><span class='lparen'>(</span><span class='id identifier rubyid_namespace_name'>namespace_name</span><span class='comma'>,</span> <span class='id identifier rubyid_name_sym'>name_sym</span><span class='comma'>,</span> <span class='id identifier rubyid_version'>version</span><span class='rparen'>)</span>
968
+ <span class='id identifier rubyid_raise_handler_not_found'>raise_handler_not_found</span><span class='lparen'>(</span><span class='id identifier rubyid_name'>name</span><span class='comma'>,</span> <span class='id identifier rubyid_namespace_name'>namespace_name</span><span class='comma'>,</span> <span class='id identifier rubyid_version'>version</span><span class='rparen'>)</span> <span class='kw'>unless</span> <span class='id identifier rubyid_handler_class'>handler_class</span>
969
+
970
+ <span class='id identifier rubyid_log_registry_operation'>log_registry_operation</span><span class='lparen'>(</span><span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>handler_retrieved</span><span class='tstring_end'>&#39;</span></span><span class='comma'>,</span>
971
+ <span class='label'>entity_type:</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>task_handler</span><span class='tstring_end'>&#39;</span></span><span class='comma'>,</span>
972
+ <span class='label'>entity_id:</span> <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_namespace_name'>namespace_name</span><span class='embexpr_end'>}</span><span class='tstring_content'>/</span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_name_sym'>name_sym</span><span class='embexpr_end'>}</span><span class='tstring_content'>/</span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_version'>version</span><span class='embexpr_end'>}</span><span class='tstring_end'>&quot;</span></span><span class='comma'>,</span>
973
+ <span class='label'>handler_class:</span> <span class='id identifier rubyid_handler_class'>handler_class</span><span class='period'>.</span><span class='id identifier rubyid_is_a?'>is_a?</span><span class='lparen'>(</span><span class='const'>Class</span><span class='rparen'>)</span> <span class='op'>?</span> <span class='id identifier rubyid_handler_class'>handler_class</span><span class='period'>.</span><span class='id identifier rubyid_name'>name</span> <span class='op'>:</span> <span class='id identifier rubyid_handler_class'>handler_class</span><span class='rparen'>)</span>
974
+
975
+ <span class='id identifier rubyid_instantiate_handler'>instantiate_handler</span><span class='lparen'>(</span><span class='id identifier rubyid_handler_class'>handler_class</span><span class='rparen'>)</span>
976
+ <span class='kw'>end</span>
977
+ <span class='kw'>end</span></pre>
978
+ </td>
979
+ </tr>
980
+ </table>
981
+ </div>
982
+
983
+ <div class="method_details ">
984
+ <h3 class="signature " id="list_handlers-instance_method">
985
+
986
+ #<strong>list_handlers</strong>(namespace: nil) &#x21d2; <tt>Hash</tt>
987
+
988
+
989
+
990
+
991
+
992
+ </h3><div class="docstring">
993
+ <div class="discussion">
994
+
995
+ <p>List handlers, optionally filtered by namespace</p>
996
+
997
+
998
+ </div>
999
+ </div>
1000
+ <div class="tags">
1001
+ <p class="tag_title">Parameters:</p>
1002
+ <ul class="param">
1003
+
1004
+ <li>
1005
+
1006
+ <span class='name'>namespace</span>
1007
+
1008
+
1009
+ <span class='type'>(<tt>String</tt>, <tt>Symbol</tt>, <tt>nil</tt>)</span>
1010
+
1011
+
1012
+ <em class="default">(defaults to: <tt>nil</tt>)</em>
1013
+
1014
+
1015
+ &mdash;
1016
+ <div class='inline'>
1017
+ <p>Optional namespace filter</p>
1018
+ </div>
1019
+
1020
+ </li>
1021
+
1022
+ </ul>
1023
+
1024
+ <p class="tag_title">Returns:</p>
1025
+ <ul class="return">
1026
+
1027
+ <li>
1028
+
1029
+
1030
+ <span class='type'>(<tt>Hash</tt>)</span>
1031
+
1032
+
1033
+
1034
+ &mdash;
1035
+ <div class='inline'>
1036
+ <p>Handlers hash, either for specific namespace or all namespaces</p>
1037
+ </div>
1038
+
1039
+ </li>
1040
+
1041
+ </ul>
1042
+
1043
+ </div><table class="source_code">
1044
+ <tr>
1045
+ <td>
1046
+ <pre class="lines">
1047
+
1048
+
1049
+ 126
1050
+ 127
1051
+ 128
1052
+ 129
1053
+ 130
1054
+ 131
1055
+ 132</pre>
1056
+ </td>
1057
+ <td>
1058
+ <pre class="code"><span class="info file"># File 'lib/tasker/handler_factory.rb', line 126</span>
1059
+
1060
+ <span class='kw'>def</span> <span class='id identifier rubyid_list_handlers'>list_handlers</span><span class='lparen'>(</span><span class='label'>namespace:</span> <span class='kw'>nil</span><span class='rparen'>)</span>
1061
+ <span class='kw'>if</span> <span class='id identifier rubyid_namespace'>namespace</span>
1062
+ <span class='ivar'>@handler_classes</span><span class='lbracket'>[</span><span class='id identifier rubyid_namespace'>namespace</span><span class='period'>.</span><span class='id identifier rubyid_to_sym'>to_sym</span><span class='rbracket'>]</span> <span class='op'>||</span> <span class='const'>Concurrent</span><span class='op'>::</span><span class='const'>Hash</span><span class='period'>.</span><span class='id identifier rubyid_new'>new</span>
1063
+ <span class='kw'>else</span>
1064
+ <span class='ivar'>@handler_classes</span><span class='period'>.</span><span class='id identifier rubyid_dup'>dup</span>
1065
+ <span class='kw'>end</span>
1066
+ <span class='kw'>end</span></pre>
1067
+ </td>
1068
+ </tr>
1069
+ </table>
1070
+ </div>
1071
+
1072
+ <div class="method_details ">
1073
+ <h3 class="signature " id="register-instance_method">
1074
+
1075
+ #<strong>register</strong>(name, class_or_class_name, namespace_name: :default, version: &#39;0.1.0&#39;, **options) &#x21d2; <tt>Boolean</tt>
1076
+
1077
+
1078
+
1079
+
1080
+
1081
+ </h3><div class="docstring">
1082
+ <div class="discussion">
1083
+
1084
+ <p>Register a task handler class with a name and optional dependent system</p>
1085
+
1086
+
1087
+ </div>
1088
+ </div>
1089
+ <div class="tags">
1090
+ <p class="tag_title">Parameters:</p>
1091
+ <ul class="param">
1092
+
1093
+ <li>
1094
+
1095
+ <span class='name'>name</span>
1096
+
1097
+
1098
+ <span class='type'>(<tt>String</tt>, <tt>Symbol</tt>)</span>
1099
+
1100
+
1101
+
1102
+ &mdash;
1103
+ <div class='inline'>
1104
+ <p>The name to register the handler under</p>
1105
+ </div>
1106
+
1107
+ </li>
1108
+
1109
+ <li>
1110
+
1111
+ <span class='name'>class_or_class_name</span>
1112
+
1113
+
1114
+ <span class='type'>(<tt>Class</tt>, <tt>String</tt>)</span>
1115
+
1116
+
1117
+
1118
+ &mdash;
1119
+ <div class='inline'>
1120
+ <p>The handler class to register</p>
1121
+ </div>
1122
+
1123
+ </li>
1124
+
1125
+ <li>
1126
+
1127
+ <span class='name'>namespace_name</span>
1128
+
1129
+
1130
+ <span class='type'>(<tt>String</tt>, <tt>Symbol</tt>)</span>
1131
+
1132
+
1133
+ <em class="default">(defaults to: <tt>:default</tt>)</em>
1134
+
1135
+
1136
+ &mdash;
1137
+ <div class='inline'>
1138
+ <p>The dependent system namespace (defaults to ‘default’)</p>
1139
+ </div>
1140
+
1141
+ </li>
1142
+
1143
+ <li>
1144
+
1145
+ <span class='name'>version</span>
1146
+
1147
+
1148
+ <span class='type'>(<tt>String</tt>)</span>
1149
+
1150
+
1151
+ <em class="default">(defaults to: <tt>&#39;0.1.0&#39;</tt>)</em>
1152
+
1153
+
1154
+ &mdash;
1155
+ <div class='inline'>
1156
+ <p>The version of the handler (defaults to ‘0.1.0’)</p>
1157
+ </div>
1158
+
1159
+ </li>
1160
+
1161
+ <li>
1162
+
1163
+ <span class='name'>options</span>
1164
+
1165
+
1166
+ <span class='type'>(<tt>Hash</tt>)</span>
1167
+
1168
+
1169
+
1170
+ &mdash;
1171
+ <div class='inline'>
1172
+ <p>Additional registration options</p>
1173
+ </div>
1174
+
1175
+ </li>
1176
+
1177
+ </ul>
1178
+
1179
+
1180
+
1181
+
1182
+
1183
+
1184
+
1185
+
1186
+
1187
+
1188
+
1189
+
1190
+ <p class="tag_title">Options Hash (<tt>**options</tt>):</p>
1191
+ <ul class="option">
1192
+
1193
+ <li>
1194
+ <span class="name">:replace</span>
1195
+ <span class="type">(<tt>Boolean</tt>)</span>
1196
+ <span class="default">
1197
+
1198
+ &mdash; default:
1199
+ <tt>false</tt>
1200
+
1201
+ </span>
1202
+
1203
+ &mdash; <div class='inline'>
1204
+ <p>Whether to replace existing handler</p>
1205
+ </div>
1206
+
1207
+ </li>
1208
+
1209
+ </ul>
1210
+
1211
+
1212
+ <p class="tag_title">Returns:</p>
1213
+ <ul class="return">
1214
+
1215
+ <li>
1216
+
1217
+
1218
+ <span class='type'>(<tt>Boolean</tt>)</span>
1219
+
1220
+
1221
+
1222
+ &mdash;
1223
+ <div class='inline'>
1224
+ <p>True if registration successful</p>
1225
+ </div>
1226
+
1227
+ </li>
1228
+
1229
+ </ul>
1230
+ <p class="tag_title">Raises:</p>
1231
+ <ul class="raise">
1232
+
1233
+ <li>
1234
+
1235
+
1236
+ <span class='type'>(<tt>StandardError</tt>)</span>
1237
+
1238
+
1239
+
1240
+ &mdash;
1241
+ <div class='inline'>
1242
+ <p>If custom event configuration fails (fail fast)</p>
1243
+ </div>
1244
+
1245
+ </li>
1246
+
1247
+ <li>
1248
+
1249
+
1250
+ <span class='type'>(<tt>ArgumentError</tt>)</span>
1251
+
1252
+
1253
+
1254
+ &mdash;
1255
+ <div class='inline'>
1256
+ <p>If handler already exists and replace is false</p>
1257
+ </div>
1258
+
1259
+ </li>
1260
+
1261
+ </ul>
1262
+
1263
+ </div><table class="source_code">
1264
+ <tr>
1265
+ <td>
1266
+ <pre class="lines">
1267
+
1268
+
1269
+ 71
1270
+ 72
1271
+ 73
1272
+ 74
1273
+ 75
1274
+ 76
1275
+ 77
1276
+ 78
1277
+ 79
1278
+ 80
1279
+ 81
1280
+ 82
1281
+ 83
1282
+ 84
1283
+ 85
1284
+ 86
1285
+ 87
1286
+ 88
1287
+ 89
1288
+ 90
1289
+ 91
1290
+ 92
1291
+ 93
1292
+ 94
1293
+ 95
1294
+ 96
1295
+ 97
1296
+ 98
1297
+ 99
1298
+ 100
1299
+ 101
1300
+ 102
1301
+ 103
1302
+ 104
1303
+ 105
1304
+ 106
1305
+ 107
1306
+ 108
1307
+ 109
1308
+ 110
1309
+ 111
1310
+ 112
1311
+ 113
1312
+ 114
1313
+ 115
1314
+ 116
1315
+ 117
1316
+ 118
1317
+ 119
1318
+ 120</pre>
1319
+ </td>
1320
+ <td>
1321
+ <pre class="code"><span class="info file"># File 'lib/tasker/handler_factory.rb', line 71</span>
1322
+
1323
+ <span class='kw'>def</span> <span class='id identifier rubyid_register'>register</span><span class='lparen'>(</span><span class='id identifier rubyid_name'>name</span><span class='comma'>,</span> <span class='id identifier rubyid_class_or_class_name'>class_or_class_name</span><span class='comma'>,</span> <span class='label'>namespace_name:</span> <span class='symbol'>:default</span><span class='comma'>,</span> <span class='label'>version:</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>0.1.0</span><span class='tstring_end'>&#39;</span></span><span class='comma'>,</span> <span class='op'>**</span><span class='id identifier rubyid_options'>options</span><span class='rparen'>)</span>
1324
+ <span class='id identifier rubyid_name_sym'>name_sym</span> <span class='op'>=</span> <span class='id identifier rubyid_name'>name</span><span class='period'>.</span><span class='id identifier rubyid_to_sym'>to_sym</span>
1325
+ <span class='id identifier rubyid_namespace_name'>namespace_name</span> <span class='op'>=</span> <span class='id identifier rubyid_namespace_name'>namespace_name</span><span class='period'>.</span><span class='id identifier rubyid_to_sym'>to_sym</span>
1326
+ <span class='id identifier rubyid_replace'>replace</span> <span class='op'>=</span> <span class='id identifier rubyid_options'>options</span><span class='period'>.</span><span class='id identifier rubyid_fetch'>fetch</span><span class='lparen'>(</span><span class='symbol'>:replace</span><span class='comma'>,</span> <span class='kw'>false</span><span class='rparen'>)</span>
1327
+
1328
+ <span class='id identifier rubyid_thread_safe_operation'>thread_safe_operation</span> <span class='kw'>do</span>
1329
+ <span class='comment'># Validate custom event configuration BEFORE modifying registry state
1330
+ </span> <span class='comment'># This ensures atomic registration - either fully succeeds or fully fails
1331
+ </span> <span class='id identifier rubyid_normalized_class'>normalized_class</span> <span class='op'>=</span> <span class='id identifier rubyid_normalize_class_name'>normalize_class_name</span><span class='lparen'>(</span><span class='id identifier rubyid_class_or_class_name'>class_or_class_name</span><span class='rparen'>)</span>
1332
+
1333
+ <span class='comment'># Validate handler interface using unified validator
1334
+ </span> <span class='kw'>begin</span>
1335
+ <span class='const'><span class='object_link'><a href="Registry.html" title="Tasker::Registry (module)">Registry</a></span></span><span class='op'>::</span><span class='const'><span class='object_link'><a href="Registry/InterfaceValidator.html" title="Tasker::Registry::InterfaceValidator (class)">InterfaceValidator</a></span></span><span class='period'>.</span><span class='id identifier rubyid_validate_handler!'><span class='object_link'><a href="Registry/InterfaceValidator.html#validate_handler!-class_method" title="Tasker::Registry::InterfaceValidator.validate_handler! (method)">validate_handler!</a></span></span><span class='lparen'>(</span><span class='id identifier rubyid_normalized_class'>normalized_class</span><span class='period'>.</span><span class='id identifier rubyid_is_a?'>is_a?</span><span class='lparen'>(</span><span class='const'>Class</span><span class='rparen'>)</span> <span class='op'>?</span> <span class='id identifier rubyid_normalized_class'>normalized_class</span> <span class='op'>:</span> <span class='id identifier rubyid_normalized_class'>normalized_class</span><span class='period'>.</span><span class='id identifier rubyid_constantize'>constantize</span><span class='rparen'>)</span>
1336
+ <span class='kw'>rescue</span> <span class='const'>ArgumentError</span> <span class='op'>=&gt;</span> <span class='id identifier rubyid_e'>e</span>
1337
+ <span class='id identifier rubyid_log_validation_failure'>log_validation_failure</span><span class='lparen'>(</span><span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>task_handler</span><span class='tstring_end'>&#39;</span></span><span class='comma'>,</span> <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_namespace_name'>namespace_name</span><span class='embexpr_end'>}</span><span class='tstring_content'>/</span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_name_sym'>name_sym</span><span class='embexpr_end'>}</span><span class='tstring_content'>/</span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_version'>version</span><span class='embexpr_end'>}</span><span class='tstring_end'>&quot;</span></span><span class='comma'>,</span> <span class='id identifier rubyid_e'>e</span><span class='period'>.</span><span class='id identifier rubyid_message'>message</span><span class='rparen'>)</span>
1338
+ <span class='id identifier rubyid_raise'>raise</span>
1339
+ <span class='kw'>end</span>
1340
+
1341
+ <span class='id identifier rubyid_discover_and_register_custom_events'>discover_and_register_custom_events</span><span class='lparen'>(</span><span class='id identifier rubyid_class_or_class_name'>class_or_class_name</span><span class='rparen'>)</span>
1342
+
1343
+ <span class='comment'># Initialize nested hash structure
1344
+ </span> <span class='ivar'>@handler_classes</span><span class='lbracket'>[</span><span class='id identifier rubyid_namespace_name'>namespace_name</span><span class='rbracket'>]</span> <span class='op'>||=</span> <span class='const'>Concurrent</span><span class='op'>::</span><span class='const'>Hash</span><span class='period'>.</span><span class='id identifier rubyid_new'>new</span>
1345
+ <span class='ivar'>@handler_classes</span><span class='lbracket'>[</span><span class='id identifier rubyid_namespace_name'>namespace_name</span><span class='rbracket'>]</span><span class='lbracket'>[</span><span class='id identifier rubyid_name_sym'>name_sym</span><span class='rbracket'>]</span> <span class='op'>||=</span> <span class='const'>Concurrent</span><span class='op'>::</span><span class='const'>Hash</span><span class='period'>.</span><span class='id identifier rubyid_new'>new</span>
1346
+
1347
+ <span class='comment'># Check for existing handler
1348
+ </span> <span class='id identifier rubyid_entity_id'>entity_id</span> <span class='op'>=</span> <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_namespace_name'>namespace_name</span><span class='embexpr_end'>}</span><span class='tstring_content'>/</span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_name_sym'>name_sym</span><span class='embexpr_end'>}</span><span class='tstring_content'>/</span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_version'>version</span><span class='embexpr_end'>}</span><span class='tstring_end'>&quot;</span></span>
1349
+ <span class='kw'>if</span> <span class='ivar'>@handler_classes</span><span class='lbracket'>[</span><span class='id identifier rubyid_namespace_name'>namespace_name</span><span class='rbracket'>]</span><span class='lbracket'>[</span><span class='id identifier rubyid_name_sym'>name_sym</span><span class='rbracket'>]</span><span class='period'>.</span><span class='id identifier rubyid_key?'>key?</span><span class='lparen'>(</span><span class='id identifier rubyid_version'>version</span><span class='rparen'>)</span> <span class='op'>&amp;&amp;</span> <span class='op'>!</span><span class='id identifier rubyid_replace'>replace</span>
1350
+ <span class='id identifier rubyid_raise'>raise</span> <span class='const'>ArgumentError</span><span class='comma'>,</span>
1351
+ <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>Handler &#39;</span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_name_sym'>name_sym</span><span class='embexpr_end'>}</span><span class='tstring_content'>&#39; already registered in namespace &#39;</span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_namespace_name'>namespace_name</span><span class='embexpr_end'>}</span><span class='tstring_content'>&#39; version &#39;</span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_version'>version</span><span class='embexpr_end'>}</span><span class='tstring_content'>&#39;. Use replace: true to override.</span><span class='tstring_end'>&quot;</span></span>
1352
+ <span class='kw'>end</span>
1353
+
1354
+ <span class='comment'># Log replacement if needed
1355
+ </span> <span class='kw'>if</span> <span class='ivar'>@handler_classes</span><span class='lbracket'>[</span><span class='id identifier rubyid_namespace_name'>namespace_name</span><span class='rbracket'>]</span><span class='lbracket'>[</span><span class='id identifier rubyid_name_sym'>name_sym</span><span class='rbracket'>]</span><span class='period'>.</span><span class='id identifier rubyid_key?'>key?</span><span class='lparen'>(</span><span class='id identifier rubyid_version'>version</span><span class='rparen'>)</span>
1356
+ <span class='id identifier rubyid_existing_class'>existing_class</span> <span class='op'>=</span> <span class='ivar'>@handler_classes</span><span class='lbracket'>[</span><span class='id identifier rubyid_namespace_name'>namespace_name</span><span class='rbracket'>]</span><span class='lbracket'>[</span><span class='id identifier rubyid_name_sym'>name_sym</span><span class='rbracket'>]</span><span class='lbracket'>[</span><span class='id identifier rubyid_version'>version</span><span class='rbracket'>]</span>
1357
+ <span class='id identifier rubyid_log_unregistration'>log_unregistration</span><span class='lparen'>(</span><span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>task_handler</span><span class='tstring_end'>&#39;</span></span><span class='comma'>,</span> <span class='id identifier rubyid_entity_id'>entity_id</span><span class='comma'>,</span>
1358
+ <span class='id identifier rubyid_existing_class'>existing_class</span><span class='period'>.</span><span class='id identifier rubyid_is_a?'>is_a?</span><span class='lparen'>(</span><span class='const'>Class</span><span class='rparen'>)</span> <span class='op'>?</span> <span class='id identifier rubyid_existing_class'>existing_class</span> <span class='op'>:</span> <span class='id identifier rubyid_existing_class'>existing_class</span><span class='period'>.</span><span class='id identifier rubyid_constantize'>constantize</span><span class='rparen'>)</span>
1359
+ <span class='kw'>end</span>
1360
+
1361
+ <span class='comment'># Register handler
1362
+ </span> <span class='ivar'>@handler_classes</span><span class='lbracket'>[</span><span class='id identifier rubyid_namespace_name'>namespace_name</span><span class='rbracket'>]</span><span class='lbracket'>[</span><span class='id identifier rubyid_name_sym'>name_sym</span><span class='rbracket'>]</span><span class='lbracket'>[</span><span class='id identifier rubyid_version'>version</span><span class='rbracket'>]</span> <span class='op'>=</span> <span class='id identifier rubyid_normalized_class'>normalized_class</span>
1363
+ <span class='ivar'>@namespaces</span><span class='period'>.</span><span class='id identifier rubyid_add'>add</span><span class='lparen'>(</span><span class='id identifier rubyid_namespace_name'>namespace_name</span><span class='rparen'>)</span>
1364
+
1365
+ <span class='comment'># Log successful registration
1366
+ </span> <span class='id identifier rubyid_log_registration'>log_registration</span><span class='lparen'>(</span><span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>task_handler</span><span class='tstring_end'>&#39;</span></span><span class='comma'>,</span> <span class='id identifier rubyid_entity_id'>entity_id</span><span class='comma'>,</span>
1367
+ <span class='id identifier rubyid_normalized_class'>normalized_class</span><span class='period'>.</span><span class='id identifier rubyid_is_a?'>is_a?</span><span class='lparen'>(</span><span class='const'>Class</span><span class='rparen'>)</span> <span class='op'>?</span> <span class='id identifier rubyid_normalized_class'>normalized_class</span> <span class='op'>:</span> <span class='id identifier rubyid_normalized_class'>normalized_class</span><span class='period'>.</span><span class='id identifier rubyid_constantize'>constantize</span><span class='comma'>,</span>
1368
+ <span class='lbrace'>{</span> <span class='label'>namespace_name:</span> <span class='id identifier rubyid_namespace_name'>namespace_name</span><span class='comma'>,</span> <span class='label'>version:</span> <span class='id identifier rubyid_version'>version</span><span class='comma'>,</span> <span class='op'>**</span><span class='id identifier rubyid_options'>options</span> <span class='rbrace'>}</span><span class='rparen'>)</span>
1369
+
1370
+ <span class='kw'>true</span>
1371
+ <span class='kw'>end</span>
1372
+ <span class='kw'>end</span></pre>
1373
+ </td>
1374
+ </tr>
1375
+ </table>
1376
+ </div>
1377
+
1378
+ <div class="method_details ">
1379
+ <h3 class="signature " id="registered_namespaces-instance_method">
1380
+
1381
+ #<strong>registered_namespaces</strong> &#x21d2; <tt>Array&lt;Symbol&gt;</tt>
1382
+
1383
+
1384
+
1385
+
1386
+
1387
+ </h3><div class="docstring">
1388
+ <div class="discussion">
1389
+
1390
+ <p>Get list of all registered namespaces</p>
1391
+
1392
+
1393
+ </div>
1394
+ </div>
1395
+ <div class="tags">
1396
+
1397
+ <p class="tag_title">Returns:</p>
1398
+ <ul class="return">
1399
+
1400
+ <li>
1401
+
1402
+
1403
+ <span class='type'>(<tt>Array&lt;Symbol&gt;</tt>)</span>
1404
+
1405
+
1406
+
1407
+ &mdash;
1408
+ <div class='inline'>
1409
+ <p>Array of namespace symbols</p>
1410
+ </div>
1411
+
1412
+ </li>
1413
+
1414
+ </ul>
1415
+
1416
+ </div><table class="source_code">
1417
+ <tr>
1418
+ <td>
1419
+ <pre class="lines">
1420
+
1421
+
1422
+ 137
1423
+ 138
1424
+ 139</pre>
1425
+ </td>
1426
+ <td>
1427
+ <pre class="code"><span class="info file"># File 'lib/tasker/handler_factory.rb', line 137</span>
1428
+
1429
+ <span class='kw'>def</span> <span class='id identifier rubyid_registered_namespaces'>registered_namespaces</span>
1430
+ <span class='ivar'>@namespaces</span><span class='period'>.</span><span class='id identifier rubyid_to_a'>to_a</span>
1431
+ <span class='kw'>end</span></pre>
1432
+ </td>
1433
+ </tr>
1434
+ </table>
1435
+ </div>
1436
+
1437
+ <div class="method_details ">
1438
+ <h3 class="signature " id="stats-instance_method">
1439
+
1440
+ #<strong>stats</strong> &#x21d2; <tt>Hash</tt>
1441
+
1442
+
1443
+
1444
+
1445
+
1446
+ </h3><div class="docstring">
1447
+ <div class="discussion">
1448
+
1449
+ <p>Get comprehensive registry statistics</p>
1450
+
1451
+
1452
+ </div>
1453
+ </div>
1454
+ <div class="tags">
1455
+
1456
+ <p class="tag_title">Returns:</p>
1457
+ <ul class="return">
1458
+
1459
+ <li>
1460
+
1461
+
1462
+ <span class='type'>(<tt>Hash</tt>)</span>
1463
+
1464
+
1465
+
1466
+ &mdash;
1467
+ <div class='inline'>
1468
+ <p>Detailed statistics about the registry</p>
1469
+ </div>
1470
+
1471
+ </li>
1472
+
1473
+ </ul>
1474
+
1475
+ </div><table class="source_code">
1476
+ <tr>
1477
+ <td>
1478
+ <pre class="lines">
1479
+
1480
+
1481
+ 144
1482
+ 145
1483
+ 146
1484
+ 147
1485
+ 148
1486
+ 149
1487
+ 150
1488
+ 151</pre>
1489
+ </td>
1490
+ <td>
1491
+ <pre class="code"><span class="info file"># File 'lib/tasker/handler_factory.rb', line 144</span>
1492
+
1493
+ <span class='kw'>def</span> <span class='id identifier rubyid_stats'>stats</span>
1494
+ <span class='id identifier rubyid_base_stats'>base_stats</span><span class='period'>.</span><span class='id identifier rubyid_merge'>merge</span><span class='lparen'>(</span>
1495
+ <span class='label'>total_namespaces:</span> <span class='ivar'>@namespaces</span><span class='period'>.</span><span class='id identifier rubyid_size'>size</span><span class='comma'>,</span>
1496
+ <span class='label'>total_handlers:</span> <span class='id identifier rubyid_count_total_handlers'>count_total_handlers</span><span class='comma'>,</span>
1497
+ <span class='label'>handlers_by_namespace:</span> <span class='id identifier rubyid_count_handlers_by_namespace'>count_handlers_by_namespace</span><span class='comma'>,</span>
1498
+ <span class='label'>versions_by_namespace:</span> <span class='id identifier rubyid_count_versions_by_namespace'>count_versions_by_namespace</span>
1499
+ <span class='rparen'>)</span>
1500
+ <span class='kw'>end</span></pre>
1501
+ </td>
1502
+ </tr>
1503
+ </table>
1504
+ </div>
1505
+
1506
+ </div>
1507
+
1508
+ </div>
1509
+
1510
+ <div id="footer">
1511
+ Generated on Tue Jul 1 16:47:36 2025 by
1512
+ <a href="https://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
1513
+ 0.9.37 (ruby-3.2.4).
1514
+ </div>
1515
+
1516
+ </div>
1517
+ </body>
1518
+ </html>