def self.get(key,duration=0,expected_class=nil,returns_store_flag=false)
begin
unless Merb.env?(:test)
val = CACHE.get(key)
if !val.nil? and !expected_class.nil? and (expected_class != val.class and
expected_class != val.class.superclass and
expected_class != val.class.superclass.superclass)
Merb.logger.info("MEMCACHE: BAD CLASS: expected #{expected_class.to_s}, got #{val.class.to_s}")
CACHE.delete(key)
val=nil
end
if val.nil?
val = yield
duration = duration + rand(10) unless duration==0
if returns_store_flag
CACHE.add(key,val[1],duration) if val[0]
else
CACHE.add(key,val,duration)
end
end
else
val = yield
end
rescue Exception => e
Merb.logger.info("MEMCACHE ERROR: #{e.message} - (#{ e.class })")
val = yield
end
val
end