lib/fume/render_cache.rb in fume-0.10.0a vs lib/fume/render_cache.rb in fume-0.10.0
- old
+ new
@@ -1,16 +1,10 @@
module Fume
module RenderCache
-
def self.init!
- if defined? ::ActionController::Base
- ::ActionController::Base.send :include, ControllerExtensions
- end
-
- if defined? ::ActiveRecord::Base
- ::ActiveRecord::Base.send :include, ActiveRecordExtensions
- end
+ ::ActionController::Base.send :include, ControllerExtensions if defined? ::ActionController::Base
+ ::ActiveRecord::Base.send :include, ActiveRecordExtensions if defined? ::ActiveRecord::Base
end
module ActiveRecordExtensions
extend ::ActiveSupport::Concern
@@ -36,16 +30,16 @@
if params[:cache]
params[:key] = build_render_cache_key(key)
params[:options] = options
- if fragment = params[:cache].read(params[:key])
+ if page = RenderCachePage.load(params[:cache].read(params[:key]))
params[:key] = nil
- response.charset = fragment[:charset]
- response.content_type = fragment[:content_type]
- self.response_body = fragment[:body].html_safe
+ response.charset = page.charset
+ response.content_type = page.content_type
+ self.response_body = page.body.html_safe
return
end
end
yield if block_given?
@@ -64,35 +58,47 @@
when Hash
obj.keys.sort.map { |k| "#{k}=#{self.key_to_string(obj[k])}" }.join("&")
when Array
obj.map { |val| self.key_to_string(val) }.join(",")
when Time, Date
- obj.to_s(:db)
+ obj.utc.iso8601
else
obj.to_s
end
end
end
class RenderCacheFilter
- def filter(controller)
+ def around(controller)
controller.render_cache_params ||= {
options: {},
cache: nil
}
+
controller.render_cache_params[:cache] = Rails.cache if controller.class.perform_caching
yield
params = controller.render_cache_params
if params[:key]
- content = {
- :charset => controller.response.charset,
- :content_type => controller.response.content_type,
- :body => controller.response_body.is_a?(Array) ? controller.response_body.join : controller.response_body
- }
- params[:cache].write(params[:key], content, params[:options])
+ page = RenderCachePage.new(controller.response.charset,
+ controller.response.content_type,
+ controller.response_body.is_a?(Array) ? controller.response_body.join : controller.response_body)
+ params[:cache].write(params[:key], page.dump, params[:options])
end
+ end
+ end
+
+ class RenderCachePage < Struct.new(:charset, :content_type, :body)
+ def self.load(io)
+ page = YAML.load(io) if io
+ page if page.is_a?(self)
+ rescue Exception
+ nil
+ end
+
+ def dump
+ YAML.dump(self)
end
end
end
end
\ No newline at end of file