Sha256: e144f6e53092ad88ef0589f820cf290bc30b9224addf2714a5d1a996cbb2ff69

Contents?: true

Size: 1.16 KB

Versions: 1

Compression:

Stored size: 1.16 KB

Contents

# encoding: utf-8

module ROM
  class Session

    # @api private
    class Tracker
      attr_reader :objects, :changelog
      private :objects, :changelog

      # @api private
      def initialize
        @objects   = {}
        @changelog = []
      end

      # @api private
      def commit
        @changelog.each { |state| update(state.commit) }
        @changelog = []
      end

      # @api private
      def fetch(identity)
        @objects.fetch(identity) { raise ObjectNotTrackedError, identity }
      end

      # @api private
      def include?(identity)
        @objects.key?(identity)
      end

      # @api private
      def clean?
        changelog.empty?
      end

      # @api private
      def queue(state)
        @changelog << state
        update(state)
      end

      # @api private
      def update(state)
        @objects[state.identity] = state
      end

      # @api private
      def store_transient(object, mapper)
        update(State::Transient.new(object, mapper))
      end

      # @api private
      def store_persisted(object, mapper)
        update(State::Persisted.new(object, mapper))
      end

    end # Tracker

  end # Session
end # ROM

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
rom-0.2.0 lib/rom/session/tracker.rb