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,1297 @@
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::CacheStrategy
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::CacheStrategy";
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 (C)</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">CacheStrategy</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::CacheStrategy
63
+
64
+
65
+
66
+ </h1>
67
+ <div class="box_info">
68
+
69
+ <dl>
70
+ <dt>Inherits:</dt>
71
+ <dd>
72
+ <span class="inheritName">Object</span>
73
+
74
+ <ul class="fullTree">
75
+ <li>Object</li>
76
+
77
+ <li class="next">Tasker::CacheStrategy</li>
78
+
79
+ </ul>
80
+ <a href="#" class="inheritanceTree">show all</a>
81
+
82
+ </dd>
83
+ </dl>
84
+
85
+
86
+
87
+
88
+
89
+
90
+ <dl>
91
+ <dt>Includes:</dt>
92
+ <dd><span class='object_link'><a href="Concerns/StructuredLogging.html" title="Tasker::Concerns::StructuredLogging (module)">Tasker::Concerns::StructuredLogging</a></span></dd>
93
+ </dl>
94
+
95
+
96
+
97
+
98
+
99
+
100
+ <dl>
101
+ <dt>Defined in:</dt>
102
+ <dd>lib/tasker/cache_strategy.rb</dd>
103
+ </dl>
104
+
105
+ </div>
106
+
107
+ <h2>Overview</h2><div class="docstring">
108
+ <div class="discussion">
109
+
110
+ <p>Unified cache capability detection and strategy management</p>
111
+
112
+ <p>This class consolidates cache store introspection from MetricsBackend and IntelligentCacheManager into a single, comprehensive system that:</p>
113
+ <ol><li>
114
+ <p>Detects capabilities of all major Rails cache stores</p>
115
+ </li><li>
116
+ <p>Supports Solid Cache and other modern Rails cache stores</p>
117
+ </li><li>
118
+ <p>Provides extensibility for custom cache implementations</p>
119
+ </li><li>
120
+ <p>Offers a consistent API for cache strategy selection</p>
121
+ </li></ol>
122
+
123
+ <p><strong>Phase 2.1.1 Enhancement: Hybrid Cache Store Detection System</strong> Combines frozen constants for built-in Rails cache stores with declared capabilities for custom cache stores, creating a robust and extensible architecture.</p>
124
+
125
+ <p>Detection Priority Order: 1. Declared capabilities (highest priority) - explicit developer declarations 2. Built-in store constants - fast, reliable detection for known stores 3. Custom detectors - pattern-based registration for legacy compatibility 4. Runtime detection - conservative fallback for unknown stores</p>
126
+
127
+
128
+ </div>
129
+ </div>
130
+ <div class="tags">
131
+
132
+ <div class="examples">
133
+ <h4 class="tag_title">Examples:</h4>
134
+
135
+
136
+ <h5 class="example_title"><div class='inline'>
137
+ <p>Basic usage</p>
138
+ </div></h5>
139
+
140
+ <pre class="example code"><code><span class='id identifier rubyid_strategy'>strategy</span> <span class='op'>=</span> <span class='const'><span class='object_link'><a href="../Tasker.html" title="Tasker (module)">Tasker</a></span></span><span class='op'>::</span><span class='const'>CacheStrategy</span><span class='period'>.</span><span class='id identifier rubyid_detect'><span class='object_link'><a href="#detect-class_method" title="Tasker::CacheStrategy.detect (method)">detect</a></span></span>
141
+ <span class='id identifier rubyid_strategy'>strategy</span><span class='period'>.</span><span class='id identifier rubyid_coordination_mode'>coordination_mode</span> <span class='comment'># =&gt; :distributed_atomic
142
+ </span><span class='id identifier rubyid_strategy'>strategy</span><span class='period'>.</span><span class='id identifier rubyid_supports?'>supports?</span><span class='lparen'>(</span><span class='symbol'>:locking</span><span class='rparen'>)</span> <span class='comment'># =&gt; true</span></code></pre>
143
+
144
+
145
+ <h5 class="example_title"><div class='inline'>
146
+ <p>Custom detector registration</p>
147
+ </div></h5>
148
+
149
+ <pre class="example code"><code><span class='const'><span class='object_link'><a href="../Tasker.html" title="Tasker (module)">Tasker</a></span></span><span class='op'>::</span><span class='const'>CacheStrategy</span><span class='period'>.</span><span class='id identifier rubyid_register_detector'><span class='object_link'><a href="#register_detector-class_method" title="Tasker::CacheStrategy.register_detector (method)">register_detector</a></span></span><span class='lparen'>(</span><span class='tstring'><span class='regexp_beg'>/</span><span class='tstring_content'>MyCache</span><span class='regexp_end'>/</span></span><span class='comma'>,</span> <span class='tlambda'>-&gt;</span><span class='lparen'>(</span><span class='id identifier rubyid_store'>store</span><span class='rparen'>)</span> <span class='tlambeg'>{</span>
150
+ <span class='lbrace'>{</span> <span class='label'>distributed:</span> <span class='kw'>true</span><span class='comma'>,</span> <span class='label'>custom_feature:</span> <span class='kw'>true</span> <span class='rbrace'>}</span>
151
+ <span class='rbrace'>}</span><span class='rparen'>)</span></code></pre>
152
+
153
+
154
+ <h5 class="example_title"><div class='inline'>
155
+ <p>Custom cache store with capabilities</p>
156
+ </div></h5>
157
+
158
+ <pre class="example code"><code><span class='kw'>class</span> <span class='const'>MyAwesomeCacheStore</span> <span class='op'>&lt;</span> <span class='const'>ActiveSupport</span><span class='op'>::</span><span class='const'>Cache</span><span class='op'>::</span><span class='const'>Store</span>
159
+ <span class='id identifier rubyid_include'>include</span> <span class='const'><span class='object_link'><a href="../Tasker.html" title="Tasker (module)">Tasker</a></span></span><span class='op'>::</span><span class='const'><span class='object_link'><a href="CacheCapabilities.html" title="Tasker::CacheCapabilities (module)">CacheCapabilities</a></span></span>
160
+ <span class='id identifier rubyid_supports_distributed_caching!'>supports_distributed_caching!</span>
161
+ <span class='id identifier rubyid_supports_atomic_increment!'>supports_atomic_increment!</span>
162
+ <span class='kw'>end</span>
163
+
164
+ <span class='comment'># Configure Rails to use your custom store
165
+ </span><span class='const'>Rails</span><span class='period'>.</span><span class='id identifier rubyid_application'>application</span><span class='period'>.</span><span class='id identifier rubyid_configure'>configure</span> <span class='kw'>do</span>
166
+ <span class='id identifier rubyid_config'>config</span><span class='period'>.</span><span class='id identifier rubyid_cache_store'>cache_store</span> <span class='op'>=</span> <span class='const'>MyAwesomeCacheStore</span><span class='period'>.</span><span class='id identifier rubyid_new'>new</span>
167
+ <span class='kw'>end</span></code></pre>
168
+
169
+
170
+ <h5 class="example_title"><div class='inline'>
171
+ <p>Direct instantiation</p>
172
+ </div></h5>
173
+
174
+ <pre class="example code"><code><span class='id identifier rubyid_strategy'>strategy</span> <span class='op'>=</span> <span class='const'><span class='object_link'><a href="../Tasker.html" title="Tasker (module)">Tasker</a></span></span><span class='op'>::</span><span class='const'>CacheStrategy</span><span class='period'>.</span><span class='id identifier rubyid_new'><span class='object_link'><a href="#initialize-instance_method" title="Tasker::CacheStrategy#initialize (method)">new</a></span></span></code></pre>
175
+
176
+ </div>
177
+
178
+
179
+ </div>
180
+
181
+ <h2>
182
+ Constant Summary
183
+ <small><a href="#" class="constants_summary_toggle">collapse</a></small>
184
+ </h2>
185
+
186
+ <dl class="constants">
187
+
188
+ <dt id="COORDINATION_STRATEGIES-constant" class="">COORDINATION_STRATEGIES =
189
+ <div class="docstring">
190
+ <div class="discussion">
191
+
192
+ <p>Cache store coordination strategies</p>
193
+
194
+
195
+ </div>
196
+ </div>
197
+ <div class="tags">
198
+
199
+
200
+ </div>
201
+ </dt>
202
+ <dd><pre class="code"><span class='lbrace'>{</span>
203
+ <span class='label'>distributed_atomic:</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>Full distributed coordination with atomic operations</span><span class='tstring_end'>&#39;</span></span><span class='comma'>,</span>
204
+ <span class='label'>distributed_basic:</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>Basic distributed coordination with read-modify-write</span><span class='tstring_end'>&#39;</span></span><span class='comma'>,</span>
205
+ <span class='label'>local_only:</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>Local-only coordination for single-process deployments</span><span class='tstring_end'>&#39;</span></span>
206
+ <span class='rbrace'>}</span><span class='period'>.</span><span class='id identifier rubyid_freeze'>freeze</span></pre></dd>
207
+
208
+ <dt id="DISTRIBUTED_CACHE_STORES-constant" class="">DISTRIBUTED_CACHE_STORES =
209
+ <div class="docstring">
210
+ <div class="discussion">
211
+
212
+ <p>✅ CONSTANTS: Official Rails cache store class names (validated against Rails 8.0+ docs) These provide O(1) lookup performance for built-in Rails cache stores</p>
213
+
214
+
215
+ </div>
216
+ </div>
217
+ <div class="tags">
218
+
219
+
220
+ </div>
221
+ </dt>
222
+ <dd><pre class="code"><span class='qwords_beg'>%w[</span><span class='words_sep'>
223
+ </span><span class='tstring_content'>ActiveSupport::Cache::RedisCacheStore</span><span class='words_sep'>
224
+ </span><span class='tstring_content'>ActiveSupport::Cache::MemCacheStore</span><span class='words_sep'>
225
+ </span><span class='tstring_content'>SolidCache::Store</span><span class='words_sep'>
226
+ </span><span class='tstring_end'>]</span></span><span class='period'>.</span><span class='id identifier rubyid_freeze'>freeze</span></pre></dd>
227
+
228
+ <dt id="ATOMIC_INCREMENT_STORES-constant" class="">ATOMIC_INCREMENT_STORES =
229
+
230
+ </dt>
231
+ <dd><pre class="code"><span class='qwords_beg'>%w[</span><span class='words_sep'>
232
+ </span><span class='tstring_content'>ActiveSupport::Cache::RedisCacheStore</span><span class='words_sep'>
233
+ </span><span class='tstring_content'>ActiveSupport::Cache::MemCacheStore</span><span class='words_sep'>
234
+ </span><span class='tstring_content'>SolidCache::Store</span><span class='words_sep'>
235
+ </span><span class='tstring_end'>]</span></span><span class='period'>.</span><span class='id identifier rubyid_freeze'>freeze</span></pre></dd>
236
+
237
+ <dt id="LOCKING_CAPABLE_STORES-constant" class="">LOCKING_CAPABLE_STORES =
238
+
239
+ </dt>
240
+ <dd><pre class="code"><span class='qwords_beg'>%w[</span><span class='words_sep'>
241
+ </span><span class='tstring_content'>ActiveSupport::Cache::RedisCacheStore</span><span class='words_sep'>
242
+ </span><span class='tstring_content'>SolidCache::Store</span><span class='words_sep'>
243
+ </span><span class='tstring_end'>]</span></span><span class='period'>.</span><span class='id identifier rubyid_freeze'>freeze</span></pre></dd>
244
+
245
+ <dt id="LOCAL_CACHE_STORES-constant" class="">LOCAL_CACHE_STORES =
246
+
247
+ </dt>
248
+ <dd><pre class="code"><span class='qwords_beg'>%w[</span><span class='words_sep'>
249
+ </span><span class='tstring_content'>ActiveSupport::Cache::MemoryStore</span><span class='words_sep'>
250
+ </span><span class='tstring_content'>ActiveSupport::Cache::FileStore</span><span class='words_sep'>
251
+ </span><span class='tstring_content'>ActiveSupport::Cache::NullStore</span><span class='words_sep'>
252
+ </span><span class='tstring_end'>]</span></span><span class='period'>.</span><span class='id identifier rubyid_freeze'>freeze</span></pre></dd>
253
+
254
+ </dl>
255
+
256
+
257
+
258
+
259
+
260
+
261
+ <h3 class="inherited">Constants included
262
+ from <span class='object_link'><a href="Concerns/StructuredLogging.html" title="Tasker::Concerns::StructuredLogging (module)">Tasker::Concerns::StructuredLogging</a></span></h3>
263
+ <p class="inherited"><span class='object_link'><a href="Concerns/StructuredLogging.html#CORRELATION_ID_KEY-constant" title="Tasker::Concerns::StructuredLogging::CORRELATION_ID_KEY (constant)">Tasker::Concerns::StructuredLogging::CORRELATION_ID_KEY</a></span></p>
264
+
265
+
266
+ <h2>Instance Attribute Summary <small><a href="#" class="summary_toggle">collapse</a></small></h2>
267
+ <ul class="summary">
268
+
269
+ <li class="public ">
270
+ <span class="summary_signature">
271
+
272
+ <a href="#capabilities-instance_method" title="#capabilities (instance method)">#<strong>capabilities</strong> &#x21d2; Object </a>
273
+
274
+
275
+
276
+ </span>
277
+
278
+
279
+
280
+
281
+ <span class="note title readonly">readonly</span>
282
+
283
+
284
+
285
+
286
+
287
+
288
+
289
+
290
+
291
+ <span class="summary_desc"><div class='inline'>
292
+ <p>Returns the value of attribute capabilities.</p>
293
+ </div></span>
294
+
295
+ </li>
296
+
297
+
298
+ <li class="public ">
299
+ <span class="summary_signature">
300
+
301
+ <a href="#coordination_mode-instance_method" title="#coordination_mode (instance method)">#<strong>coordination_mode</strong> &#x21d2; Object </a>
302
+
303
+
304
+
305
+ </span>
306
+
307
+
308
+
309
+
310
+ <span class="note title readonly">readonly</span>
311
+
312
+
313
+
314
+
315
+
316
+
317
+
318
+
319
+
320
+ <span class="summary_desc"><div class='inline'>
321
+ <p>Returns the value of attribute coordination_mode.</p>
322
+ </div></span>
323
+
324
+ </li>
325
+
326
+
327
+ <li class="public ">
328
+ <span class="summary_signature">
329
+
330
+ <a href="#instance_id-instance_method" title="#instance_id (instance method)">#<strong>instance_id</strong> &#x21d2; Object </a>
331
+
332
+
333
+
334
+ </span>
335
+
336
+
337
+
338
+
339
+ <span class="note title readonly">readonly</span>
340
+
341
+
342
+
343
+
344
+
345
+
346
+
347
+
348
+
349
+ <span class="summary_desc"><div class='inline'>
350
+ <p>Returns the value of attribute instance_id.</p>
351
+ </div></span>
352
+
353
+ </li>
354
+
355
+
356
+ <li class="public ">
357
+ <span class="summary_signature">
358
+
359
+ <a href="#store-instance_method" title="#store (instance method)">#<strong>store</strong> &#x21d2; Object </a>
360
+
361
+
362
+
363
+ </span>
364
+
365
+
366
+
367
+
368
+ <span class="note title readonly">readonly</span>
369
+
370
+
371
+
372
+
373
+
374
+
375
+
376
+
377
+
378
+ <span class="summary_desc"><div class='inline'>
379
+ <p>Returns the value of attribute store.</p>
380
+ </div></span>
381
+
382
+ </li>
383
+
384
+
385
+ <li class="public ">
386
+ <span class="summary_signature">
387
+
388
+ <a href="#store_class_name-instance_method" title="#store_class_name (instance method)">#<strong>store_class_name</strong> &#x21d2; Object </a>
389
+
390
+
391
+
392
+ </span>
393
+
394
+
395
+
396
+
397
+ <span class="note title readonly">readonly</span>
398
+
399
+
400
+
401
+
402
+
403
+
404
+
405
+
406
+
407
+ <span class="summary_desc"><div class='inline'>
408
+ <p>Returns the value of attribute store_class_name.</p>
409
+ </div></span>
410
+
411
+ </li>
412
+
413
+
414
+ </ul>
415
+
416
+
417
+
418
+
419
+
420
+ <h2>
421
+ Class Method Summary
422
+ <small><a href="#" class="summary_toggle">collapse</a></small>
423
+ </h2>
424
+
425
+ <ul class="summary">
426
+
427
+ <li class="public ">
428
+ <span class="summary_signature">
429
+
430
+ <a href="#clear_detectors!-class_method" title="clear_detectors! (class method)">.<strong>clear_detectors!</strong> &#x21d2; Object </a>
431
+
432
+
433
+
434
+ </span>
435
+
436
+
437
+
438
+
439
+
440
+
441
+
442
+
443
+
444
+ <span class="summary_desc"><div class='inline'>
445
+ <p>Clear all registered detectors (primarily for testing).</p>
446
+ </div></span>
447
+
448
+ </li>
449
+
450
+
451
+ <li class="public ">
452
+ <span class="summary_signature">
453
+
454
+ <a href="#detect-class_method" title="detect (class method)">.<strong>detect</strong> &#x21d2; Tasker::CacheStrategy </a>
455
+
456
+
457
+
458
+ </span>
459
+
460
+
461
+
462
+
463
+
464
+
465
+
466
+
467
+
468
+ <span class="summary_desc"><div class='inline'>
469
+ <p>Detect cache strategy for the current Rails.cache store.</p>
470
+ </div></span>
471
+
472
+ </li>
473
+
474
+
475
+ <li class="public ">
476
+ <span class="summary_signature">
477
+
478
+ <a href="#register_detector-class_method" title="register_detector (class method)">.<strong>register_detector</strong>(pattern, detector) &#x21d2; Object </a>
479
+
480
+
481
+
482
+ </span>
483
+
484
+
485
+
486
+
487
+
488
+
489
+
490
+
491
+
492
+ <span class="summary_desc"><div class='inline'>
493
+ <p>Register a custom cache store detector.</p>
494
+ </div></span>
495
+
496
+ </li>
497
+
498
+
499
+ </ul>
500
+
501
+ <h2>
502
+ Instance Method Summary
503
+ <small><a href="#" class="summary_toggle">collapse</a></small>
504
+ </h2>
505
+
506
+ <ul class="summary">
507
+
508
+ <li class="public ">
509
+ <span class="summary_signature">
510
+
511
+ <a href="#export_capabilities-instance_method" title="#export_capabilities (instance method)">#<strong>export_capabilities</strong> &#x21d2; Hash </a>
512
+
513
+
514
+
515
+ </span>
516
+
517
+
518
+
519
+
520
+
521
+
522
+
523
+
524
+
525
+ <span class="summary_desc"><div class='inline'>
526
+ <p>Export capabilities for backward compatibility.</p>
527
+ </div></span>
528
+
529
+ </li>
530
+
531
+
532
+ <li class="public ">
533
+ <span class="summary_signature">
534
+
535
+ <a href="#initialize-instance_method" title="#initialize (instance method)">#<strong>initialize</strong> &#x21d2; CacheStrategy </a>
536
+
537
+
538
+
539
+ </span>
540
+
541
+
542
+ <span class="note title constructor">constructor</span>
543
+
544
+
545
+
546
+
547
+
548
+
549
+
550
+
551
+ <span class="summary_desc"><div class='inline'>
552
+ <p>Create a strategy for the current Rails.cache store.</p>
553
+ </div></span>
554
+
555
+ </li>
556
+
557
+
558
+ <li class="public ">
559
+ <span class="summary_signature">
560
+
561
+ <a href="#supports%3F-instance_method" title="#supports? (instance method)">#<strong>supports?</strong>(capability) &#x21d2; Boolean </a>
562
+
563
+
564
+
565
+ </span>
566
+
567
+
568
+
569
+
570
+
571
+
572
+
573
+
574
+
575
+ <span class="summary_desc"><div class='inline'>
576
+ <p>Check if store supports a specific capability.</p>
577
+ </div></span>
578
+
579
+ </li>
580
+
581
+
582
+ </ul>
583
+
584
+
585
+
586
+
587
+
588
+
589
+
590
+
591
+
592
+
593
+
594
+ <h3 class="inherited">Methods included from <span class='object_link'><a href="Concerns/StructuredLogging.html" title="Tasker::Concerns::StructuredLogging (module)">Tasker::Concerns::StructuredLogging</a></span></h3>
595
+ <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>
596
+
597
+ <div id="constructor_details" class="method_details_list">
598
+ <h2>Constructor Details</h2>
599
+
600
+ <div class="method_details first">
601
+ <h3 class="signature first" id="initialize-instance_method">
602
+
603
+ #<strong>initialize</strong> &#x21d2; <tt><span class='object_link'><a href="" title="Tasker::CacheStrategy (class)">CacheStrategy</a></span></tt>
604
+
605
+
606
+
607
+
608
+
609
+ </h3><div class="docstring">
610
+ <div class="discussion">
611
+
612
+ <p>Create a strategy for the current Rails.cache store</p>
613
+
614
+ <p>The cache strategy always analyzes Rails.cache, which is the single source of truth for caching in Rails applications. Custom cache stores should be configured through Rails.cache and declare their capabilities via the CacheCapabilities module.</p>
615
+
616
+
617
+ </div>
618
+ </div>
619
+ <div class="tags">
620
+
621
+
622
+ </div><table class="source_code">
623
+ <tr>
624
+ <td>
625
+ <pre class="lines">
626
+
627
+
628
+ 114
629
+ 115
630
+ 116
631
+ 117
632
+ 118
633
+ 119
634
+ 120
635
+ 121
636
+ 122
637
+ 123
638
+ 124
639
+ 125
640
+ 126
641
+ 127
642
+ 128
643
+ 129
644
+ 130
645
+ 131
646
+ 132
647
+ 133
648
+ 134
649
+ 135
650
+ 136
651
+ 137
652
+ 138
653
+ 139
654
+ 140
655
+ 141
656
+ 142
657
+ 143
658
+ 144
659
+ 145
660
+ 146
661
+ 147
662
+ 148
663
+ 149
664
+ 150
665
+ 151
666
+ 152
667
+ 153
668
+ 154
669
+ 155
670
+ 156
671
+ 157
672
+ 158
673
+ 159
674
+ 160
675
+ 161
676
+ 162
677
+ 163</pre>
678
+ </td>
679
+ <td>
680
+ <pre class="code"><span class="info file"># File 'lib/tasker/cache_strategy.rb', line 114</span>
681
+
682
+ <span class='kw'>def</span> <span class='id identifier rubyid_initialize'>initialize</span>
683
+ <span class='ivar'>@detector_registry</span> <span class='op'>=</span> <span class='const'><span class='object_link'><a href="DetectorRegistry.html" title="Tasker::DetectorRegistry (class)">DetectorRegistry</a></span></span><span class='period'>.</span><span class='id identifier rubyid_instance'>instance</span>
684
+ <span class='ivar'>@instance_id</span> <span class='op'>=</span> <span class='id identifier rubyid_generate_instance_id'>generate_instance_id</span>
685
+
686
+ <span class='comment'># Handle Rails.cache unavailability gracefully
687
+ </span> <span class='kw'>begin</span>
688
+ <span class='ivar'>@store</span> <span class='op'>=</span> <span class='const'>Rails</span><span class='period'>.</span><span class='id identifier rubyid_cache'>cache</span>
689
+ <span class='ivar'>@store_class_name</span> <span class='op'>=</span> <span class='ivar'>@store</span><span class='period'>.</span><span class='id identifier rubyid_class'>class</span><span class='period'>.</span><span class='id identifier rubyid_name'>name</span>
690
+ <span class='kw'>rescue</span> <span class='const'>StandardError</span> <span class='op'>=&gt;</span> <span class='id identifier rubyid_e'>e</span>
691
+ <span class='id identifier rubyid_log_structured'>log_structured</span><span class='lparen'>(</span><span class='symbol'>:warn</span><span class='comma'>,</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>Rails.cache unavailable, using fallback configuration</span><span class='tstring_end'>&#39;</span></span><span class='comma'>,</span>
692
+ <span class='label'>error:</span> <span class='id identifier rubyid_e'>e</span><span class='period'>.</span><span class='id identifier rubyid_message'>message</span><span class='comma'>,</span>
693
+ <span class='label'>instance_id:</span> <span class='ivar'>@instance_id</span><span class='rparen'>)</span>
694
+ <span class='ivar'>@store</span> <span class='op'>=</span> <span class='kw'>nil</span>
695
+ <span class='ivar'>@store_class_name</span> <span class='op'>=</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>Unknown</span><span class='tstring_end'>&#39;</span></span>
696
+ <span class='ivar'>@capabilities</span> <span class='op'>=</span> <span class='id identifier rubyid_default_capabilities'>default_capabilities</span>
697
+ <span class='ivar'>@coordination_mode</span> <span class='op'>=</span> <span class='symbol'>:local_only</span>
698
+ <span class='kw'>return</span>
699
+ <span class='kw'>end</span>
700
+
701
+ <span class='comment'># Generate cache key that includes store configuration
702
+ </span> <span class='id identifier rubyid_cache_key'>cache_key</span> <span class='op'>=</span> <span class='id identifier rubyid_generate_cache_key'>generate_cache_key</span><span class='lparen'>(</span><span class='ivar'>@store</span><span class='comma'>,</span> <span class='ivar'>@store_class_name</span><span class='rparen'>)</span>
703
+
704
+ <span class='comment'># Check for cached strategy first
705
+ </span> <span class='id identifier rubyid_cached'>cached</span> <span class='op'>=</span> <span class='ivar'>@detector_registry</span><span class='period'>.</span><span class='id identifier rubyid_cached_strategy_for'>cached_strategy_for</span><span class='lparen'>(</span><span class='id identifier rubyid_cache_key'>cache_key</span><span class='rparen'>)</span>
706
+ <span class='kw'>if</span> <span class='id identifier rubyid_cached'>cached</span>
707
+ <span class='ivar'>@capabilities</span> <span class='op'>=</span> <span class='id identifier rubyid_cached'>cached</span><span class='period'>.</span><span class='id identifier rubyid_capabilities'>capabilities</span>
708
+ <span class='ivar'>@coordination_mode</span> <span class='op'>=</span> <span class='id identifier rubyid_cached'>cached</span><span class='period'>.</span><span class='id identifier rubyid_coordination_mode'>coordination_mode</span>
709
+ <span class='kw'>else</span>
710
+ <span class='comment'># Detect capabilities with error handling
711
+ </span> <span class='kw'>begin</span>
712
+ <span class='ivar'>@capabilities</span> <span class='op'>=</span> <span class='id identifier rubyid_detect_capabilities'>detect_capabilities</span>
713
+ <span class='ivar'>@coordination_mode</span> <span class='op'>=</span> <span class='id identifier rubyid_select_coordination_strategy'>select_coordination_strategy</span>
714
+
715
+ <span class='comment'># Cache this strategy instance
716
+ </span> <span class='ivar'>@detector_registry</span><span class='period'>.</span><span class='id identifier rubyid_cache_strategy_for'>cache_strategy_for</span><span class='lparen'>(</span><span class='id identifier rubyid_cache_key'>cache_key</span><span class='comma'>,</span> <span class='kw'>self</span><span class='rparen'>)</span>
717
+ <span class='kw'>rescue</span> <span class='const'>StandardError</span> <span class='op'>=&gt;</span> <span class='id identifier rubyid_e'>e</span>
718
+ <span class='id identifier rubyid_log_structured'>log_structured</span><span class='lparen'>(</span><span class='symbol'>:warn</span><span class='comma'>,</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>Cache detection failed</span><span class='tstring_end'>&#39;</span></span><span class='comma'>,</span>
719
+ <span class='label'>error:</span> <span class='id identifier rubyid_e'>e</span><span class='period'>.</span><span class='id identifier rubyid_message'>message</span><span class='comma'>,</span>
720
+ <span class='label'>store_class:</span> <span class='ivar'>@store_class_name</span><span class='comma'>,</span>
721
+ <span class='label'>instance_id:</span> <span class='ivar'>@instance_id</span><span class='rparen'>)</span>
722
+ <span class='id identifier rubyid_log_structured'>log_structured</span><span class='lparen'>(</span><span class='symbol'>:warn</span><span class='comma'>,</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>Falling back to local-only mode</span><span class='tstring_end'>&#39;</span></span><span class='rparen'>)</span>
723
+ <span class='ivar'>@store_class_name</span> <span class='op'>=</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>Unknown</span><span class='tstring_end'>&#39;</span></span>
724
+ <span class='ivar'>@capabilities</span> <span class='op'>=</span> <span class='id identifier rubyid_default_capabilities'>default_capabilities</span>
725
+ <span class='ivar'>@coordination_mode</span> <span class='op'>=</span> <span class='symbol'>:local_only</span>
726
+ <span class='kw'>return</span>
727
+ <span class='kw'>end</span>
728
+ <span class='kw'>end</span>
729
+
730
+ <span class='id identifier rubyid_log_strategy_detection'>log_strategy_detection</span>
731
+ <span class='kw'>end</span></pre>
732
+ </td>
733
+ </tr>
734
+ </table>
735
+ </div>
736
+
737
+ </div>
738
+
739
+ <div id="instance_attr_details" class="attr_details">
740
+ <h2>Instance Attribute Details</h2>
741
+
742
+
743
+ <span id=""></span>
744
+ <div class="method_details first">
745
+ <h3 class="signature first" id="capabilities-instance_method">
746
+
747
+ #<strong>capabilities</strong> &#x21d2; <tt>Object</tt> <span class="extras">(readonly)</span>
748
+
749
+
750
+
751
+
752
+
753
+ </h3><div class="docstring">
754
+ <div class="discussion">
755
+
756
+ <p>Returns the value of attribute capabilities.</p>
757
+
758
+
759
+ </div>
760
+ </div>
761
+ <div class="tags">
762
+
763
+
764
+ </div><table class="source_code">
765
+ <tr>
766
+ <td>
767
+ <pre class="lines">
768
+
769
+
770
+ 86
771
+ 87
772
+ 88</pre>
773
+ </td>
774
+ <td>
775
+ <pre class="code"><span class="info file"># File 'lib/tasker/cache_strategy.rb', line 86</span>
776
+
777
+ <span class='kw'>def</span> <span class='id identifier rubyid_capabilities'>capabilities</span>
778
+ <span class='ivar'>@capabilities</span>
779
+ <span class='kw'>end</span></pre>
780
+ </td>
781
+ </tr>
782
+ </table>
783
+ </div>
784
+
785
+
786
+ <span id=""></span>
787
+ <div class="method_details ">
788
+ <h3 class="signature " id="coordination_mode-instance_method">
789
+
790
+ #<strong>coordination_mode</strong> &#x21d2; <tt>Object</tt> <span class="extras">(readonly)</span>
791
+
792
+
793
+
794
+
795
+
796
+ </h3><div class="docstring">
797
+ <div class="discussion">
798
+
799
+ <p>Returns the value of attribute coordination_mode.</p>
800
+
801
+
802
+ </div>
803
+ </div>
804
+ <div class="tags">
805
+
806
+
807
+ </div><table class="source_code">
808
+ <tr>
809
+ <td>
810
+ <pre class="lines">
811
+
812
+
813
+ 86
814
+ 87
815
+ 88</pre>
816
+ </td>
817
+ <td>
818
+ <pre class="code"><span class="info file"># File 'lib/tasker/cache_strategy.rb', line 86</span>
819
+
820
+ <span class='kw'>def</span> <span class='id identifier rubyid_coordination_mode'>coordination_mode</span>
821
+ <span class='ivar'>@coordination_mode</span>
822
+ <span class='kw'>end</span></pre>
823
+ </td>
824
+ </tr>
825
+ </table>
826
+ </div>
827
+
828
+
829
+ <span id=""></span>
830
+ <div class="method_details ">
831
+ <h3 class="signature " id="instance_id-instance_method">
832
+
833
+ #<strong>instance_id</strong> &#x21d2; <tt>Object</tt> <span class="extras">(readonly)</span>
834
+
835
+
836
+
837
+
838
+
839
+ </h3><div class="docstring">
840
+ <div class="discussion">
841
+
842
+ <p>Returns the value of attribute instance_id.</p>
843
+
844
+
845
+ </div>
846
+ </div>
847
+ <div class="tags">
848
+
849
+
850
+ </div><table class="source_code">
851
+ <tr>
852
+ <td>
853
+ <pre class="lines">
854
+
855
+
856
+ 86
857
+ 87
858
+ 88</pre>
859
+ </td>
860
+ <td>
861
+ <pre class="code"><span class="info file"># File 'lib/tasker/cache_strategy.rb', line 86</span>
862
+
863
+ <span class='kw'>def</span> <span class='id identifier rubyid_instance_id'>instance_id</span>
864
+ <span class='ivar'>@instance_id</span>
865
+ <span class='kw'>end</span></pre>
866
+ </td>
867
+ </tr>
868
+ </table>
869
+ </div>
870
+
871
+
872
+ <span id=""></span>
873
+ <div class="method_details ">
874
+ <h3 class="signature " id="store-instance_method">
875
+
876
+ #<strong>store</strong> &#x21d2; <tt>Object</tt> <span class="extras">(readonly)</span>
877
+
878
+
879
+
880
+
881
+
882
+ </h3><div class="docstring">
883
+ <div class="discussion">
884
+
885
+ <p>Returns the value of attribute store.</p>
886
+
887
+
888
+ </div>
889
+ </div>
890
+ <div class="tags">
891
+
892
+
893
+ </div><table class="source_code">
894
+ <tr>
895
+ <td>
896
+ <pre class="lines">
897
+
898
+
899
+ 86
900
+ 87
901
+ 88</pre>
902
+ </td>
903
+ <td>
904
+ <pre class="code"><span class="info file"># File 'lib/tasker/cache_strategy.rb', line 86</span>
905
+
906
+ <span class='kw'>def</span> <span class='id identifier rubyid_store'>store</span>
907
+ <span class='ivar'>@store</span>
908
+ <span class='kw'>end</span></pre>
909
+ </td>
910
+ </tr>
911
+ </table>
912
+ </div>
913
+
914
+
915
+ <span id=""></span>
916
+ <div class="method_details ">
917
+ <h3 class="signature " id="store_class_name-instance_method">
918
+
919
+ #<strong>store_class_name</strong> &#x21d2; <tt>Object</tt> <span class="extras">(readonly)</span>
920
+
921
+
922
+
923
+
924
+
925
+ </h3><div class="docstring">
926
+ <div class="discussion">
927
+
928
+ <p>Returns the value of attribute store_class_name.</p>
929
+
930
+
931
+ </div>
932
+ </div>
933
+ <div class="tags">
934
+
935
+
936
+ </div><table class="source_code">
937
+ <tr>
938
+ <td>
939
+ <pre class="lines">
940
+
941
+
942
+ 86
943
+ 87
944
+ 88</pre>
945
+ </td>
946
+ <td>
947
+ <pre class="code"><span class="info file"># File 'lib/tasker/cache_strategy.rb', line 86</span>
948
+
949
+ <span class='kw'>def</span> <span class='id identifier rubyid_store_class_name'>store_class_name</span>
950
+ <span class='ivar'>@store_class_name</span>
951
+ <span class='kw'>end</span></pre>
952
+ </td>
953
+ </tr>
954
+ </table>
955
+ </div>
956
+
957
+ </div>
958
+
959
+
960
+ <div id="class_method_details" class="method_details_list">
961
+ <h2>Class Method Details</h2>
962
+
963
+
964
+ <div class="method_details first">
965
+ <h3 class="signature first" id="clear_detectors!-class_method">
966
+
967
+ .<strong>clear_detectors!</strong> &#x21d2; <tt>Object</tt>
968
+
969
+
970
+
971
+
972
+
973
+ </h3><div class="docstring">
974
+ <div class="discussion">
975
+
976
+ <p>Clear all registered detectors (primarily for testing)</p>
977
+
978
+
979
+ </div>
980
+ </div>
981
+ <div class="tags">
982
+
983
+
984
+ </div><table class="source_code">
985
+ <tr>
986
+ <td>
987
+ <pre class="lines">
988
+
989
+
990
+ 104
991
+ 105
992
+ 106</pre>
993
+ </td>
994
+ <td>
995
+ <pre class="code"><span class="info file"># File 'lib/tasker/cache_strategy.rb', line 104</span>
996
+
997
+ <span class='kw'>def</span> <span class='kw'>self</span><span class='period'>.</span><span class='id identifier rubyid_clear_detectors!'>clear_detectors!</span>
998
+ <span class='const'><span class='object_link'><a href="DetectorRegistry.html" title="Tasker::DetectorRegistry (class)">DetectorRegistry</a></span></span><span class='period'>.</span><span class='id identifier rubyid_instance'>instance</span><span class='period'>.</span><span class='id identifier rubyid_clear_detectors!'>clear_detectors!</span>
999
+ <span class='kw'>end</span></pre>
1000
+ </td>
1001
+ </tr>
1002
+ </table>
1003
+ </div>
1004
+
1005
+ <div class="method_details ">
1006
+ <h3 class="signature " id="detect-class_method">
1007
+
1008
+ .<strong>detect</strong> &#x21d2; <tt><span class='object_link'><a href="" title="Tasker::CacheStrategy (class)">Tasker::CacheStrategy</a></span></tt>
1009
+
1010
+
1011
+
1012
+
1013
+
1014
+ </h3><div class="docstring">
1015
+ <div class="discussion">
1016
+
1017
+ <p>Detect cache strategy for the current Rails.cache store</p>
1018
+
1019
+
1020
+ </div>
1021
+ </div>
1022
+ <div class="tags">
1023
+
1024
+ <p class="tag_title">Returns:</p>
1025
+ <ul class="return">
1026
+
1027
+ <li>
1028
+
1029
+
1030
+ <span class='type'>(<tt><span class='object_link'><a href="" title="Tasker::CacheStrategy (class)">Tasker::CacheStrategy</a></span></tt>)</span>
1031
+
1032
+
1033
+
1034
+ &mdash;
1035
+ <div class='inline'>
1036
+ <p>Strategy instance for Rails.cache</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
+ 91
1050
+ 92
1051
+ 93</pre>
1052
+ </td>
1053
+ <td>
1054
+ <pre class="code"><span class="info file"># File 'lib/tasker/cache_strategy.rb', line 91</span>
1055
+
1056
+ <span class='kw'>def</span> <span class='kw'>self</span><span class='period'>.</span><span class='id identifier rubyid_detect'>detect</span>
1057
+ <span class='id identifier rubyid_new'>new</span>
1058
+ <span class='kw'>end</span></pre>
1059
+ </td>
1060
+ </tr>
1061
+ </table>
1062
+ </div>
1063
+
1064
+ <div class="method_details ">
1065
+ <h3 class="signature " id="register_detector-class_method">
1066
+
1067
+ .<strong>register_detector</strong>(pattern, detector) &#x21d2; <tt>Object</tt>
1068
+
1069
+
1070
+
1071
+
1072
+
1073
+ </h3><div class="docstring">
1074
+ <div class="discussion">
1075
+
1076
+ <p>Register a custom cache store detector</p>
1077
+
1078
+
1079
+ </div>
1080
+ </div>
1081
+ <div class="tags">
1082
+ <p class="tag_title">Parameters:</p>
1083
+ <ul class="param">
1084
+
1085
+ <li>
1086
+
1087
+ <span class='name'>pattern</span>
1088
+
1089
+
1090
+ <span class='type'>(<tt>Regexp</tt>, <tt>String</tt>)</span>
1091
+
1092
+
1093
+
1094
+ &mdash;
1095
+ <div class='inline'>
1096
+ <p>Pattern to match store class names</p>
1097
+ </div>
1098
+
1099
+ </li>
1100
+
1101
+ <li>
1102
+
1103
+ <span class='name'>detector</span>
1104
+
1105
+
1106
+ <span class='type'>(<tt>Proc</tt>)</span>
1107
+
1108
+
1109
+
1110
+ &mdash;
1111
+ <div class='inline'>
1112
+ <p>Detector that returns capabilities hash</p>
1113
+ </div>
1114
+
1115
+ </li>
1116
+
1117
+ </ul>
1118
+
1119
+
1120
+ </div><table class="source_code">
1121
+ <tr>
1122
+ <td>
1123
+ <pre class="lines">
1124
+
1125
+
1126
+ 99
1127
+ 100
1128
+ 101</pre>
1129
+ </td>
1130
+ <td>
1131
+ <pre class="code"><span class="info file"># File 'lib/tasker/cache_strategy.rb', line 99</span>
1132
+
1133
+ <span class='kw'>def</span> <span class='kw'>self</span><span class='period'>.</span><span class='id identifier rubyid_register_detector'>register_detector</span><span class='lparen'>(</span><span class='id identifier rubyid_pattern'>pattern</span><span class='comma'>,</span> <span class='id identifier rubyid_detector'>detector</span><span class='rparen'>)</span>
1134
+ <span class='const'><span class='object_link'><a href="DetectorRegistry.html" title="Tasker::DetectorRegistry (class)">DetectorRegistry</a></span></span><span class='period'>.</span><span class='id identifier rubyid_instance'>instance</span><span class='period'>.</span><span class='id identifier rubyid_register_detector'>register_detector</span><span class='lparen'>(</span><span class='id identifier rubyid_pattern'>pattern</span><span class='comma'>,</span> <span class='id identifier rubyid_detector'>detector</span><span class='rparen'>)</span>
1135
+ <span class='kw'>end</span></pre>
1136
+ </td>
1137
+ </tr>
1138
+ </table>
1139
+ </div>
1140
+
1141
+ </div>
1142
+
1143
+ <div id="instance_method_details" class="method_details_list">
1144
+ <h2>Instance Method Details</h2>
1145
+
1146
+
1147
+ <div class="method_details first">
1148
+ <h3 class="signature first" id="export_capabilities-instance_method">
1149
+
1150
+ #<strong>export_capabilities</strong> &#x21d2; <tt>Hash</tt>
1151
+
1152
+
1153
+
1154
+
1155
+
1156
+ </h3><div class="docstring">
1157
+ <div class="discussion">
1158
+
1159
+ <p>Export capabilities for backward compatibility</p>
1160
+
1161
+
1162
+ </div>
1163
+ </div>
1164
+ <div class="tags">
1165
+
1166
+ <p class="tag_title">Returns:</p>
1167
+ <ul class="return">
1168
+
1169
+ <li>
1170
+
1171
+
1172
+ <span class='type'>(<tt>Hash</tt>)</span>
1173
+
1174
+
1175
+
1176
+ &mdash;
1177
+ <div class='inline'>
1178
+ <p>Hash of capabilities for legacy integrations</p>
1179
+ </div>
1180
+
1181
+ </li>
1182
+
1183
+ </ul>
1184
+
1185
+ </div><table class="source_code">
1186
+ <tr>
1187
+ <td>
1188
+ <pre class="lines">
1189
+
1190
+
1191
+ 176
1192
+ 177
1193
+ 178</pre>
1194
+ </td>
1195
+ <td>
1196
+ <pre class="code"><span class="info file"># File 'lib/tasker/cache_strategy.rb', line 176</span>
1197
+
1198
+ <span class='kw'>def</span> <span class='id identifier rubyid_export_capabilities'>export_capabilities</span>
1199
+ <span class='ivar'>@capabilities</span><span class='period'>.</span><span class='id identifier rubyid_dup'>dup</span>
1200
+ <span class='kw'>end</span></pre>
1201
+ </td>
1202
+ </tr>
1203
+ </table>
1204
+ </div>
1205
+
1206
+ <div class="method_details ">
1207
+ <h3 class="signature " id="supports?-instance_method">
1208
+
1209
+ #<strong>supports?</strong>(capability) &#x21d2; <tt>Boolean</tt>
1210
+
1211
+
1212
+
1213
+
1214
+
1215
+ </h3><div class="docstring">
1216
+ <div class="discussion">
1217
+
1218
+ <p>Check if store supports a specific capability</p>
1219
+
1220
+
1221
+ </div>
1222
+ </div>
1223
+ <div class="tags">
1224
+ <p class="tag_title">Parameters:</p>
1225
+ <ul class="param">
1226
+
1227
+ <li>
1228
+
1229
+ <span class='name'>capability</span>
1230
+
1231
+
1232
+ <span class='type'>(<tt>Symbol</tt>)</span>
1233
+
1234
+
1235
+
1236
+ &mdash;
1237
+ <div class='inline'>
1238
+ <p>Capability to check (:distributed, :atomic_increment, etc.)</p>
1239
+ </div>
1240
+
1241
+ </li>
1242
+
1243
+ </ul>
1244
+
1245
+ <p class="tag_title">Returns:</p>
1246
+ <ul class="return">
1247
+
1248
+ <li>
1249
+
1250
+
1251
+ <span class='type'>(<tt>Boolean</tt>)</span>
1252
+
1253
+
1254
+
1255
+ &mdash;
1256
+ <div class='inline'>
1257
+ <p>True if capability is supported</p>
1258
+ </div>
1259
+
1260
+ </li>
1261
+
1262
+ </ul>
1263
+
1264
+ </div><table class="source_code">
1265
+ <tr>
1266
+ <td>
1267
+ <pre class="lines">
1268
+
1269
+
1270
+ 169
1271
+ 170
1272
+ 171</pre>
1273
+ </td>
1274
+ <td>
1275
+ <pre class="code"><span class="info file"># File 'lib/tasker/cache_strategy.rb', line 169</span>
1276
+
1277
+ <span class='kw'>def</span> <span class='id identifier rubyid_supports?'>supports?</span><span class='lparen'>(</span><span class='id identifier rubyid_capability'>capability</span><span class='rparen'>)</span>
1278
+ <span class='ivar'>@capabilities</span><span class='lbracket'>[</span><span class='id identifier rubyid_capability'>capability</span><span class='rbracket'>]</span> <span class='op'>||</span> <span class='kw'>false</span>
1279
+ <span class='kw'>end</span></pre>
1280
+ </td>
1281
+ </tr>
1282
+ </table>
1283
+ </div>
1284
+
1285
+ </div>
1286
+
1287
+ </div>
1288
+
1289
+ <div id="footer">
1290
+ Generated on Tue Jul 1 16:47:36 2025 by
1291
+ <a href="https://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
1292
+ 0.9.37 (ruby-3.2.4).
1293
+ </div>
1294
+
1295
+ </div>
1296
+ </body>
1297
+ </html>