Sha256: e23e9268280473061d665a5255330c9191b1fe309eb29eeeae476710ef6328f1

Contents?: true

Size: 1007 Bytes

Versions: 17

Compression:

Stored size: 1007 Bytes

Contents

module DataMapper

  # Tracks objects to help ensure that each object gets loaded only once.
  # See: http://www.martinfowler.com/eaaCatalog/identityMap.html
  class IdentityMap
    # Get a resource from the IdentityMap
    def get(key)
      @cache[key] || (@second_level_cache && @second_level_cache.get(key))
    end

    alias [] get

    # Add a resource to the IdentityMap
    def set(key, resource)
      @second_level_cache.set(key, resource) if @second_level_cache
      @cache[key] = resource
    end

    alias []= set

    # Remove a resource from the IdentityMap
    def delete(key)
      @second_level_cache.delete(key) if @second_level_cache
      @cache.delete(key)
    end

    private

    def initialize(second_level_cache = nil)
      @cache = {}
      @second_level_cache = second_level_cache
    end

    def cache
      @cache
    end

    def method_missing(method, *args, &block)
      cache.__send__(method, *args, &block)
    end
  end # class IdentityMap
end # module DataMapper

Version data entries

17 entries across 17 versions & 5 rubygems

Version Path
datamapper-dm-core-0.9.11 lib/dm-core/identity_map.rb
rpbertp13-dm-core-0.9.11.1 lib/dm-core/identity_map.rb
rpbertp13-dm-core-0.9.11.2 lib/dm-core/identity_map.rb
sam-dm-core-0.9.10 lib/dm-core/identity_map.rb
sam-dm-core-0.9.11 lib/dm-core/identity_map.rb
sam-dm-core-0.9.7 lib/dm-core/identity_map.rb
sam-dm-core-0.9.8 lib/dm-core/identity_map.rb
sam-dm-core-0.9.9 lib/dm-core/identity_map.rb
dm-core-0.9.11 lib/dm-core/identity_map.rb
dm-core-0.9.10 lib/dm-core/identity_map.rb
dm-core-0.9.6 lib/dm-core/identity_map.rb
dm-core-0.9.7 lib/dm-core/identity_map.rb
dm-core-0.9.9 lib/dm-core/identity_map.rb
dm-core-0.9.8 lib/dm-core/identity_map.rb
mack-data_mapper-0.8.2 lib/gems/dm-core-0.9.7/lib/dm-core/identity_map.rb
mack-data_mapper-0.8.3 lib/gems/dm-core-0.9.9/lib/dm-core/identity_map.rb
mack-data_mapper-0.8.3.1 lib/gems/dm-core-0.9.9/lib/dm-core/identity_map.rb