temporalio 0.4.0-arm64-darwin → 0.5.0-arm64-darwin
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.
- checksums.yaml +4 -4
- data/.yardopts +1 -1
- data/lib/temporalio/activity/cancellation_details.rb +58 -0
- data/lib/temporalio/activity/context.rb +10 -1
- data/lib/temporalio/activity/definition.rb +41 -3
- data/lib/temporalio/activity/info.rb +25 -4
- data/lib/temporalio/activity.rb +2 -0
- data/lib/temporalio/api/activity/v1/message.rb +1 -1
- data/lib/temporalio/api/batch/v1/message.rb +4 -2
- data/lib/temporalio/api/cloud/account/v1/message.rb +1 -1
- data/lib/temporalio/api/cloud/cloudservice/v1/request_response.rb +11 -2
- data/lib/temporalio/api/cloud/cloudservice/v1/service.rb +2 -2
- data/lib/temporalio/api/cloud/identity/v1/message.rb +7 -2
- data/lib/temporalio/api/cloud/namespace/v1/message.rb +6 -2
- data/lib/temporalio/api/cloud/nexus/v1/message.rb +3 -2
- data/lib/temporalio/api/cloud/operation/v1/message.rb +1 -1
- data/lib/temporalio/api/cloud/region/v1/message.rb +1 -1
- data/lib/temporalio/api/cloud/resource/v1/message.rb +1 -1
- data/lib/temporalio/api/cloud/sink/v1/message.rb +1 -1
- data/lib/temporalio/api/cloud/usage/v1/message.rb +1 -1
- data/lib/temporalio/api/command/v1/message.rb +2 -2
- data/lib/temporalio/api/common/v1/grpc_status.rb +1 -1
- data/lib/temporalio/api/common/v1/message.rb +3 -2
- data/lib/temporalio/api/deployment/v1/message.rb +3 -2
- data/lib/temporalio/api/enums/v1/batch_operation.rb +1 -1
- data/lib/temporalio/api/enums/v1/command_type.rb +1 -1
- data/lib/temporalio/api/enums/v1/common.rb +5 -2
- data/lib/temporalio/api/enums/v1/deployment.rb +3 -2
- data/lib/temporalio/api/enums/v1/event_type.rb +2 -2
- data/lib/temporalio/api/enums/v1/failed_cause.rb +2 -2
- data/lib/temporalio/api/enums/v1/namespace.rb +1 -1
- data/lib/temporalio/api/enums/v1/nexus.rb +1 -1
- data/lib/temporalio/api/enums/v1/query.rb +1 -1
- data/lib/temporalio/api/enums/v1/reset.rb +1 -1
- data/lib/temporalio/api/enums/v1/schedule.rb +1 -1
- data/lib/temporalio/api/enums/v1/task_queue.rb +1 -1
- data/lib/temporalio/api/enums/v1/update.rb +1 -1
- data/lib/temporalio/api/enums/v1/workflow.rb +2 -2
- data/lib/temporalio/api/errordetails/v1/message.rb +1 -1
- data/lib/temporalio/api/export/v1/message.rb +1 -1
- data/lib/temporalio/api/failure/v1/message.rb +3 -2
- data/lib/temporalio/api/filter/v1/message.rb +1 -1
- data/lib/temporalio/api/history/v1/message.rb +4 -2
- data/lib/temporalio/api/namespace/v1/message.rb +1 -1
- data/lib/temporalio/api/nexus/v1/message.rb +2 -2
- data/lib/temporalio/api/operatorservice/v1/request_response.rb +1 -1
- data/lib/temporalio/api/operatorservice/v1/service.rb +1 -1
- data/lib/temporalio/api/payload_visitor.rb +87 -0
- data/lib/temporalio/api/protocol/v1/message.rb +1 -1
- data/lib/temporalio/api/query/v1/message.rb +1 -1
- data/lib/temporalio/api/replication/v1/message.rb +1 -1
- data/lib/temporalio/api/rules/v1/message.rb +27 -0
- data/lib/temporalio/api/schedule/v1/message.rb +2 -2
- data/lib/temporalio/api/sdk/v1/enhanced_stack_trace.rb +1 -1
- data/lib/temporalio/api/sdk/v1/task_complete_metadata.rb +1 -1
- data/lib/temporalio/api/sdk/v1/user_metadata.rb +1 -1
- data/lib/temporalio/api/sdk/v1/workflow_metadata.rb +1 -1
- data/lib/temporalio/api/taskqueue/v1/message.rb +2 -2
- data/lib/temporalio/api/testservice/v1/request_response.rb +1 -1
- data/lib/temporalio/api/testservice/v1/service.rb +1 -1
- data/lib/temporalio/api/update/v1/message.rb +1 -1
- data/lib/temporalio/api/version/v1/message.rb +1 -1
- data/lib/temporalio/api/worker/v1/message.rb +30 -0
- data/lib/temporalio/api/workflow/v1/message.rb +14 -2
- data/lib/temporalio/api/workflowservice/v1/request_response.rb +19 -2
- data/lib/temporalio/api/workflowservice/v1/service.rb +2 -2
- data/lib/temporalio/client/async_activity_handle.rb +12 -4
- data/lib/temporalio/client/connection/cloud_service.rb +60 -0
- data/lib/temporalio/client/connection/workflow_service.rb +105 -0
- data/lib/temporalio/client/interceptor.rb +25 -7
- data/lib/temporalio/client/schedule.rb +10 -2
- data/lib/temporalio/client/with_start_workflow_operation.rb +9 -1
- data/lib/temporalio/client/workflow_handle.rb +50 -10
- data/lib/temporalio/client/workflow_update_handle.rb +9 -3
- data/lib/temporalio/client.rb +110 -6
- data/lib/temporalio/common_enums.rb +14 -0
- data/lib/temporalio/contrib/open_telemetry.rb +13 -9
- data/lib/temporalio/converters/data_converter.rb +18 -8
- data/lib/temporalio/converters/failure_converter.rb +6 -3
- data/lib/temporalio/converters/payload_converter/binary_null.rb +2 -2
- data/lib/temporalio/converters/payload_converter/binary_plain.rb +2 -2
- data/lib/temporalio/converters/payload_converter/binary_protobuf.rb +2 -2
- data/lib/temporalio/converters/payload_converter/composite.rb +6 -4
- data/lib/temporalio/converters/payload_converter/encoding.rb +4 -2
- data/lib/temporalio/converters/payload_converter/json_plain.rb +2 -2
- data/lib/temporalio/converters/payload_converter/json_protobuf.rb +2 -2
- data/lib/temporalio/converters/payload_converter.rb +16 -6
- data/lib/temporalio/error/failure.rb +19 -1
- data/lib/temporalio/error.rb +1 -1
- data/lib/temporalio/internal/bridge/3.2/temporalio_bridge.bundle +0 -0
- data/lib/temporalio/internal/bridge/3.3/temporalio_bridge.bundle +0 -0
- data/lib/temporalio/internal/bridge/3.4/temporalio_bridge.bundle +0 -0
- data/lib/temporalio/internal/bridge/api/activity_result/activity_result.rb +1 -1
- data/lib/temporalio/internal/bridge/api/activity_task/activity_task.rb +3 -2
- data/lib/temporalio/internal/bridge/api/child_workflow/child_workflow.rb +1 -1
- data/lib/temporalio/internal/bridge/api/common/common.rb +1 -1
- data/lib/temporalio/internal/bridge/api/core_interface.rb +1 -1
- data/lib/temporalio/internal/bridge/api/external_data/external_data.rb +1 -1
- data/lib/temporalio/internal/bridge/api/nexus/nexus.rb +3 -2
- data/lib/temporalio/internal/bridge/api/workflow_activation/workflow_activation.rb +2 -2
- data/lib/temporalio/internal/bridge/api/workflow_commands/workflow_commands.rb +3 -2
- data/lib/temporalio/internal/bridge/api/workflow_completion/workflow_completion.rb +1 -1
- data/lib/temporalio/internal/bridge/worker.rb +28 -4
- data/lib/temporalio/internal/bridge.rb +1 -1
- data/lib/temporalio/internal/client/implementation.rb +60 -52
- data/lib/temporalio/internal/proto_utils.rb +4 -4
- data/lib/temporalio/internal/worker/activity_worker.rb +93 -20
- data/lib/temporalio/internal/worker/workflow_instance/child_workflow_handle.rb +8 -6
- data/lib/temporalio/internal/worker/workflow_instance/context.rb +65 -24
- data/lib/temporalio/internal/worker/workflow_instance/details.rb +5 -2
- data/lib/temporalio/internal/worker/workflow_instance/external_workflow_handle.rb +2 -2
- data/lib/temporalio/internal/worker/workflow_instance/illegal_call_tracer.rb +64 -18
- data/lib/temporalio/internal/worker/workflow_instance/outbound_implementation.rb +28 -14
- data/lib/temporalio/internal/worker/workflow_instance.rb +58 -23
- data/lib/temporalio/internal/worker/workflow_worker.rb +16 -6
- data/lib/temporalio/priority.rb +59 -0
- data/lib/temporalio/testing/activity_environment.rb +17 -2
- data/lib/temporalio/testing/workflow_environment.rb +3 -3
- data/lib/temporalio/version.rb +1 -1
- data/lib/temporalio/versioning_override.rb +56 -0
- data/lib/temporalio/worker/deployment_options.rb +45 -0
- data/lib/temporalio/worker/illegal_workflow_call_validator.rb +64 -0
- data/lib/temporalio/worker/interceptor.rb +13 -1
- data/lib/temporalio/worker/poller_behavior.rb +61 -0
- data/lib/temporalio/worker/thread_pool.rb +1 -1
- data/lib/temporalio/worker/workflow_executor/thread_pool.rb +2 -1
- data/lib/temporalio/worker/workflow_replayer.rb +12 -13
- data/lib/temporalio/worker.rb +63 -27
- data/lib/temporalio/worker_deployment_version.rb +67 -0
- data/lib/temporalio/workflow/child_workflow_handle.rb +10 -2
- data/lib/temporalio/workflow/definition.rb +183 -33
- data/lib/temporalio/workflow/external_workflow_handle.rb +3 -1
- data/lib/temporalio/workflow/info.rb +4 -1
- data/lib/temporalio/workflow.rb +61 -9
- data/lib/temporalio.rb +1 -0
- data/temporalio.gemspec +1 -0
- metadata +11 -2
| @@ -47,6 +47,21 @@ module Temporalio | |
| 47 47 | 
             
                      @workflow_raw_args = value
         | 
| 48 48 | 
             
                    end
         | 
| 49 49 |  | 
| 50 | 
            +
                    # Add workflow hints to be passed to converter for workflow args.
         | 
| 51 | 
            +
                    #
         | 
| 52 | 
            +
                    # @param hints [Array<Object>] Hints to add.
         | 
| 53 | 
            +
                    def workflow_arg_hint(*hints)
         | 
| 54 | 
            +
                      @workflow_arg_hints ||= []
         | 
| 55 | 
            +
                      @workflow_arg_hints.concat(hints)
         | 
| 56 | 
            +
                    end
         | 
| 57 | 
            +
             | 
| 58 | 
            +
                    # Set workflow result hint to be passed to converter for workflow result.
         | 
| 59 | 
            +
                    #
         | 
| 60 | 
            +
                    # @param hint [Object] Hint to set.
         | 
| 61 | 
            +
                    def workflow_result_hint(hint)
         | 
| 62 | 
            +
                      @workflow_result_hint = hint
         | 
| 63 | 
            +
                    end
         | 
| 64 | 
            +
             | 
| 50 65 | 
             
                    # Configure workflow failure exception types. This sets the types of exceptions that, if a
         | 
| 51 66 | 
             
                    # workflow-thrown exception extends, will cause the workflow/update to fail instead of suspending the workflow
         | 
| 52 67 | 
             
                    # via task failure. These are applied in addition to the worker option. If {::Exception} is set, it effectively
         | 
| @@ -55,7 +70,7 @@ module Temporalio | |
| 55 70 | 
             
                    # @param types [Array<Class<Exception>>] Exception types to turn into workflow failures.
         | 
| 56 71 | 
             
                    def workflow_failure_exception_type(*types)
         | 
| 57 72 | 
             
                      types.each do |t|
         | 
| 58 | 
            -
                        raise ArgumentError, 'All types must classes inheriting Exception' unless t.is_a?(Class) && t  | 
| 73 | 
            +
                        raise ArgumentError, 'All types must classes inheriting Exception' unless t.is_a?(Class) && t <= Exception
         | 
| 59 74 | 
             
                      end
         | 
| 60 75 | 
             
                      @workflow_failure_exception_types ||= []
         | 
| 61 76 | 
             
                      @workflow_failure_exception_types.concat(types)
         | 
| @@ -91,6 +106,15 @@ module Temporalio | |
| 91 106 | 
             
                      end
         | 
| 92 107 | 
             
                    end
         | 
| 93 108 |  | 
| 109 | 
            +
                    # Set the versioning behavior of this workflow.
         | 
| 110 | 
            +
                    #
         | 
| 111 | 
            +
                    # WARNING: This method is experimental and may change in future versions.
         | 
| 112 | 
            +
                    #
         | 
| 113 | 
            +
                    # @param behavior [VersioningBehavior] The versioning behavior.
         | 
| 114 | 
            +
                    def workflow_versioning_behavior(behavior)
         | 
| 115 | 
            +
                      @versioning_behavior = behavior
         | 
| 116 | 
            +
                    end
         | 
| 117 | 
            +
             | 
| 94 118 | 
             
                    # Mark an `initialize` as needing the workflow start arguments. Otherwise, `initialize` must accept no required
         | 
| 95 119 | 
             
                    # arguments. This must be placed above the `initialize` method or it will fail.
         | 
| 96 120 | 
             
                    #
         | 
| @@ -112,16 +136,20 @@ module Temporalio | |
| 112 136 | 
             
                    #   {Converters::RawValue} which is a raw payload wrapper, convertible with {Workflow.payload_converter}.
         | 
| 113 137 | 
             
                    # @param unfinished_policy [HandlerUnfinishedPolicy] How to treat unfinished handlers if they are still running
         | 
| 114 138 | 
             
                    #   when the workflow ends. The default warns, but this can be disabled.
         | 
| 139 | 
            +
                    # @param arg_hints [Array<Object>, nil] Argument hint(s) for the signal.
         | 
| 115 140 | 
             
                    def workflow_signal(
         | 
| 116 141 | 
             
                      name: nil,
         | 
| 117 142 | 
             
                      description: nil,
         | 
| 118 143 | 
             
                      dynamic: false,
         | 
| 119 144 | 
             
                      raw_args: false,
         | 
| 120 | 
            -
                      unfinished_policy: HandlerUnfinishedPolicy::WARN_AND_ABANDON
         | 
| 145 | 
            +
                      unfinished_policy: HandlerUnfinishedPolicy::WARN_AND_ABANDON,
         | 
| 146 | 
            +
                      arg_hints: nil
         | 
| 121 147 | 
             
                    )
         | 
| 122 148 | 
             
                      raise 'Cannot provide name if dynamic is true' if name && dynamic
         | 
| 123 149 |  | 
| 124 | 
            -
                      self.pending_handler_details = | 
| 150 | 
            +
                      self.pending_handler_details =
         | 
| 151 | 
            +
                        { type: :signal, name:, description:, dynamic:, raw_args:, unfinished_policy:,
         | 
| 152 | 
            +
                          arg_hints: Array(arg_hints) }
         | 
| 125 153 | 
             
                    end
         | 
| 126 154 |  | 
| 127 155 | 
             
                    # Mark the next method as a workflow query with a default name as the name of the method. Queries can not have
         | 
| @@ -135,15 +163,20 @@ module Temporalio | |
| 135 163 | 
             
                    #   it is useful to have the second parameter be `*args` and `raw_args` be true.
         | 
| 136 164 | 
             
                    # @param raw_args [Boolean] If true, does not convert arguments, but instead provides each argument as
         | 
| 137 165 | 
             
                    #   {Converters::RawValue} which is a raw payload wrapper, convertible with {Workflow.payload_converter}.
         | 
| 166 | 
            +
                    # @param arg_hints [Object, Array<Object>, nil] Argument hint(s) for the query.
         | 
| 167 | 
            +
                    # @param result_hint [Object, nil] Result hint for the query.
         | 
| 138 168 | 
             
                    def workflow_query(
         | 
| 139 169 | 
             
                      name: nil,
         | 
| 140 170 | 
             
                      description: nil,
         | 
| 141 171 | 
             
                      dynamic: false,
         | 
| 142 | 
            -
                      raw_args: false
         | 
| 172 | 
            +
                      raw_args: false,
         | 
| 173 | 
            +
                      arg_hints: nil,
         | 
| 174 | 
            +
                      result_hint: nil
         | 
| 143 175 | 
             
                    )
         | 
| 144 176 | 
             
                      raise 'Cannot provide name if dynamic is true' if name && dynamic
         | 
| 145 177 |  | 
| 146 | 
            -
                      self.pending_handler_details = { type: :query, name:, description:, dynamic:, raw_args | 
| 178 | 
            +
                      self.pending_handler_details = { type: :query, name:, description:, dynamic:, raw_args:,
         | 
| 179 | 
            +
                                                       arg_hints: Array(arg_hints), result_hint: }
         | 
| 147 180 | 
             
                    end
         | 
| 148 181 |  | 
| 149 182 | 
             
                    # Mark the next method as a workflow update with a default name as the name of the method. Updates can return
         | 
| @@ -159,16 +192,21 @@ module Temporalio | |
| 159 192 | 
             
                    #   {Converters::RawValue} which is a raw payload wrapper, convertible with {Workflow.payload_converter}.
         | 
| 160 193 | 
             
                    # @param unfinished_policy [HandlerUnfinishedPolicy] How to treat unfinished handlers if they are still running
         | 
| 161 194 | 
             
                    #   when the workflow ends. The default warns, but this can be disabled.
         | 
| 195 | 
            +
                    # @param arg_hints [Object, Array<Object>, nil] Argument hint(s) for the update.
         | 
| 196 | 
            +
                    # @param result_hint [Object, nil] Result hint for the update.
         | 
| 162 197 | 
             
                    def workflow_update(
         | 
| 163 198 | 
             
                      name: nil,
         | 
| 164 199 | 
             
                      description: nil,
         | 
| 165 200 | 
             
                      dynamic: false,
         | 
| 166 201 | 
             
                      raw_args: false,
         | 
| 167 | 
            -
                      unfinished_policy: HandlerUnfinishedPolicy::WARN_AND_ABANDON
         | 
| 202 | 
            +
                      unfinished_policy: HandlerUnfinishedPolicy::WARN_AND_ABANDON,
         | 
| 203 | 
            +
                      arg_hints: nil,
         | 
| 204 | 
            +
                      result_hint: nil
         | 
| 168 205 | 
             
                    )
         | 
| 169 206 | 
             
                      raise 'Cannot provide name if dynamic is true' if name && dynamic
         | 
| 170 207 |  | 
| 171 | 
            -
                      self.pending_handler_details = { type: :update, name:, description:, dynamic:, raw_args:, unfinished_policy | 
| 208 | 
            +
                      self.pending_handler_details = { type: :update, name:, description:, dynamic:, raw_args:, unfinished_policy:,
         | 
| 209 | 
            +
                                                       arg_hints: Array(arg_hints), result_hint: }
         | 
| 172 210 | 
             
                    end
         | 
| 173 211 |  | 
| 174 212 | 
             
                    # Mark the next method as a workflow update validator to the given update method. The validator is expected to
         | 
| @@ -181,6 +219,24 @@ module Temporalio | |
| 181 219 | 
             
                      self.pending_handler_details = { type: :update_validator, update_method: }
         | 
| 182 220 | 
             
                    end
         | 
| 183 221 |  | 
| 222 | 
            +
                    # Mark the next method as returning some dynamic configuraion.
         | 
| 223 | 
            +
                    #
         | 
| 224 | 
            +
                    # Because dynamic workflows may conceptually represent more than one workflow type, it may
         | 
| 225 | 
            +
                    # be desirable to have different settings for fields that would normally be passed to
         | 
| 226 | 
            +
                    # `workflow_xxx` setters, but vary based on the workflow type name or other information
         | 
| 227 | 
            +
                    # available in the workflow's context. This function will be called after the workflow's
         | 
| 228 | 
            +
                    # `initialize`, if it has one, but before the workflow's `execute` method.
         | 
| 229 | 
            +
                    #
         | 
| 230 | 
            +
                    # The method must only take self as a parameter, and any values set in the class it returns
         | 
| 231 | 
            +
                    # will override those provided to other `workflow_xxx` setters.
         | 
| 232 | 
            +
                    #
         | 
| 233 | 
            +
                    # Cannot be specified on non-dynamic workflows.
         | 
| 234 | 
            +
                    def workflow_dynamic_options
         | 
| 235 | 
            +
                      raise 'Dynamic options method can only be set on workflows using `workflow_dynamic`' unless @workflow_dynamic
         | 
| 236 | 
            +
             | 
| 237 | 
            +
                      self.pending_handler_details = { type: :dynamic_options }
         | 
| 238 | 
            +
                    end
         | 
| 239 | 
            +
             | 
| 184 240 | 
             
                    private
         | 
| 185 241 |  | 
| 186 242 | 
             
                    attr_reader :pending_handler_details
         | 
| @@ -208,6 +264,15 @@ module Temporalio | |
| 208 264 | 
             
                    # Reset details
         | 
| 209 265 | 
             
                    self.pending_handler_details = nil
         | 
| 210 266 |  | 
| 267 | 
            +
                    # Disallow kwargs in parameters
         | 
| 268 | 
            +
                    begin
         | 
| 269 | 
            +
                      if instance_method(method_name).parameters.any? { |t, _| t == :key || t == :keyreq }
         | 
| 270 | 
            +
                        raise "Workflow #{handler[:type]} cannot have keyword arguments"
         | 
| 271 | 
            +
                      end
         | 
| 272 | 
            +
                    rescue NameError
         | 
| 273 | 
            +
                      # Ignore name error
         | 
| 274 | 
            +
                    end
         | 
| 275 | 
            +
             | 
| 211 276 | 
             
                    # Initialize class variables if not done already
         | 
| 212 277 | 
             
                    @workflow_signals ||= {}
         | 
| 213 278 | 
             
                    @workflow_queries ||= {}
         | 
| @@ -239,14 +304,17 @@ module Temporalio | |
| 239 304 | 
             
                          to_invoke: method_name,
         | 
| 240 305 | 
             
                          description: handler[:description],
         | 
| 241 306 | 
             
                          raw_args: handler[:raw_args],
         | 
| 242 | 
            -
                          unfinished_policy: handler[:unfinished_policy]
         | 
| 307 | 
            +
                          unfinished_policy: handler[:unfinished_policy],
         | 
| 308 | 
            +
                          arg_hints: handler[:arg_hints]
         | 
| 243 309 | 
             
                        ), @workflow_signals, [@workflow_queries, @workflow_updates]]
         | 
| 244 310 | 
             
                      when :query
         | 
| 245 311 | 
             
                        [Query.new(
         | 
| 246 312 | 
             
                          name: handler[:dynamic] ? nil : (handler[:name] || method_name).to_s,
         | 
| 247 313 | 
             
                          to_invoke: method_name,
         | 
| 248 314 | 
             
                          description: handler[:description],
         | 
| 249 | 
            -
                          raw_args: handler[:raw_args]
         | 
| 315 | 
            +
                          raw_args: handler[:raw_args],
         | 
| 316 | 
            +
                          arg_hints: handler[:arg_hints],
         | 
| 317 | 
            +
                          result_hint: handler[:result_hint]
         | 
| 250 318 | 
             
                        ), @workflow_queries, [@workflow_signals, @workflow_updates]]
         | 
| 251 319 | 
             
                      when :update
         | 
| 252 320 | 
             
                        [Update.new(
         | 
| @@ -254,8 +322,15 @@ module Temporalio | |
| 254 322 | 
             
                          to_invoke: method_name,
         | 
| 255 323 | 
             
                          description: handler[:description],
         | 
| 256 324 | 
             
                          raw_args: handler[:raw_args],
         | 
| 257 | 
            -
                          unfinished_policy: handler[:unfinished_policy]
         | 
| 325 | 
            +
                          unfinished_policy: handler[:unfinished_policy],
         | 
| 326 | 
            +
                          arg_hints: handler[:arg_hints],
         | 
| 327 | 
            +
                          result_hint: handler[:result_hint]
         | 
| 258 328 | 
             
                        ), @workflow_updates, [@workflow_signals, @workflow_queries]]
         | 
| 329 | 
            +
                      when :dynamic_options
         | 
| 330 | 
            +
                        raise 'Dynamic options method already set' if @dynamic_options_method
         | 
| 331 | 
            +
             | 
| 332 | 
            +
                        @dynamic_options_method = method_name
         | 
| 333 | 
            +
                        return
         | 
| 259 334 | 
             
                      else
         | 
| 260 335 | 
             
                        raise "Unrecognized handler type #{handler[:type]}"
         | 
| 261 336 | 
             
                      end
         | 
| @@ -293,7 +368,7 @@ module Temporalio | |
| 293 368 | 
             
                  end
         | 
| 294 369 |  | 
| 295 370 | 
             
                  # @!visibility private
         | 
| 296 | 
            -
                  def self. | 
| 371 | 
            +
                  def self._workflow_type_and_hints_from_workflow_parameter(workflow)
         | 
| 297 372 | 
             
                    case workflow
         | 
| 298 373 | 
             
                    when Class
         | 
| 299 374 | 
             
                      unless workflow < Definition
         | 
| @@ -301,11 +376,15 @@ module Temporalio | |
| 301 376 | 
             
                      end
         | 
| 302 377 |  | 
| 303 378 | 
             
                      info = Info.from_class(workflow)
         | 
| 304 | 
            -
                       | 
| 379 | 
            +
                      raise(ArgumentError, 'Cannot pass dynamic workflow to start') unless info.name
         | 
| 380 | 
            +
             | 
| 381 | 
            +
                      [info.name.to_s, info.arg_hints, info.result_hint]
         | 
| 305 382 | 
             
                    when Info
         | 
| 306 | 
            -
                       | 
| 383 | 
            +
                      raise(ArgumentError, 'Cannot pass dynamic workflow to start') unless workflow.name
         | 
| 384 | 
            +
             | 
| 385 | 
            +
                      [workflow.name.to_s, nil, nil]
         | 
| 307 386 | 
             
                    when String, Symbol
         | 
| 308 | 
            -
                      workflow.to_s
         | 
| 387 | 
            +
                      [workflow.to_s, nil, nil]
         | 
| 309 388 | 
             
                    else
         | 
| 310 389 | 
             
                      raise ArgumentError, 'Workflow is not a workflow class or string/symbol'
         | 
| 311 390 | 
             
                    end
         | 
| @@ -318,6 +397,11 @@ module Temporalio | |
| 318 397 | 
             
                      raise "Leftover #{pending_handler_details&.[](:type)} handler not applied to a method"
         | 
| 319 398 | 
             
                    end
         | 
| 320 399 |  | 
| 400 | 
            +
                    # Disallow kwargs in execute parameters
         | 
| 401 | 
            +
                    if instance_method(:execute).parameters.any? { |t, _| t == :key || t == :keyreq }
         | 
| 402 | 
            +
                      raise 'Workflow execute cannot have keyword arguments'
         | 
| 403 | 
            +
                    end
         | 
| 404 | 
            +
             | 
| 321 405 | 
             
                    # Apply all update validators before merging with super
         | 
| 322 406 | 
             
                    updates = @workflow_updates&.dup || {}
         | 
| 323 407 | 
             
                    @workflow_update_validators&.each_value do |validator|
         | 
| @@ -387,6 +471,10 @@ module Temporalio | |
| 387 471 |  | 
| 388 472 | 
             
                    raise 'Workflow cannot be given a name and be dynamic' if dynamic && override_name
         | 
| 389 473 |  | 
| 474 | 
            +
                    if !dynamic && !@dynamic_options_method.nil?
         | 
| 475 | 
            +
                      raise 'Workflow cannot have a dynamic_options_method unless it is dynamic'
         | 
| 476 | 
            +
                    end
         | 
| 477 | 
            +
             | 
| 390 478 | 
             
                    Info.new(
         | 
| 391 479 | 
             
                      workflow_class: self,
         | 
| 392 480 | 
             
                      override_name:,
         | 
| @@ -396,7 +484,11 @@ module Temporalio | |
| 396 484 | 
             
                      failure_exception_types: @workflow_failure_exception_types || [],
         | 
| 397 485 | 
             
                      signals:,
         | 
| 398 486 | 
             
                      queries:,
         | 
| 399 | 
            -
                      updates | 
| 487 | 
            +
                      updates:,
         | 
| 488 | 
            +
                      versioning_behavior: @versioning_behavior || VersioningBehavior::UNSPECIFIED,
         | 
| 489 | 
            +
                      dynamic_options_method: @dynamic_options_method,
         | 
| 490 | 
            +
                      arg_hints: @workflow_arg_hints,
         | 
| 491 | 
            +
                      result_hint: @workflow_result_hint
         | 
| 400 492 | 
             
                    )
         | 
| 401 493 | 
             
                  end
         | 
| 402 494 |  | 
| @@ -409,7 +501,8 @@ module Temporalio | |
| 409 501 | 
             
                  # Information about the workflow definition. This is usually not used directly.
         | 
| 410 502 | 
             
                  class Info
         | 
| 411 503 | 
             
                    attr_reader :workflow_class, :override_name, :dynamic, :init, :raw_args,
         | 
| 412 | 
            -
                                :failure_exception_types, :signals, :queries, :updates
         | 
| 504 | 
            +
                                :failure_exception_types, :signals, :queries, :updates, :versioning_behavior,
         | 
| 505 | 
            +
                                :dynamic_options_method, :arg_hints, :result_hint
         | 
| 413 506 |  | 
| 414 507 | 
             
                    # Derive the workflow definition info from the class.
         | 
| 415 508 | 
             
                    #
         | 
| @@ -434,7 +527,11 @@ module Temporalio | |
| 434 527 | 
             
                      failure_exception_types: [],
         | 
| 435 528 | 
             
                      signals: {},
         | 
| 436 529 | 
             
                      queries: {},
         | 
| 437 | 
            -
                      updates: {}
         | 
| 530 | 
            +
                      updates: {},
         | 
| 531 | 
            +
                      versioning_behavior: VersioningBehavior::UNSPECIFIED,
         | 
| 532 | 
            +
                      dynamic_options_method: nil,
         | 
| 533 | 
            +
                      arg_hints: nil,
         | 
| 534 | 
            +
                      result_hint: nil
         | 
| 438 535 | 
             
                    )
         | 
| 439 536 | 
             
                      @workflow_class = workflow_class
         | 
| 440 537 | 
             
                      @override_name = override_name
         | 
| @@ -445,6 +542,10 @@ module Temporalio | |
| 445 542 | 
             
                      @signals = signals.dup.freeze
         | 
| 446 543 | 
             
                      @queries = queries.dup.freeze
         | 
| 447 544 | 
             
                      @updates = updates.dup.freeze
         | 
| 545 | 
            +
                      @versioning_behavior = versioning_behavior
         | 
| 546 | 
            +
                      @dynamic_options_method = dynamic_options_method
         | 
| 547 | 
            +
                      @arg_hints = arg_hints
         | 
| 548 | 
            +
                      @result_hint = result_hint
         | 
| 448 549 | 
             
                      Internal::ProtoUtils.assert_non_reserved_name(name)
         | 
| 449 550 | 
             
                    end
         | 
| 450 551 |  | 
| @@ -457,15 +558,17 @@ module Temporalio | |
| 457 558 | 
             
                  # A signal definition. This is usually built as a result of a {Definition.workflow_signal} method, but can be
         | 
| 458 559 | 
             
                  # manually created to set at runtime on {Workflow.signal_handlers}.
         | 
| 459 560 | 
             
                  class Signal
         | 
| 460 | 
            -
                    attr_reader :name, :to_invoke, :description, :raw_args, :unfinished_policy
         | 
| 561 | 
            +
                    attr_reader :name, :to_invoke, :description, :raw_args, :unfinished_policy, :arg_hints
         | 
| 461 562 |  | 
| 462 563 | 
             
                    # @!visibility private
         | 
| 463 | 
            -
                    def self. | 
| 564 | 
            +
                    def self._name_and_hints_from_parameter(signal)
         | 
| 464 565 | 
             
                      case signal
         | 
| 465 566 | 
             
                      when Workflow::Definition::Signal
         | 
| 466 | 
            -
                         | 
| 567 | 
            +
                        raise(ArgumentError, 'Cannot call dynamic signal directly') unless signal.name
         | 
| 568 | 
            +
             | 
| 569 | 
            +
                        [signal.name, signal.arg_hints]
         | 
| 467 570 | 
             
                      when String, Symbol
         | 
| 468 | 
            -
                        signal.to_s
         | 
| 571 | 
            +
                        [signal.to_s, nil]
         | 
| 469 572 | 
             
                      else
         | 
| 470 573 | 
             
                        raise ArgumentError, 'Signal is not a definition or string/symbol'
         | 
| 471 574 | 
             
                      end
         | 
| @@ -481,18 +584,21 @@ module Temporalio | |
| 481 584 | 
             
                    # @param raw_args [Boolean] Whether the parameters should be raw values.
         | 
| 482 585 | 
             
                    # @param unfinished_policy [HandlerUnfinishedPolicy] How the workflow reacts when this handler is still running
         | 
| 483 586 | 
             
                    #   on workflow completion.
         | 
| 587 | 
            +
                    # @param arg_hints [Array<Object>, nil] Argument hints for the signal.
         | 
| 484 588 | 
             
                    def initialize(
         | 
| 485 589 | 
             
                      name:,
         | 
| 486 590 | 
             
                      to_invoke:,
         | 
| 487 591 | 
             
                      description: nil,
         | 
| 488 592 | 
             
                      raw_args: false,
         | 
| 489 | 
            -
                      unfinished_policy: HandlerUnfinishedPolicy::WARN_AND_ABANDON
         | 
| 593 | 
            +
                      unfinished_policy: HandlerUnfinishedPolicy::WARN_AND_ABANDON,
         | 
| 594 | 
            +
                      arg_hints: nil
         | 
| 490 595 | 
             
                    )
         | 
| 491 596 | 
             
                      @name = name
         | 
| 492 597 | 
             
                      @to_invoke = to_invoke
         | 
| 493 598 | 
             
                      @description = description
         | 
| 494 599 | 
             
                      @raw_args = raw_args
         | 
| 495 600 | 
             
                      @unfinished_policy = unfinished_policy
         | 
| 601 | 
            +
                      @arg_hints = arg_hints
         | 
| 496 602 | 
             
                      Internal::ProtoUtils.assert_non_reserved_name(name)
         | 
| 497 603 | 
             
                    end
         | 
| 498 604 | 
             
                  end
         | 
| @@ -500,15 +606,17 @@ module Temporalio | |
| 500 606 | 
             
                  # A query definition. This is usually built as a result of a {Definition.workflow_query} method, but can be
         | 
| 501 607 | 
             
                  # manually created to set at runtime on {Workflow.query_handlers}.
         | 
| 502 608 | 
             
                  class Query
         | 
| 503 | 
            -
                    attr_reader :name, :to_invoke, :description, :raw_args
         | 
| 609 | 
            +
                    attr_reader :name, :to_invoke, :description, :raw_args, :arg_hints, :result_hint
         | 
| 504 610 |  | 
| 505 611 | 
             
                    # @!visibility private
         | 
| 506 | 
            -
                    def self. | 
| 612 | 
            +
                    def self._name_and_hints_from_parameter(query)
         | 
| 507 613 | 
             
                      case query
         | 
| 508 614 | 
             
                      when Workflow::Definition::Query
         | 
| 509 | 
            -
                         | 
| 615 | 
            +
                        raise(ArgumentError, 'Cannot call dynamic query directly') unless query.name
         | 
| 616 | 
            +
             | 
| 617 | 
            +
                        [query.name, query.arg_hints, query.result_hint]
         | 
| 510 618 | 
             
                      when String, Symbol
         | 
| 511 | 
            -
                        query.to_s
         | 
| 619 | 
            +
                        [query.to_s, nil, nil]
         | 
| 512 620 | 
             
                      else
         | 
| 513 621 | 
             
                        raise ArgumentError, 'Query is not a definition or string/symbol'
         | 
| 514 622 | 
             
                      end
         | 
| @@ -522,16 +630,22 @@ module Temporalio | |
| 522 630 | 
             
                    # @param description [String, nil] Description for this handler that may appear in CLI/UI. This is currently
         | 
| 523 631 | 
             
                    #   experimental.
         | 
| 524 632 | 
             
                    # @param raw_args [Boolean] Whether the parameters should be raw values.
         | 
| 633 | 
            +
                    # @param arg_hints [Array<Object>, nil] Argument hints for the query.
         | 
| 634 | 
            +
                    # @param result_hint [Object, nil] Result hints for the query.
         | 
| 525 635 | 
             
                    def initialize(
         | 
| 526 636 | 
             
                      name:,
         | 
| 527 637 | 
             
                      to_invoke:,
         | 
| 528 638 | 
             
                      description: nil,
         | 
| 529 | 
            -
                      raw_args: false
         | 
| 639 | 
            +
                      raw_args: false,
         | 
| 640 | 
            +
                      arg_hints: nil,
         | 
| 641 | 
            +
                      result_hint: nil
         | 
| 530 642 | 
             
                    )
         | 
| 531 643 | 
             
                      @name = name
         | 
| 532 644 | 
             
                      @to_invoke = to_invoke
         | 
| 533 645 | 
             
                      @description = description
         | 
| 534 646 | 
             
                      @raw_args = raw_args
         | 
| 647 | 
            +
                      @arg_hints = arg_hints
         | 
| 648 | 
            +
                      @result_hint = result_hint
         | 
| 535 649 | 
             
                      Internal::ProtoUtils.assert_non_reserved_name(name)
         | 
| 536 650 | 
             
                    end
         | 
| 537 651 | 
             
                  end
         | 
| @@ -539,15 +653,18 @@ module Temporalio | |
| 539 653 | 
             
                  # An update definition. This is usually built as a result of a {Definition.workflow_update} method, but can be
         | 
| 540 654 | 
             
                  # manually created to set at runtime on {Workflow.update_handlers}.
         | 
| 541 655 | 
             
                  class Update
         | 
| 542 | 
            -
                    attr_reader :name, :to_invoke, :description, :raw_args, :unfinished_policy, :validator_to_invoke
         | 
| 656 | 
            +
                    attr_reader :name, :to_invoke, :description, :raw_args, :unfinished_policy, :validator_to_invoke,
         | 
| 657 | 
            +
                                :arg_hints, :result_hint
         | 
| 543 658 |  | 
| 544 659 | 
             
                    # @!visibility private
         | 
| 545 | 
            -
                    def self. | 
| 660 | 
            +
                    def self._name_and_hints_from_parameter(update)
         | 
| 546 661 | 
             
                      case update
         | 
| 547 662 | 
             
                      when Workflow::Definition::Update
         | 
| 548 | 
            -
                         | 
| 663 | 
            +
                        raise(ArgumentError, 'Cannot call dynamic update directly') unless update.name
         | 
| 664 | 
            +
             | 
| 665 | 
            +
                        [update.name, update.arg_hints, update.result_hint]
         | 
| 549 666 | 
             
                      when String, Symbol
         | 
| 550 | 
            -
                        update.to_s
         | 
| 667 | 
            +
                        [update.to_s, nil, nil]
         | 
| 551 668 | 
             
                      else
         | 
| 552 669 | 
             
                        raise ArgumentError, 'Update is not a definition or string/symbol'
         | 
| 553 670 | 
             
                      end
         | 
| @@ -564,13 +681,17 @@ module Temporalio | |
| 564 681 | 
             
                    # @param unfinished_policy [HandlerUnfinishedPolicy] How the workflow reacts when this handler is still running
         | 
| 565 682 | 
             
                    #   on workflow completion.
         | 
| 566 683 | 
             
                    # @param validator_to_invoke [Symbol, Proc, nil] Method name or proc validator to invoke.
         | 
| 684 | 
            +
                    # @param arg_hints [Array<Object>, nil] Argument hints for the update.
         | 
| 685 | 
            +
                    # @param result_hint [Object, nil] Result hints for the update.
         | 
| 567 686 | 
             
                    def initialize(
         | 
| 568 687 | 
             
                      name:,
         | 
| 569 688 | 
             
                      to_invoke:,
         | 
| 570 689 | 
             
                      description: nil,
         | 
| 571 690 | 
             
                      raw_args: false,
         | 
| 572 691 | 
             
                      unfinished_policy: HandlerUnfinishedPolicy::WARN_AND_ABANDON,
         | 
| 573 | 
            -
                      validator_to_invoke: nil
         | 
| 692 | 
            +
                      validator_to_invoke: nil,
         | 
| 693 | 
            +
                      arg_hints: nil,
         | 
| 694 | 
            +
                      result_hint: nil
         | 
| 574 695 | 
             
                    )
         | 
| 575 696 | 
             
                      @name = name
         | 
| 576 697 | 
             
                      @to_invoke = to_invoke
         | 
| @@ -578,6 +699,8 @@ module Temporalio | |
| 578 699 | 
             
                      @raw_args = raw_args
         | 
| 579 700 | 
             
                      @unfinished_policy = unfinished_policy
         | 
| 580 701 | 
             
                      @validator_to_invoke = validator_to_invoke
         | 
| 702 | 
            +
                      @arg_hints = arg_hints
         | 
| 703 | 
            +
                      @result_hint = result_hint
         | 
| 581 704 | 
             
                      Internal::ProtoUtils.assert_non_reserved_name(name)
         | 
| 582 705 | 
             
                    end
         | 
| 583 706 |  | 
| @@ -589,10 +712,37 @@ module Temporalio | |
| 589 712 | 
             
                        description:,
         | 
| 590 713 | 
             
                        raw_args:,
         | 
| 591 714 | 
             
                        unfinished_policy:,
         | 
| 592 | 
            -
                        validator_to_invoke | 
| 715 | 
            +
                        validator_to_invoke:,
         | 
| 716 | 
            +
                        arg_hints:,
         | 
| 717 | 
            +
                        result_hint:
         | 
| 593 718 | 
             
                      )
         | 
| 594 719 | 
             
                    end
         | 
| 595 720 | 
             
                  end
         | 
| 596 721 | 
             
                end
         | 
| 722 | 
            +
             | 
| 723 | 
            +
                DefinitionOptions = Struct.new(
         | 
| 724 | 
            +
                  :failure_exception_types,
         | 
| 725 | 
            +
                  :versioning_behavior
         | 
| 726 | 
            +
                )
         | 
| 727 | 
            +
                # @!attribute failure_exception_types
         | 
| 728 | 
            +
                #   Dynamic equivalent of {Definition.workflow_failure_exception_type}.
         | 
| 729 | 
            +
                #   Will override any types set there if set, including if set to an empty array.
         | 
| 730 | 
            +
                #   @return [Array<Class<Exception>>, nil] The failure exception types
         | 
| 731 | 
            +
                #
         | 
| 732 | 
            +
                # @!attribute versioning_behavior
         | 
| 733 | 
            +
                #   Dynamic equivalent of {Definition.workflow_versioning_behavior}.
         | 
| 734 | 
            +
                #   Will override any behavior set there if set.
         | 
| 735 | 
            +
                #   WARNING: Deployment-based versioning is experimental and APIs may change.
         | 
| 736 | 
            +
                #   @return [VersioningBehavior, nil] The versioning behavior
         | 
| 737 | 
            +
                #
         | 
| 738 | 
            +
                # @return [VersioningBehavior, nil] The versioning behavior
         | 
| 739 | 
            +
                class DefinitionOptions
         | 
| 740 | 
            +
                  def initialize(
         | 
| 741 | 
            +
                    failure_exception_types: nil,
         | 
| 742 | 
            +
                    versioning_behavior: nil
         | 
| 743 | 
            +
                  )
         | 
| 744 | 
            +
                    super
         | 
| 745 | 
            +
                  end
         | 
| 746 | 
            +
                end
         | 
| 597 747 | 
             
              end
         | 
| 598 748 | 
             
            end
         | 
| @@ -28,7 +28,9 @@ module Temporalio | |
| 28 28 | 
             
                  # @param signal [Workflow::Definition::Signal, Symbol, String] Signal definition or name.
         | 
| 29 29 | 
             
                  # @param args [Array<Object>] Signal args.
         | 
| 30 30 | 
             
                  # @param cancellation [Cancellation] Cancellation for canceling the signalling.
         | 
| 31 | 
            -
                   | 
| 31 | 
            +
                  # @param arg_hints [Array<Object>, nil] Overrides converter hints for arguments if any. If unset/nil and the
         | 
| 32 | 
            +
                  #   signal definition has arg hints, those are used by default.
         | 
| 33 | 
            +
                  def signal(signal, *args, cancellation: Workflow.cancellation, arg_hints: nil)
         | 
| 32 34 | 
             
                    raise NotImplementedError
         | 
| 33 35 | 
             
                  end
         | 
| 34 36 |  | 
| @@ -12,6 +12,7 @@ module Temporalio | |
| 12 12 | 
             
                  :last_result,
         | 
| 13 13 | 
             
                  :namespace,
         | 
| 14 14 | 
             
                  :parent,
         | 
| 15 | 
            +
                  :priority,
         | 
| 15 16 | 
             
                  :retry_policy,
         | 
| 16 17 | 
             
                  :root,
         | 
| 17 18 | 
             
                  :run_id,
         | 
| @@ -44,6 +45,8 @@ module Temporalio | |
| 44 45 | 
             
                #   @return [String] Namespace for the workflow.
         | 
| 45 46 | 
             
                # @!attribute parent
         | 
| 46 47 | 
             
                #   @return [ParentInfo, nil] Parent information for the workflow if this is a child.
         | 
| 48 | 
            +
                # @!attribute priority
         | 
| 49 | 
            +
                #   @return [Priority] The priority of this workflow.
         | 
| 47 50 | 
             
                # @!attribute retry_policy
         | 
| 48 51 | 
             
                #   @return [RetryPolicy, nil] Retry policy for the workflow.
         | 
| 49 52 | 
             
                # @!attribute root
         | 
| @@ -54,7 +57,7 @@ module Temporalio | |
| 54 57 | 
             
                # @!attribute run_timeout
         | 
| 55 58 | 
             
                #   @return [Float, nil] Run timeout for the workflow.
         | 
| 56 59 | 
             
                # @!attribute start_time
         | 
| 57 | 
            -
                #   @return [Time] Time when the workflow started.
         | 
| 60 | 
            +
                #   @return [Time] Time when the workflow started on the server.
         | 
| 58 61 | 
             
                # @!attribute task_queue
         | 
| 59 62 | 
             
                #   @return [String] Task queue for the workflow.
         | 
| 60 63 | 
             
                # @!attribute task_timeout
         | 
    
        data/lib/temporalio/workflow.rb
    CHANGED
    
    | @@ -2,6 +2,7 @@ | |
| 2 2 |  | 
| 3 3 | 
             
            require 'random/formatter'
         | 
| 4 4 | 
             
            require 'temporalio/error'
         | 
| 5 | 
            +
            require 'temporalio/priority'
         | 
| 5 6 | 
             
            require 'temporalio/workflow/activity_cancellation_type'
         | 
| 6 7 | 
             
            require 'temporalio/workflow/child_workflow_cancellation_type'
         | 
| 7 8 | 
             
            require 'temporalio/workflow/child_workflow_handle'
         | 
| @@ -56,6 +57,18 @@ module Temporalio | |
| 56 57 | 
             
                  _current.current_details = details
         | 
| 57 58 | 
             
                end
         | 
| 58 59 |  | 
| 60 | 
            +
                # Get the deployment version of the worker which executed the current Workflow Task.
         | 
| 61 | 
            +
                #
         | 
| 62 | 
            +
                # May be nil if the task was completed by a worker without a deployment version or build id. If
         | 
| 63 | 
            +
                # this worker is the one executing this task for the first time and has a deployment version
         | 
| 64 | 
            +
                # set, then its ID will be used. This value may change over the lifetime of the workflow run,
         | 
| 65 | 
            +
                # but is deterministic and safe to use for branching. This is currently experimental.
         | 
| 66 | 
            +
                #
         | 
| 67 | 
            +
                # @return [WorkerDeploymentVersion, nil] the current deployment version if any.
         | 
| 68 | 
            +
                def self.current_deployment_version
         | 
| 69 | 
            +
                  _current.current_deployment_version
         | 
| 70 | 
            +
                end
         | 
| 71 | 
            +
             | 
| 59 72 | 
             
                # @return [Integer] Current number of events in history. This value is the current history event count up until the
         | 
| 60 73 | 
             
                #   current task. Note, this value may not be up to date when accessed in a query.
         | 
| 61 74 | 
             
                def self.current_history_length
         | 
| @@ -118,6 +131,11 @@ module Temporalio | |
| 118 131 | 
             
                #   optimization on some servers that sends activities back to the same worker as the calling workflow if they can
         | 
| 119 132 | 
             
                #   run there. If `false` (the default), eager execution may still be disabled at the worker level or may not be
         | 
| 120 133 | 
             
                #   requested due to lack of available slots.
         | 
| 134 | 
            +
                # @param priority [Priority] Priority of the activity. This is currently experimental.
         | 
| 135 | 
            +
                # @param arg_hints [Array<Object>, nil] Overrides converter hints for arguments if any. If unset/nil and the
         | 
| 136 | 
            +
                #   activity definition has arg hints, those are used by default.
         | 
| 137 | 
            +
                # @param result_hint [Object, nil] Overrides converter hint for result if any. If unset/nil and the activity
         | 
| 138 | 
            +
                #   definition has result hint, it is used by default.
         | 
| 121 139 | 
             
                #
         | 
| 122 140 | 
             
                # @return [Object] Result of the activity.
         | 
| 123 141 | 
             
                # @raise [Error::ActivityError] Activity failed (and retry was disabled or exhausted).
         | 
| @@ -136,12 +154,16 @@ module Temporalio | |
| 136 154 | 
             
                  cancellation: Workflow.cancellation,
         | 
| 137 155 | 
             
                  cancellation_type: ActivityCancellationType::TRY_CANCEL,
         | 
| 138 156 | 
             
                  activity_id: nil,
         | 
| 139 | 
            -
                  disable_eager_execution: false
         | 
| 157 | 
            +
                  disable_eager_execution: false,
         | 
| 158 | 
            +
                  priority: Priority.default,
         | 
| 159 | 
            +
                  arg_hints: nil,
         | 
| 160 | 
            +
                  result_hint: nil
         | 
| 140 161 | 
             
                )
         | 
| 141 162 | 
             
                  _current.execute_activity(
         | 
| 142 163 | 
             
                    activity, *args,
         | 
| 143 164 | 
             
                    task_queue:, summary:, schedule_to_close_timeout:, schedule_to_start_timeout:, start_to_close_timeout:,
         | 
| 144 | 
            -
                    heartbeat_timeout:, retry_policy:, cancellation:, cancellation_type:, activity_id:, disable_eager_execution | 
| 165 | 
            +
                    heartbeat_timeout:, retry_policy:, cancellation:, cancellation_type:, activity_id:, disable_eager_execution:,
         | 
| 166 | 
            +
                    priority:, arg_hints:, result_hint:
         | 
| 145 167 | 
             
                  )
         | 
| 146 168 | 
             
                end
         | 
| 147 169 |  | 
| @@ -163,13 +185,16 @@ module Temporalio | |
| 163 185 | 
             
                  retry_policy: nil,
         | 
| 164 186 | 
             
                  cron_schedule: nil,
         | 
| 165 187 | 
             
                  memo: nil,
         | 
| 166 | 
            -
                  search_attributes: nil
         | 
| 188 | 
            +
                  search_attributes: nil,
         | 
| 189 | 
            +
                  priority: Priority.default,
         | 
| 190 | 
            +
                  arg_hints: nil,
         | 
| 191 | 
            +
                  result_hint: nil
         | 
| 167 192 | 
             
                )
         | 
| 168 193 | 
             
                  start_child_workflow(
         | 
| 169 194 | 
             
                    workflow, *args,
         | 
| 170 195 | 
             
                    id:, task_queue:, static_summary:, static_details:, cancellation:, cancellation_type:,
         | 
| 171 196 | 
             
                    parent_close_policy:, execution_timeout:, run_timeout:, task_timeout:, id_reuse_policy:,
         | 
| 172 | 
            -
                    retry_policy:, cron_schedule:, memo:, search_attributes:
         | 
| 197 | 
            +
                    retry_policy:, cron_schedule:, memo:, search_attributes:, priority:, arg_hints:, result_hint:
         | 
| 173 198 | 
             
                  ).result
         | 
| 174 199 | 
             
                end
         | 
| 175 200 |  | 
| @@ -200,6 +225,10 @@ module Temporalio | |
| 200 225 | 
             
                #   workflow.
         | 
| 201 226 | 
             
                # @param activity_id [String, nil] Optional unique identifier for the activity. This is an advanced setting that
         | 
| 202 227 | 
             
                #   should not be set unless users are sure they need to. Contact Temporal before setting this value.
         | 
| 228 | 
            +
                # @param arg_hints [Array<Object>, nil] Overrides converter hints for arguments if any. If unset/nil and the
         | 
| 229 | 
            +
                #   activity definition has arg hints, those are used by default.
         | 
| 230 | 
            +
                # @param result_hint [Object, nil] Overrides converter hint for result if any. If unset/nil and the activity
         | 
| 231 | 
            +
                #   definition has result hint, it is used by default.
         | 
| 203 232 | 
             
                #
         | 
| 204 233 | 
             
                # @return [Object] Result of the activity.
         | 
| 205 234 | 
             
                # @raise [Error::ActivityError] Activity failed (and retry was disabled or exhausted).
         | 
| @@ -215,12 +244,15 @@ module Temporalio | |
| 215 244 | 
             
                  local_retry_threshold: nil,
         | 
| 216 245 | 
             
                  cancellation: Workflow.cancellation,
         | 
| 217 246 | 
             
                  cancellation_type: ActivityCancellationType::TRY_CANCEL,
         | 
| 218 | 
            -
                  activity_id: nil
         | 
| 247 | 
            +
                  activity_id: nil,
         | 
| 248 | 
            +
                  arg_hints: nil,
         | 
| 249 | 
            +
                  result_hint: nil
         | 
| 219 250 | 
             
                )
         | 
| 220 251 | 
             
                  _current.execute_local_activity(
         | 
| 221 252 | 
             
                    activity, *args,
         | 
| 222 253 | 
             
                    schedule_to_close_timeout:, schedule_to_start_timeout:, start_to_close_timeout:,
         | 
| 223 | 
            -
                    retry_policy:, local_retry_threshold:, cancellation:, cancellation_type:, | 
| 254 | 
            +
                    retry_policy:, local_retry_threshold:, cancellation:, cancellation_type:,
         | 
| 255 | 
            +
                    activity_id:, arg_hints:, result_hint:
         | 
| 224 256 | 
             
                  )
         | 
| 225 257 | 
             
                end
         | 
| 226 258 |  | 
| @@ -360,6 +392,11 @@ module Temporalio | |
| 360 392 | 
             
                # @param cron_schedule [String, nil] Cron schedule. Users should use schedules instead of this.
         | 
| 361 393 | 
             
                # @param memo [Hash{String, Symbol => Object}, nil] Memo for the workflow.
         | 
| 362 394 | 
             
                # @param search_attributes [SearchAttributes, nil] Search attributes for the workflow.
         | 
| 395 | 
            +
                # @param priority [Priority] Priority of the workflow. This is currently experimental.
         | 
| 396 | 
            +
                # @param arg_hints [Array<Object>, nil] Overrides converter hints for arguments if any. If unset/nil and the
         | 
| 397 | 
            +
                #   workflow definition has arg hints, those are used by default.
         | 
| 398 | 
            +
                # @param result_hint [Object, nil] Overrides converter hint for result if any. If unset/nil and the workflow
         | 
| 399 | 
            +
                #   definition has result hint, it is used by default.
         | 
| 363 400 | 
             
                #
         | 
| 364 401 | 
             
                # @return [ChildWorkflowHandle] Workflow handle to the started workflow.
         | 
| 365 402 | 
             
                # @raise [Error::WorkflowAlreadyStartedError] Workflow already exists for the ID.
         | 
| @@ -381,13 +418,16 @@ module Temporalio | |
| 381 418 | 
             
                  retry_policy: nil,
         | 
| 382 419 | 
             
                  cron_schedule: nil,
         | 
| 383 420 | 
             
                  memo: nil,
         | 
| 384 | 
            -
                  search_attributes: nil
         | 
| 421 | 
            +
                  search_attributes: nil,
         | 
| 422 | 
            +
                  priority: Priority.default,
         | 
| 423 | 
            +
                  arg_hints: nil,
         | 
| 424 | 
            +
                  result_hint: nil
         | 
| 385 425 | 
             
                )
         | 
| 386 426 | 
             
                  _current.start_child_workflow(
         | 
| 387 427 | 
             
                    workflow, *args,
         | 
| 388 428 | 
             
                    id:, task_queue:, static_summary:, static_details:, cancellation:, cancellation_type:,
         | 
| 389 429 | 
             
                    parent_close_policy:, execution_timeout:, run_timeout:, task_timeout:, id_reuse_policy:,
         | 
| 390 | 
            -
                    retry_policy:, cron_schedule:, memo:, search_attributes:
         | 
| 430 | 
            +
                    retry_policy:, cron_schedule:, memo:, search_attributes:, priority:, arg_hints:, result_hint:
         | 
| 391 431 | 
             
                  )
         | 
| 392 432 | 
             
                end
         | 
| 393 433 |  | 
| @@ -510,12 +550,20 @@ module Temporalio | |
| 510 550 | 
             
                  def self.io_enabled(&)
         | 
| 511 551 | 
             
                    Workflow._current.io_enabled(&)
         | 
| 512 552 | 
             
                  end
         | 
| 553 | 
            +
             | 
| 554 | 
            +
                  # Run a block of code with the durable/deterministic workflow Fiber scheduler off. This means fallback to default
         | 
| 555 | 
            +
                  # fiber scheduler and no workflow helpers will be available in the block. This is usually only needed in advanced
         | 
| 556 | 
            +
                  # situations where a third party library does something like use "Timeout" in a way that shouldn't be made
         | 
| 557 | 
            +
                  # durable.
         | 
| 558 | 
            +
                  def self.durable_scheduler_disabled(&)
         | 
| 559 | 
            +
                    Workflow._current.durable_scheduler_disabled(&)
         | 
| 560 | 
            +
                  end
         | 
| 513 561 | 
             
                end
         | 
| 514 562 |  | 
| 515 563 | 
             
                # Error that is raised by a workflow out of the primary workflow method to issue a continue-as-new.
         | 
| 516 564 | 
             
                class ContinueAsNewError < Error
         | 
| 517 565 | 
             
                  attr_accessor :args, :workflow, :task_queue, :run_timeout, :task_timeout,
         | 
| 518 | 
            -
                                :retry_policy, :memo, :search_attributes, :headers
         | 
| 566 | 
            +
                                :retry_policy, :memo, :search_attributes, :arg_hints, :headers
         | 
| 519 567 |  | 
| 520 568 | 
             
                  # Create a continue as new error.
         | 
| 521 569 | 
             
                  #
         | 
| @@ -534,6 +582,8 @@ module Temporalio | |
| 534 582 | 
             
                  #   is used.
         | 
| 535 583 | 
             
                  # @param search_attributes [SearchAttributes, nil] Search attributes for the workflow. If unset/nil, the current
         | 
| 536 584 | 
             
                  #   workflow search attributes are used.
         | 
| 585 | 
            +
                  # @param arg_hints [Array<Object>, nil] Overrides converter hints for arguments if any. If unset/nil and the
         | 
| 586 | 
            +
                  #   workflow definition has arg hints, those are used by default.
         | 
| 537 587 | 
             
                  # @param headers [Hash<String, Object>] Headers for the workflow. The default is _not_ carried over from the
         | 
| 538 588 | 
             
                  #   current workflow.
         | 
| 539 589 | 
             
                  def initialize(
         | 
| @@ -545,6 +595,7 @@ module Temporalio | |
| 545 595 | 
             
                    retry_policy: nil,
         | 
| 546 596 | 
             
                    memo: nil,
         | 
| 547 597 | 
             
                    search_attributes: nil,
         | 
| 598 | 
            +
                    arg_hints: nil,
         | 
| 548 599 | 
             
                    headers: {}
         | 
| 549 600 | 
             
                  )
         | 
| 550 601 | 
             
                    super('Continue as new')
         | 
| @@ -556,6 +607,7 @@ module Temporalio | |
| 556 607 | 
             
                    @retry_policy = retry_policy
         | 
| 557 608 | 
             
                    @memo = memo
         | 
| 558 609 | 
             
                    @search_attributes = search_attributes
         | 
| 610 | 
            +
                    @arg_hints = arg_hints
         | 
| 559 611 | 
             
                    @headers = headers
         | 
| 560 612 | 
             
                    Workflow._current.initialize_continue_as_new_error(self)
         | 
| 561 613 | 
             
                  end
         |