Sha256: 4f4241628a0c69b2f0100d26585351f386f64521b8c69556bbb90cb9258c930a

Contents?: true

Size: 1.36 KB

Versions: 2

Compression:

Stored size: 1.36 KB

Contents

# encoding: utf-8

module ROM
  class Session

    # Session-specific environment wrapping ROM's environment
    #
    # It works exactly the same as ROM::Environment except it returns
    # session relations
    #
    # @api public
    class Environment < ROM::Environment
      include Proxy

      attr_reader :environment, :tracker, :memory
      private :environment, :tracker, :memory

      # @api private
      def self.build(environment, tracker = Tracker.new)
        new(environment, tracker)
      end

      # @api private
      def initialize(environment, tracker)
        @environment = environment
        @tracker     = tracker
        initialize_memory
      end

      # Return a relation identified by name
      #
      # @param [Symbol] name of a relation
      #
      # @return [Session::Relation] rom's relation wrapped by session
      #
      # @api public
      def [](name)
        memory[name]
      end

      # @api private
      def commit
        tracker.commit
      end

      # @api private
      def clean?
        tracker.clean?
      end

      private

      # @api private
      def initialize_memory
        @memory = Hash.new { |_, name| memory[name] = build_relation(name) }
      end

      # @api private
      def build_relation(name)
        Relation.build(environment[name], tracker)
      end

    end # Environment

  end # Session
end # ROM

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
rom-session-0.1.1 lib/rom/session/environment.rb
rom-session-0.1.0 lib/rom/session/environment.rb