Sha256: c065c58ff9a571c2b0e6b66e7def8ff28bc70ffbf9dd65d3b9736c5c06eb423a

Contents?: true

Size: 1.16 KB

Versions: 6

Compression:

Stored size: 1.16 KB

Contents

# frozen_string_literal: true

require 'rom/pipeline'

module ROM
  module Commands
    # Composite command that consists of left and right commands
    #
    # @api public
    class Composite < Pipeline::Composite
      # Calls the composite command
      #
      # Right command is called with a result from the left one
      #
      # @return [Object]
      #
      # @api public
      def call(*args)
        response = left.call(*args)

        if response.nil? || (many? && response.size == 0)
          return one? ? nil : EMPTY_ARRAY
        end

        if one? && !graph?
          if right.is_a?(Command) || right.is_a?(Commands::Composite)
            right.call([response].first)
          else
            right.call([response]).first
          end
        elsif one? && graph?
          right.call(response).first
        else
          right.call(response)
        end
      end
      alias_method :[], :call

      # @api private
      def graph?
        left.is_a?(Graph)
      end

      # @api private
      def result
        left.result
      end

      # @api private
      def decorate?(response)
        super || response.is_a?(Graph)
      end
    end
  end
end

Version data entries

6 entries across 6 versions & 1 rubygems

Version Path
rom-core-5.1.2 lib/rom/commands/composite.rb
rom-core-5.1.1 lib/rom/commands/composite.rb
rom-core-5.1.0 lib/rom/commands/composite.rb
rom-core-5.0.2 lib/rom/commands/composite.rb
rom-core-5.0.1 lib/rom/commands/composite.rb
rom-core-5.0.0 lib/rom/commands/composite.rb