Skip to content

Instantly share code, notes, and snippets.

@whoahbot
Created September 16, 2009 23:38
Show Gist options
  • Select an option

  • Save whoahbot/188240 to your computer and use it in GitHub Desktop.

Select an option

Save whoahbot/188240 to your computer and use it in GitHub Desktop.
require "moneta"
require 'moneta/redis'
module DataMapper
# Tracks objects to help ensure that each object gets loaded only once.
# See: http://www.martinfowler.com/eaaCatalog/identityMap.html
class IdentityMap < Moneta::Redis
extend Deprecate
deprecate :get, :[]
deprecate :set, :[]=
def [](key)
resource = Marshal.load(super(key))
resource.unmarshal
end
def []=(key, resource)
super(key, resource.marshal)
end
end # class IdentityMap
end # module DataMapper
def marshal
@repository = nil
marshalled_resource = Marshal.dump(self)
@repository = model.repository
marshalled_resource
end
def unmarshal
@repository = model.repository
self
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment