rom-rb/rom-session

View on GitHub
lib/rom/session/identity_map.rb

Summary

Maintainability
A
0 mins
Test Coverage
# encoding: utf-8

module ROM
  class Session

    # @api private
    class IdentityMap
      include Concord.new(:objects)

      class LoadedObject
        include Concord::Public.new(:object, :tuple)
      end

      # @api private
      def self.build(objects = {})
        new(objects)
      end

      # @api private
      def [](identity)
        objects[identity]
      end

      # @api private
      def fetch_object(identity, &block)
        objects.fetch(identity, &block).object
      end

      # @api private
      def fetch_tuple(identity)
        self[identity].tuple
      end

      # @api private
      def store(identity, object, tuple)
        objects[identity] = LoadedObject.new(object, tuple)
        self
      end

    end # IdentityMap

  end # Session
end # ROM