lib/trailblazer/operation/public_call.rb in trailblazer-operation-0.6.6 vs lib/trailblazer/operation/public_call.rb in trailblazer-operation-0.7.0

- old
+ new

@@ -11,31 +11,34 @@ # get removed in future versions of TRB. Currently, we use Operation::__call__ as an alternative. # # # @note Do not override this method as it will be removed in future versions. Also, you will break tracing. # @return Operation::Railway::Result binary result object - def call(options = {}, *args) - return call_with_circuit_interface(options, *args) if options.is_a?(Array) # This is kind of a hack that could be well hidden if Ruby had method overloading. Goal is to simplify the call/__call__ thing as we're fading out Operation::call anyway. + def call(options = {}, flow_options = {}, **circuit_options) + return call_with_circuit_interface(options, **circuit_options) if options.is_a?(Array) # This is kind of a hack that could be well hidden if Ruby had method overloading. Goal is to simplify the call/__call__ thing as we're fading out Operation::call anyway. - call_with_public_interface(options, *args) + call_with_public_interface(options, flow_options, **circuit_options) end # Default {@activity} call interface which doesn't accept {circuit_options} # # @param [Array] args => [ctx, flow_options] # # @return [Operation::Railway::Result] # # @private - def call_with_public_interface(options, flow_options = {}) + def call_with_public_interface(options, flow_options, invoke_class: Activity::TaskWrap, **circuit_options) flow_options = flow_options_for_public_call(flow_options) + + options = circuit_options.any? ? circuit_options : options # This is needed in Ruby 3 for {Create.(params: {})} calls. + + ctx = options_for_public_call(options, flow_options) # call the activity. # This will result in invoking {::call_with_circuit_interface}. - # last_signal, (options, flow_options) = Activity::TaskWrap.invoke(self, [ctx, {}], {}) - signal, (ctx, flow_options) = Activity::TaskWrap.invoke( + signal, (ctx, flow_options) = invoke_class.invoke( @activity, [ctx, flow_options], exec_context: new ) @@ -49,12 +52,12 @@ # @param [Hash] circuit_options - Options to configure activity circuit # # @return [signal, [ctx, flow_options]] # # @private - def call_with_circuit_interface(args, circuit_options) - strategy_call(args, circuit_options) # FastTrack#call + def call_with_circuit_interface(args, **circuit_options) + strategy_call(args, **circuit_options) # FastTrack#call end def options_for_public_call(*args) Operation::PublicCall.options_for_public_call(*args) end @@ -66,8 +69,14 @@ end # @semi=public def flow_options_for_public_call(options = {}) options + end + + # TODO: remove when we stop supporting < 3.0. + def call_with_flow_options(options, flow_options) + raise "[Trailblazer] `Operation.call_with_flow_options is deprecated in Ruby 3.0. Use `Operation.(options, flow_options)`" if Gem::Version.new(RUBY_VERSION) >= Gem::Version.new("3.0.0") + call_with_public_interface(options, flow_options, {invoke_class: Activity::TaskWrap}) end end end