Sha256: 7751fbe60850dd72950ad9196b8a6b92e7bbd9ae107971db4abdcf164aee343e
Contents?: true
Size: 1.71 KB
Versions: 1
Compression:
Stored size: 1.71 KB
Contents
require 'dry/equalizer' require 'rom/initializer' require 'rom/relation/loaded' require 'rom/relation/composite' require 'rom/relation/materializable' require 'rom/pipeline' require 'rom/support/memoizable' module ROM class Relation # Abstract relation graph class # # @api public class Graph extend Initializer include Memoizable param :root param :nodes include Dry::Equalizer(:root, :nodes) include Materializable include Pipeline include Pipeline::Proxy # Root aka parent relation # # @return [Relation] # # @api private attr_reader :root # Child relation nodes # # @return [Array<Relation>] # # @api private attr_reader :nodes alias_method :left, :root alias_method :right, :nodes # @api public def with_nodes(nodes) self.class.new(root, nodes) end # Return if this is a graph relation # # @return [true] # # @api private def graph? true end # @api public def map_with(*args) self.class.new(root.map_with(*args), nodes) end # @api public def map_to(klass) self.class.new(root.map_to(klass), nodes) end # @api private def mapper mappers[to_ast] end # @api private memoize def to_ast [:relation, [name.relation, attr_ast + nodes.map(&:to_ast), meta_ast]] end private # @api private def decorate?(other) super || other.is_a?(Composite) || other.is_a?(Curried) end # @api private def composite_class Relation::Composite end end end end
Version data entries
1 entries across 1 versions & 1 rubygems
Version | Path |
---|---|
rom-core-4.0.0.beta3 | lib/rom/relation/graph.rb |