module CachedResource # The Model module is included in ActiveResource::Base and # provides methods to enable caching and manipulate the caching # configuration module Model extend ActiveSupport::Concern included do class << self attr_accessor :cached_resource # Initialize cached resource or retrieve the current cached resource configuration. def cached_resource(options = {}) defined?(@cached_resource) && @cached_resource || setup_cached_resource!(options) end # Set up cached resource for this class by creating a new configuration # and establishing the necessary methods. def setup_cached_resource!(options) @cached_resource = CachedResource::Configuration.new(options) send :include, CachedResource::Caching @cached_resource end end end module ClassMethods # Copy a superclass's cached resource configuration if # it's defined. Unfortunately, this means that any subclass # that wants an independent configuration will need to execute: # self.cached_resource = CachedResource::Configuration.new(options={}) def inherited(child) child.cached_resource = cached_resource if defined?(@cached_resource) super end end end end