Sha256: 93c1777a69efc1e5ee03e76cf844964400c8d38de71fed734bbe928b9faa98d7

Contents?: true

Size: 1005 Bytes

Versions: 29

Compression:

Stored size: 1005 Bytes

Contents

require 'rom/relation/loaded'
require 'rom/relation/materializable'
require 'rom/pipeline'

module ROM
  class Relation
    # Left-to-right relation composition used for data-pipelining
    #
    # @api public
    class Composite < Pipeline::Composite
      include Materializable

      # Call the pipeline by passing results from left to right
      #
      # Optional args are passed to the left object
      #
      # @return [Loaded]
      #
      # @api public
      def call(*args)
        relation = left.call(*args)
        response = right.call(relation)

        if response.is_a?(Loaded)
          response
        elsif relation.is_a?(Loaded)
          relation.new(response)
        else
          Loaded.new(relation, response)
        end
      end
      alias_method :[], :call

      private

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

Version data entries

29 entries across 29 versions & 2 rubygems

Version Path
rom-3.3.3 lib/rom/relation/composite.rb
rom-3.3.2 lib/rom/relation/composite.rb
rom-3.3.1 lib/rom/relation/composite.rb
rom-core-4.0.0.beta2 lib/rom/relation/composite.rb
rom-3.3.0 lib/rom/relation/composite.rb
rom-core-4.0.0.beta1 lib/rom/relation/composite.rb
rom-3.2.3 lib/rom/relation/composite.rb
rom-3.2.2 lib/rom/relation/composite.rb
rom-3.2.1 lib/rom/relation/composite.rb
rom-3.2.0 lib/rom/relation/composite.rb
rom-3.1.0 lib/rom/relation/composite.rb
rom-3.0.3 lib/rom/relation/composite.rb
rom-3.0.2 lib/rom/relation/composite.rb
rom-3.0.1 lib/rom/relation/composite.rb
rom-3.0.0 lib/rom/relation/composite.rb
rom-3.0.0.rc2 lib/rom/relation/composite.rb
rom-3.0.0.rc1 lib/rom/relation/composite.rb
rom-3.0.0.beta3 lib/rom/relation/composite.rb
rom-3.0.0.beta2 lib/rom/relation/composite.rb
rom-3.0.0.beta1 lib/rom/relation/composite.rb