Sha256: fd3a096206296e132b5591cb9ff20f1526208ab4693f252a8f1e5cddb78f050b

Contents?: true

Size: 653 Bytes

Versions: 2

Compression:

Stored size: 653 Bytes

Contents

module Plumbing
  module Actor
    class Inline
      def initialize target
        @target = target
      end

      # Send the message to the target and wrap the result
      def send_message(message_name, *, **, &)
        value = @target.send(message_name, *, **, &)
        Result.new(value)
      rescue => ex
        Result.new(ex)
      end

      def safely(&)
        send_message(:perform_safely, &)
        nil
      end

      def in_context? = true

      def stop = nil

      Result = Data.define(:result) do
        def value = result.is_a?(Exception) ? raise(result) : result
      end
      private_constant :Result
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
standard-procedure-plumbing-0.4.5 lib/plumbing/actor/inline.rb
standard-procedure-plumbing-0.4.4 lib/plumbing/actor/inline.rb