module Logical 
  class CachedObject < ActionWebService::Struct 
    
    def self.uncached_class 
      eval("Uncached" + self.name.split('::')[-1]) 
    end 

    def self.cache_key(*params) 
      return "#{self .name}_#{self::VERSION}_#{params.join('_')}" 
    end 

    def self.get(*params) 
      key = cache_key(params) 
      CACHE[key] ||= self.uncached_class.get(params) 
    end 

    def self.rebuild(*params) 
      key = cache_key(params) 
      CACHE[key] = self.uncached_class.get(params) 
    end 

    def self.clear(*params) 
      key = cache_key(cache_key_params) 
      CACHE[key] = nil 
    end 

    class Sweeper < ActiveRecord::Observer 
      # obserwacja klasy ActiveRecord::Base 
    end 
  end 
end 

