1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
  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