Class: Temporalio::Activity::Definition::Info

Inherits:
Object
  • Object
show all
Defined in:
lib/temporalio/activity/definition.rb

Overview

Definition info of an activity. Activities are usually classes/instances that extend Temporalio::Activity::Definition, but definitions can also be manually created with a block via #initialize here.

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(name:, instance: nil, executor: :default, cancel_raise: true, raw_args: false, arg_hints: nil, result_hint: nil) { ... } ⇒ Info

Manually create activity definition info. Most users will use an instance/class of Temporalio::Activity::Definition.

Parameters:

  • name (String, Symbol, nil)

    Name of the activity or nil for dynamic activity.

  • instance (Object, Proc, nil) (defaults to: nil)

    The pre-created instance or the proc to create/return it.

  • executor (Symbol) (defaults to: :default)

    Name of the executor.

  • cancel_raise (Boolean) (defaults to: true)

    Whether to raise in thread/fiber on cancellation.

  • raw_args (Boolean) (defaults to: false)

    Whether to use Converters::RawValues as arguments.

  • arg_hints (Array<Object>, nil) (defaults to: nil)

    Argument hints.

  • result_hint (Object, nil) (defaults to: nil)

    Result hint.

Yields:

  • Use this block as the activity.

Raises:

  • (ArgumentError)


232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
# File 'lib/temporalio/activity/definition.rb', line 232

def initialize(
  name:,
  instance: nil,
  executor: :default,
  cancel_raise: true,
  raw_args: false,
  arg_hints: nil,
  result_hint: nil,
  &block
)
  @name = name
  @instance = instance
  raise ArgumentError, 'Must give block' unless block_given?

  @proc = block
  @executor = executor
  @cancel_raise = cancel_raise
  @raw_args = raw_args
  @arg_hints = arg_hints
  @result_hint = result_hint
  Internal::ProtoUtils.assert_non_reserved_name(name)
end

Instance Attribute Details

#arg_hintsArray<Object>? (readonly)

Returns Argument hints.

Returns:

  • (Array<Object>, nil)

    Argument hints.



153
154
155
# File 'lib/temporalio/activity/definition.rb', line 153

def arg_hints
  @arg_hints
end

#cancel_raiseBoolean (readonly)

Returns Whether to raise in thread/fiber on cancellation. Default is ‘true`.

Returns:

  • (Boolean)

    Whether to raise in thread/fiber on cancellation. Default is ‘true`.



147
148
149
# File 'lib/temporalio/activity/definition.rb', line 147

def cancel_raise
  @cancel_raise
end

#executorSymbol (readonly)

Returns Name of the executor. Default is ‘:default`.

Returns:

  • (Symbol)

    Name of the executor. Default is ‘:default`.



144
145
146
# File 'lib/temporalio/activity/definition.rb', line 144

def executor
  @executor
end

#instanceObject, ... (readonly)

Returns The pre-created instance or the proc to create/return it.

Returns:

  • (Object, Proc, nil)

    The pre-created instance or the proc to create/return it.



138
139
140
# File 'lib/temporalio/activity/definition.rb', line 138

def instance
  @instance
end

#nameString, ... (readonly)

Returns Name of the activity, or nil if the activity is dynamic.

Returns:

  • (String, Symbol, nil)

    Name of the activity, or nil if the activity is dynamic.



135
136
137
# File 'lib/temporalio/activity/definition.rb', line 135

def name
  @name
end

#procProc (readonly)

Returns Proc for the activity. Should use Context#instance to access the instance.

Returns:

  • (Proc)

    Proc for the activity. Should use Context#instance to access the instance.



141
142
143
# File 'lib/temporalio/activity/definition.rb', line 141

def proc
  @proc
end

#raw_argsBoolean (readonly)

Returns Whether to use Converters::RawValues as arguments.

Returns:



150
151
152
# File 'lib/temporalio/activity/definition.rb', line 150

def raw_args
  @raw_args
end

#result_hintObject? (readonly)

Returns Result hint.

Returns:

  • (Object, nil)

    Result hint



156
157
158
# File 'lib/temporalio/activity/definition.rb', line 156

def result_hint
  @result_hint
end

Class Method Details

._type_and_hints_from_parameter(activity) ⇒ Array(String, Array[Object]?, Object?)

Resolve an activity argument into a ‘[name, arg_hints, result_hint]` triple. Used by `Client#start_activity` to accept any of: a `Definition` subclass, an instance of one, an `Info`, a `Symbol` activity name, or a `String` activity name. Class/instance/Info inputs carry their definition’s hints; Symbol/String inputs return ‘nil` hints.

Parameters:

Returns:

  • (Array(String, Array[Object]?, Object?))

    name, arg_hints, result_hint.



165
166
167
168
169
170
171
172
173
174
175
176
177
178
# File 'lib/temporalio/activity/definition.rb', line 165

def self._type_and_hints_from_parameter(activity)
  case activity
  when String, Symbol
    [activity.to_s, nil, nil]
  when Class, Definition, Info
    # Return or construct an Info -- needed because we want the checks in Info.initialize.
    info = from_activity(activity)
    raise ArgumentError, 'Cannot pass dynamic activity to start_activity' unless info.name

    [info.name.to_s, info.arg_hints, info.result_hint]
  else
    raise ArgumentError, "#{activity} is not an activity class, instance, info, symbol, or string"
  end
end

.from_activity(activity) ⇒ Object

Obtain definition info representing the given activity, which can be a class, instance, or definition info.

Parameters:

Returns:

  • Info Obtained definition info.



184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
# File 'lib/temporalio/activity/definition.rb', line 184

def self.from_activity(activity)
  # Class means create each time, instance means just call, definition
  # does nothing special
  case activity
  when Class
    unless activity < Definition
      raise ArgumentError,
            "Class '#{activity}' does not extend Temporalio::Activity::Definition"
    end

    details = activity._activity_definition_details
    new(
      name: details[:activity_name],
      instance: proc { activity.new },
      executor: details[:activity_executor],
      cancel_raise: details[:activity_cancel_raise],
      raw_args: details[:activity_raw_args],
      arg_hints: details[:activity_arg_hints],
      result_hint: details[:activity_result_hint]
    ) { |*args| Context.current.instance&.execute(*args) }
  when Definition
    details = activity._activity_definition_details
    new(
      name: details[:activity_name],
      instance: activity,
      executor: details[:activity_executor],
      cancel_raise: details[:activity_cancel_raise],
      raw_args: details[:activity_raw_args],
      arg_hints: details[:activity_arg_hints],
      result_hint: details[:activity_result_hint]
    ) { |*args| Context.current.instance&.execute(*args) }
  when Info
    activity
  else
    raise ArgumentError, "#{activity} is not an activity class, instance, or definition info"
  end
end