module Cms
  module Behaviors
    module FlushCacheOnChange
      def self.included(model_class)
        model_class.extend(MacroMethods)
        model_class.class_eval do
          def flush_cache_on_change?
            false
          end
        end
      end
      module MacroMethods      
        def flush_cache_on_change?
          !!@flush_cache_on_change
        end
        def flush_cache_on_change(options={})
          include InstanceMethods
          @flush_cache_on_change = true
          
          after_save :flush_cache
          after_destroy :flush_cache
        end
      end
      module InstanceMethods
        def flush_cache
          if Cms.caching_enabled?
            Cms.flush_cache
          end
        end
      end
    end
  end
end