From a24d067343e7b14f066490c011828d57599fa94f Mon Sep 17 00:00:00 2001
From: Stan Lo <a22301613@yahoo.com.tw>
Date: Wed, 30 Dec 2015 20:48:27 +0800
Subject: Move caching/fragments in ActionMailer and ActionController to
 action_dispatch/caching/fragments

---
 actionpack/lib/action_controller/caching.rb        |   7 +-
 .../lib/action_controller/caching/fragments.rb     | 148 ---------------------
 .../lib/action_dispatch/caching/fragments.rb       | 148 +++++++++++++++++++++
 3 files changed, 150 insertions(+), 153 deletions(-)
 delete mode 100644 actionpack/lib/action_controller/caching/fragments.rb
 create mode 100644 actionpack/lib/action_dispatch/caching/fragments.rb

(limited to 'actionpack')

diff --git a/actionpack/lib/action_controller/caching.rb b/actionpack/lib/action_controller/caching.rb
index 0b8fa2ea09..ae868e23ed 100644
--- a/actionpack/lib/action_controller/caching.rb
+++ b/actionpack/lib/action_controller/caching.rb
@@ -1,3 +1,4 @@
+require 'action_dispatch/caching/fragments'
 require 'fileutils'
 require 'uri'
 
@@ -26,10 +27,6 @@ module ActionController
     extend ActiveSupport::Concern
     extend ActiveSupport::Autoload
 
-    eager_autoload do
-      autoload :Fragments
-    end
-
     module ConfigMethods
       def cache_store
         config.cache_store
@@ -48,7 +45,7 @@ module ActionController
     include AbstractController::Callbacks
 
     include ConfigMethods
-    include Fragments
+    include ActionDispatch::Caching::Fragments
 
     included do
       extend ConfigMethods
diff --git a/actionpack/lib/action_controller/caching/fragments.rb b/actionpack/lib/action_controller/caching/fragments.rb
deleted file mode 100644
index b9ad51a9cf..0000000000
--- a/actionpack/lib/action_controller/caching/fragments.rb
+++ /dev/null
@@ -1,148 +0,0 @@
-module ActionController
-  module Caching
-    # Fragment caching is used for caching various blocks within
-    # views without caching the entire action as a whole. This is
-    # useful when certain elements of an action change frequently or
-    # depend on complicated state while other parts rarely change or
-    # can be shared amongst multiple parties. The caching is done using
-    # the +cache+ helper available in the Action View. See
-    # ActionView::Helpers::CacheHelper for more information.
-    #
-    # While it's strongly recommended that you use key-based cache
-    # expiration (see links in CacheHelper for more information),
-    # it is also possible to manually expire caches. For example:
-    #
-    #   expire_fragment('name_of_cache')
-    module Fragments
-      extend ActiveSupport::Concern
-
-      included do
-        if respond_to?(:class_attribute)
-          class_attribute :fragment_cache_keys
-        else
-          mattr_writer :fragment_cache_keys
-        end
-
-        self.fragment_cache_keys = []
-
-        helper_method :fragment_cache_key if respond_to?(:helper_method)
-      end
-
-      module ClassMethods
-        # Allows you to specify controller-wide key prefixes for
-        # cache fragments. Pass either a constant +value+, or a block
-        # which computes a value each time a cache key is generated.
-        #
-        # For example, you may want to prefix all fragment cache keys
-        # with a global version identifier, so you can easily
-        # invalidate all caches.
-        #
-        #   class ApplicationController
-        #     fragment_cache_key "v1"
-        #   end
-        #
-        # When it's time to invalidate all fragments, simply change
-        # the string constant. Or, progressively roll out the cache
-        # invalidation using a computed value:
-        #
-        #   class ApplicationController
-        #     fragment_cache_key do
-        #       @account.id.odd? ? "v1" : "v2"
-        #     end
-        #   end
-        def fragment_cache_key(value = nil, &key)
-          self.fragment_cache_keys += [key || ->{ value }]
-        end
-      end
-
-      # Given a key (as described in +expire_fragment+), returns
-      # a key suitable for use in reading, writing, or expiring a
-      # cached fragment. All keys begin with <tt>views/</tt>,
-      # followed by any controller-wide key prefix values, ending
-      # with the specified +key+ value. The key is expanded using
-      # ActiveSupport::Cache.expand_cache_key.
-      def fragment_cache_key(key)
-        head = self.class.fragment_cache_keys.map { |k| instance_exec(&k) }
-        tail = key.is_a?(Hash) ? url_for(key).split("://").last : key
-        ActiveSupport::Cache.expand_cache_key([*head, *tail], :views)
-      end
-
-      # Writes +content+ to the location signified by
-      # +key+ (see +expire_fragment+ for acceptable formats).
-      def write_fragment(key, content, options = nil)
-        return content unless cache_configured?
-
-        key = fragment_cache_key(key)
-        instrument_fragment_cache :write_fragment, key do
-          content = content.to_str
-          cache_store.write(key, content, options)
-        end
-        content
-      end
-
-      # Reads a cached fragment from the location signified by +key+
-      # (see +expire_fragment+ for acceptable formats).
-      def read_fragment(key, options = nil)
-        return unless cache_configured?
-
-        key = fragment_cache_key(key)
-        instrument_fragment_cache :read_fragment, key do
-          result = cache_store.read(key, options)
-          result.respond_to?(:html_safe) ? result.html_safe : result
-        end
-      end
-
-      # Check if a cached fragment from the location signified by
-      # +key+ exists (see +expire_fragment+ for acceptable formats).
-      def fragment_exist?(key, options = nil)
-        return unless cache_configured?
-        key = fragment_cache_key(key)
-
-        instrument_fragment_cache :exist_fragment?, key do
-          cache_store.exist?(key, options)
-        end
-      end
-
-      # Removes fragments from the cache.
-      #
-      # +key+ can take one of three forms:
-      #
-      # * String - This would normally take the form of a path, like
-      #   <tt>pages/45/notes</tt>.
-      # * Hash - Treated as an implicit call to +url_for+, like
-      #   <tt>{ controller: 'pages', action: 'notes', id: 45}</tt>
-      # * Regexp - Will remove any fragment that matches, so
-      #   <tt>%r{pages/\d*/notes}</tt> might remove all notes. Make sure you
-      #   don't use anchors in the regex (<tt>^</tt> or <tt>$</tt>) because
-      #   the actual filename matched looks like
-      #   <tt>./cache/filename/path.cache</tt>. Note: Regexp expiration is
-      #   only supported on caches that can iterate over all keys (unlike
-      #   memcached).
-      #
-      # +options+ is passed through to the cache store's +delete+
-      # method (or <tt>delete_matched</tt>, for Regexp keys).
-      def expire_fragment(key, options = nil)
-        return unless cache_configured?
-        key = fragment_cache_key(key) unless key.is_a?(Regexp)
-
-        instrument_fragment_cache :expire_fragment, key do
-          if key.is_a?(Regexp)
-            cache_store.delete_matched(key, options)
-          else
-            cache_store.delete(key, options)
-          end
-        end
-      end
-
-      def instrument_fragment_cache(name, key) # :nodoc:
-        payload = {
-          controller: controller_name,
-          action: action_name,
-          key: key
-        }
-
-        ActiveSupport::Notifications.instrument("#{name}.action_controller", payload) { yield }
-      end
-    end
-  end
-end
diff --git a/actionpack/lib/action_dispatch/caching/fragments.rb b/actionpack/lib/action_dispatch/caching/fragments.rb
new file mode 100644
index 0000000000..c410aaf03a
--- /dev/null
+++ b/actionpack/lib/action_dispatch/caching/fragments.rb
@@ -0,0 +1,148 @@
+module ActionDispatch
+  module Caching
+    # Fragment caching is used for caching various blocks within
+    # views without caching the entire action as a whole. This is
+    # useful when certain elements of an action change frequently or
+    # depend on complicated state while other parts rarely change or
+    # can be shared amongst multiple parties. The caching is done using
+    # the +cache+ helper available in the Action View. See
+    # ActionView::Helpers::CacheHelper for more information.
+    #
+    # While it's strongly recommended that you use key-based cache
+    # expiration (see links in CacheHelper for more information),
+    # it is also possible to manually expire caches. For example:
+    #
+    #   expire_fragment('name_of_cache')
+    module Fragments
+      extend ActiveSupport::Concern
+
+      included do
+        if respond_to?(:class_attribute)
+          class_attribute :fragment_cache_keys
+        else
+          mattr_writer :fragment_cache_keys
+        end
+
+        self.fragment_cache_keys = []
+
+        helper_method :fragment_cache_key if respond_to?(:helper_method)
+      end
+
+      module ClassMethods
+        # Allows you to specify controller-wide key prefixes for
+        # cache fragments. Pass either a constant +value+, or a block
+        # which computes a value each time a cache key is generated.
+        #
+        # For example, you may want to prefix all fragment cache keys
+        # with a global version identifier, so you can easily
+        # invalidate all caches.
+        #
+        #   class ApplicationController
+        #     fragment_cache_key "v1"
+        #   end
+        #
+        # When it's time to invalidate all fragments, simply change
+        # the string constant. Or, progressively roll out the cache
+        # invalidation using a computed value:
+        #
+        #   class ApplicationController
+        #     fragment_cache_key do
+        #       @account.id.odd? ? "v1" : "v2"
+        #     end
+        #   end
+        def fragment_cache_key(value = nil, &key)
+          self.fragment_cache_keys += [key || ->{ value }]
+        end
+      end
+
+      # Given a key (as described in +expire_fragment+), returns
+      # a key suitable for use in reading, writing, or expiring a
+      # cached fragment. All keys begin with <tt>views/</tt>,
+      # followed by any controller-wide key prefix values, ending
+      # with the specified +key+ value. The key is expanded using
+      # ActiveSupport::Cache.expand_cache_key.
+      def fragment_cache_key(key)
+        head = self.class.fragment_cache_keys.map { |k| instance_exec(&k) }
+        tail = key.is_a?(Hash) ? url_for(key).split("://").last : key
+        ActiveSupport::Cache.expand_cache_key([*head, *tail], :views)
+      end
+
+      # Writes +content+ to the location signified by
+      # +key+ (see +expire_fragment+ for acceptable formats).
+      def write_fragment(key, content, options = nil)
+        return content unless cache_configured?
+
+        key = fragment_cache_key(key)
+        instrument_fragment_cache :write_fragment, key do
+          content = content.to_str
+          cache_store.write(key, content, options)
+        end
+        content
+      end
+
+      # Reads a cached fragment from the location signified by +key+
+      # (see +expire_fragment+ for acceptable formats).
+      def read_fragment(key, options = nil)
+        return unless cache_configured?
+
+        key = fragment_cache_key(key)
+        instrument_fragment_cache :read_fragment, key do
+          result = cache_store.read(key, options)
+          result.respond_to?(:html_safe) ? result.html_safe : result
+        end
+      end
+
+      # Check if a cached fragment from the location signified by
+      # +key+ exists (see +expire_fragment+ for acceptable formats).
+      def fragment_exist?(key, options = nil)
+        return unless cache_configured?
+        key = fragment_cache_key(key)
+
+        instrument_fragment_cache :exist_fragment?, key do
+          cache_store.exist?(key, options)
+        end
+      end
+
+      # Removes fragments from the cache.
+      #
+      # +key+ can take one of three forms:
+      #
+      # * String - This would normally take the form of a path, like
+      #   <tt>pages/45/notes</tt>.
+      # * Hash - Treated as an implicit call to +url_for+, like
+      #   <tt>{ controller: 'pages', action: 'notes', id: 45}</tt>
+      # * Regexp - Will remove any fragment that matches, so
+      #   <tt>%r{pages/\d*/notes}</tt> might remove all notes. Make sure you
+      #   don't use anchors in the regex (<tt>^</tt> or <tt>$</tt>) because
+      #   the actual filename matched looks like
+      #   <tt>./cache/filename/path.cache</tt>. Note: Regexp expiration is
+      #   only supported on caches that can iterate over all keys (unlike
+      #   memcached).
+      #
+      # +options+ is passed through to the cache store's +delete+
+      # method (or <tt>delete_matched</tt>, for Regexp keys).
+      def expire_fragment(key, options = nil)
+        return unless cache_configured?
+        key = fragment_cache_key(key) unless key.is_a?(Regexp)
+
+        instrument_fragment_cache :expire_fragment, key do
+          if key.is_a?(Regexp)
+            cache_store.delete_matched(key, options)
+          else
+            cache_store.delete(key, options)
+          end
+        end
+      end
+
+      def instrument_fragment_cache(name, key) # :nodoc:
+        payload = {
+          controller: controller_name,
+          action: action_name,
+          key: key
+        }
+
+        ActiveSupport::Notifications.instrument("#{name}.action_controller", payload) { yield }
+      end
+    end
+  end
+end
-- 
cgit v1.2.3


From 3e824d3f5b32bae70832fe0c1c329ce062f79ff9 Mon Sep 17 00:00:00 2001
From: Stan Lo <a22301613@yahoo.com.tw>
Date: Wed, 30 Dec 2015 21:07:40 +0800
Subject: Move most caching methods to ActionDispatch::Caching, and let
 ActionMailer and ActionController to include it

---
 actionpack/lib/action_controller/caching.rb | 57 ++-------------------------
 actionpack/lib/action_dispatch/caching.rb   | 61 +++++++++++++++++++++++++++++
 2 files changed, 64 insertions(+), 54 deletions(-)
 create mode 100644 actionpack/lib/action_dispatch/caching.rb

(limited to 'actionpack')

diff --git a/actionpack/lib/action_controller/caching.rb b/actionpack/lib/action_controller/caching.rb
index ae868e23ed..e832f4adf4 100644
--- a/actionpack/lib/action_controller/caching.rb
+++ b/actionpack/lib/action_controller/caching.rb
@@ -1,6 +1,4 @@
-require 'action_dispatch/caching/fragments'
-require 'fileutils'
-require 'uri'
+require 'action_dispatch/caching'
 
 module ActionController
   # \Caching is a cheap way of speeding up slow applications by keeping the result of
@@ -24,61 +22,12 @@ module ActionController
   #   config.action_controller.cache_store = :mem_cache_store, Memcached::Rails.new('localhost:11211')
   #   config.action_controller.cache_store = MyOwnStore.new('parameter')
   module Caching
-    extend ActiveSupport::Concern
     extend ActiveSupport::Autoload
-
-    module ConfigMethods
-      def cache_store
-        config.cache_store
-      end
-
-      def cache_store=(store)
-        config.cache_store = ActiveSupport::Cache.lookup_store(store)
-      end
-
-      private
-        def cache_configured?
-          perform_caching && cache_store
-        end
-    end
-
+    extend ActiveSupport::Concern
     include AbstractController::Callbacks
 
-    include ConfigMethods
-    include ActionDispatch::Caching::Fragments
-
     included do
-      extend ConfigMethods
-
-      config_accessor :default_static_extension
-      self.default_static_extension ||= '.html'
-
-      config_accessor :perform_caching
-      self.perform_caching = true if perform_caching.nil?
-
-      class_attribute :_view_cache_dependencies
-      self._view_cache_dependencies = []
-      helper_method :view_cache_dependencies if respond_to?(:helper_method)
-    end
-
-    module ClassMethods
-      def view_cache_dependency(&dependency)
-        self._view_cache_dependencies += [dependency]
-      end
-    end
-
-    def view_cache_dependencies
-      self.class._view_cache_dependencies.map { |dep| instance_exec(&dep) }.compact
+      include ActionDispatch::Caching
     end
-
-    protected
-      # Convenience accessor.
-      def cache(key, options = {}, &block)
-        if cache_configured?
-          cache_store.fetch(ActiveSupport::Cache.expand_cache_key(key, :controller), options, &block)
-        else
-          yield
-        end
-      end
   end
 end
diff --git a/actionpack/lib/action_dispatch/caching.rb b/actionpack/lib/action_dispatch/caching.rb
new file mode 100644
index 0000000000..ac4a35d1db
--- /dev/null
+++ b/actionpack/lib/action_dispatch/caching.rb
@@ -0,0 +1,61 @@
+require 'action_dispatch/caching/fragments'
+
+module ActionDispatch
+  module Caching
+    extend ActiveSupport::Concern
+    extend ActiveSupport::Autoload
+
+    module ConfigMethods
+      def cache_store
+        config.cache_store
+      end
+
+      def cache_store=(store)
+        config.cache_store = ActiveSupport::Cache.lookup_store(store)
+      end
+
+      private
+        def cache_configured?
+          perform_caching && cache_store
+        end
+    end
+
+    include AbstractController::Helpers
+    include ConfigMethods
+    include ActionDispatch::Caching::Fragments
+
+    included do
+      extend ConfigMethods
+
+      config_accessor :default_static_extension
+      self.default_static_extension ||= '.html'
+
+      config_accessor :perform_caching
+      self.perform_caching = true if perform_caching.nil?
+
+      class_attribute :_view_cache_dependencies
+      self._view_cache_dependencies = []
+      helper_method :view_cache_dependencies if respond_to?(:helper_method)
+    end
+
+    module ClassMethods
+      def view_cache_dependency(&dependency)
+        self._view_cache_dependencies += [dependency]
+      end
+    end
+
+    def view_cache_dependencies
+      self.class._view_cache_dependencies.map { |dep| instance_exec(&dep) }.compact
+    end
+
+    protected
+      # Convenience accessor.
+    def cache(key, options = {}, &block)
+      if cache_configured?
+        cache_store.fetch(ActiveSupport::Cache.expand_cache_key(key, :controller), options, &block)
+      else
+        yield
+      end
+    end
+  end
+end
-- 
cgit v1.2.3


From 1de6f7938dbc58a618a89397aad5f217a6221d17 Mon Sep 17 00:00:00 2001
From: Stan Lo <a22301613@yahoo.com.tw>
Date: Thu, 31 Dec 2015 09:41:48 +0800
Subject: Make caching configuration more flexible

---
 actionpack/lib/action_controller/caching.rb         | 12 ++++++++++++
 actionpack/lib/action_dispatch/caching/fragments.rb |  9 ++-------
 2 files changed, 14 insertions(+), 7 deletions(-)

(limited to 'actionpack')

diff --git a/actionpack/lib/action_controller/caching.rb b/actionpack/lib/action_controller/caching.rb
index e832f4adf4..999c2636da 100644
--- a/actionpack/lib/action_controller/caching.rb
+++ b/actionpack/lib/action_controller/caching.rb
@@ -29,5 +29,17 @@ module ActionController
     included do
       include ActionDispatch::Caching
     end
+
+    def instrument_payload(key)
+      {
+        controller: controller_name,
+        action: action_name,
+        key: key
+      }
+    end
+
+    def instrument_name
+      "action_controller"
+    end
   end
 end
diff --git a/actionpack/lib/action_dispatch/caching/fragments.rb b/actionpack/lib/action_dispatch/caching/fragments.rb
index c410aaf03a..dcc490776e 100644
--- a/actionpack/lib/action_dispatch/caching/fragments.rb
+++ b/actionpack/lib/action_dispatch/caching/fragments.rb
@@ -135,13 +135,8 @@ module ActionDispatch
       end
 
       def instrument_fragment_cache(name, key) # :nodoc:
-        payload = {
-          controller: controller_name,
-          action: action_name,
-          key: key
-        }
-
-        ActiveSupport::Notifications.instrument("#{name}.action_controller", payload) { yield }
+        payload = instrument_payload(key)
+        ActiveSupport::Notifications.instrument("#{name}.#{instrument_name}", payload) { yield }
       end
     end
   end
-- 
cgit v1.2.3


From 98fe07a946543a6f4d2d7dc9758f0145e1ab932e Mon Sep 17 00:00:00 2001
From: Stan Lo <a22301613@yahoo.com.tw>
Date: Wed, 6 Jan 2016 15:29:22 +0800
Subject: Move ActionMailer::Caching's content into ActionMailer::Base instead
 of including it

Remove useless helper in ActionDispatch::Caching and fix indentation
---
 actionpack/lib/action_dispatch/caching.rb | 13 ++++++-------
 1 file changed, 6 insertions(+), 7 deletions(-)

(limited to 'actionpack')

diff --git a/actionpack/lib/action_dispatch/caching.rb b/actionpack/lib/action_dispatch/caching.rb
index ac4a35d1db..4e38098541 100644
--- a/actionpack/lib/action_dispatch/caching.rb
+++ b/actionpack/lib/action_dispatch/caching.rb
@@ -20,7 +20,6 @@ module ActionDispatch
         end
     end
 
-    include AbstractController::Helpers
     include ConfigMethods
     include ActionDispatch::Caching::Fragments
 
@@ -50,12 +49,12 @@ module ActionDispatch
 
     protected
       # Convenience accessor.
-    def cache(key, options = {}, &block)
-      if cache_configured?
-        cache_store.fetch(ActiveSupport::Cache.expand_cache_key(key, :controller), options, &block)
-      else
-        yield
+      def cache(key, options = {}, &block)
+        if cache_configured?
+          cache_store.fetch(ActiveSupport::Cache.expand_cache_key(key, :controller), options, &block)
+        else
+          yield
+        end
       end
-    end
   end
 end
-- 
cgit v1.2.3


From f25cc147e90bf9bbfea44e3803bab8ca33ff35bd Mon Sep 17 00:00:00 2001
From: Stan Lo <a22301613@yahoo.com.tw>
Date: Thu, 7 Jan 2016 13:10:44 +0800
Subject: Remove unnecessarily included modules in ActionController::Caching

---
 actionpack/lib/action_controller/caching.rb | 1 -
 1 file changed, 1 deletion(-)

(limited to 'actionpack')

diff --git a/actionpack/lib/action_controller/caching.rb b/actionpack/lib/action_controller/caching.rb
index 999c2636da..ff3678d952 100644
--- a/actionpack/lib/action_controller/caching.rb
+++ b/actionpack/lib/action_controller/caching.rb
@@ -24,7 +24,6 @@ module ActionController
   module Caching
     extend ActiveSupport::Autoload
     extend ActiveSupport::Concern
-    include AbstractController::Callbacks
 
     included do
       include ActionDispatch::Caching
-- 
cgit v1.2.3


From 40fa818580a9277d8d1a02241f1422dbf83a8aa1 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Rafael=20Mendon=C3=A7a=20Fran=C3=A7a?=
 <rafaelmfranca@gmail.com>
Date: Tue, 23 Feb 2016 19:55:49 -0300
Subject: Move Caching module to Abstract Controller

Abstract Controller is the common component between Action Mailer and
Action Controller so if we need to share the caching component it need
to be there.
---
 actionpack/lib/abstract_controller.rb              |   6 +
 actionpack/lib/abstract_controller/caching.rb      |  62 +++++++++
 .../lib/abstract_controller/caching/fragments.rb   | 143 +++++++++++++++++++++
 actionpack/lib/action_controller.rb                |  10 +-
 actionpack/lib/action_controller/caching.rb        |   4 +-
 actionpack/lib/action_dispatch/caching.rb          |  60 ---------
 .../lib/action_dispatch/caching/fragments.rb       | 143 ---------------------
 7 files changed, 216 insertions(+), 212 deletions(-)
 create mode 100644 actionpack/lib/abstract_controller/caching.rb
 create mode 100644 actionpack/lib/abstract_controller/caching/fragments.rb
 delete mode 100644 actionpack/lib/action_dispatch/caching.rb
 delete mode 100644 actionpack/lib/action_dispatch/caching/fragments.rb

(limited to 'actionpack')

diff --git a/actionpack/lib/abstract_controller.rb b/actionpack/lib/abstract_controller.rb
index 56c4033387..1e57cbaac4 100644
--- a/actionpack/lib/abstract_controller.rb
+++ b/actionpack/lib/abstract_controller.rb
@@ -6,6 +6,7 @@ module AbstractController
   extend ActiveSupport::Autoload
 
   autoload :Base
+  autoload :Caching
   autoload :Callbacks
   autoload :Collector
   autoload :DoubleRenderError, "abstract_controller/rendering"
@@ -15,4 +16,9 @@ module AbstractController
   autoload :Translation
   autoload :AssetPaths
   autoload :UrlFor
+
+  def self.eager_load!
+    super
+    AbstractController::Caching.eager_load!
+  end
 end
diff --git a/actionpack/lib/abstract_controller/caching.rb b/actionpack/lib/abstract_controller/caching.rb
new file mode 100644
index 0000000000..0dea50889a
--- /dev/null
+++ b/actionpack/lib/abstract_controller/caching.rb
@@ -0,0 +1,62 @@
+module AbstractController
+  module Caching
+    extend ActiveSupport::Concern
+    extend ActiveSupport::Autoload
+
+    eager_autoload do
+      autoload :Fragments
+    end
+
+    module ConfigMethods
+      def cache_store
+        config.cache_store
+      end
+
+      def cache_store=(store)
+        config.cache_store = ActiveSupport::Cache.lookup_store(store)
+      end
+
+      private
+        def cache_configured?
+          perform_caching && cache_store
+        end
+    end
+
+    include ConfigMethods
+    include AbstractController::Caching::Fragments
+
+    included do
+      extend ConfigMethods
+
+      config_accessor :default_static_extension
+      self.default_static_extension ||= '.html'
+
+      config_accessor :perform_caching
+      self.perform_caching = true if perform_caching.nil?
+
+      class_attribute :_view_cache_dependencies
+      self._view_cache_dependencies = []
+      helper_method :view_cache_dependencies if respond_to?(:helper_method)
+    end
+
+    module ClassMethods
+      def view_cache_dependency(&dependency)
+        self._view_cache_dependencies += [dependency]
+      end
+    end
+
+    def view_cache_dependencies
+      self.class._view_cache_dependencies.map { |dep| instance_exec(&dep) }.compact
+    end
+
+    protected
+      # Convenience accessor.
+      def cache(key, options = {}, &block)
+        if cache_configured?
+          cache_store.fetch(ActiveSupport::Cache.expand_cache_key(key, :controller), options, &block)
+        else
+          yield
+        end
+      end
+  end
+end
diff --git a/actionpack/lib/abstract_controller/caching/fragments.rb b/actionpack/lib/abstract_controller/caching/fragments.rb
new file mode 100644
index 0000000000..3257a731ed
--- /dev/null
+++ b/actionpack/lib/abstract_controller/caching/fragments.rb
@@ -0,0 +1,143 @@
+module AbstractController
+  module Caching
+    # Fragment caching is used for caching various blocks within
+    # views without caching the entire action as a whole. This is
+    # useful when certain elements of an action change frequently or
+    # depend on complicated state while other parts rarely change or
+    # can be shared amongst multiple parties. The caching is done using
+    # the +cache+ helper available in the Action View. See
+    # ActionView::Helpers::CacheHelper for more information.
+    #
+    # While it's strongly recommended that you use key-based cache
+    # expiration (see links in CacheHelper for more information),
+    # it is also possible to manually expire caches. For example:
+    #
+    #   expire_fragment('name_of_cache')
+    module Fragments
+      extend ActiveSupport::Concern
+
+      included do
+        if respond_to?(:class_attribute)
+          class_attribute :fragment_cache_keys
+        else
+          mattr_writer :fragment_cache_keys
+        end
+
+        self.fragment_cache_keys = []
+
+        helper_method :fragment_cache_key if respond_to?(:helper_method)
+      end
+
+      module ClassMethods
+        # Allows you to specify controller-wide key prefixes for
+        # cache fragments. Pass either a constant +value+, or a block
+        # which computes a value each time a cache key is generated.
+        #
+        # For example, you may want to prefix all fragment cache keys
+        # with a global version identifier, so you can easily
+        # invalidate all caches.
+        #
+        #   class ApplicationController
+        #     fragment_cache_key "v1"
+        #   end
+        #
+        # When it's time to invalidate all fragments, simply change
+        # the string constant. Or, progressively roll out the cache
+        # invalidation using a computed value:
+        #
+        #   class ApplicationController
+        #     fragment_cache_key do
+        #       @account.id.odd? ? "v1" : "v2"
+        #     end
+        #   end
+        def fragment_cache_key(value = nil, &key)
+          self.fragment_cache_keys += [key || ->{ value }]
+        end
+      end
+
+      # Given a key (as described in +expire_fragment+), returns
+      # a key suitable for use in reading, writing, or expiring a
+      # cached fragment. All keys begin with <tt>views/</tt>,
+      # followed by any controller-wide key prefix values, ending
+      # with the specified +key+ value. The key is expanded using
+      # ActiveSupport::Cache.expand_cache_key.
+      def fragment_cache_key(key)
+        head = self.class.fragment_cache_keys.map { |k| instance_exec(&k) }
+        tail = key.is_a?(Hash) ? url_for(key).split("://").last : key
+        ActiveSupport::Cache.expand_cache_key([*head, *tail], :views)
+      end
+
+      # Writes +content+ to the location signified by
+      # +key+ (see +expire_fragment+ for acceptable formats).
+      def write_fragment(key, content, options = nil)
+        return content unless cache_configured?
+
+        key = fragment_cache_key(key)
+        instrument_fragment_cache :write_fragment, key do
+          content = content.to_str
+          cache_store.write(key, content, options)
+        end
+        content
+      end
+
+      # Reads a cached fragment from the location signified by +key+
+      # (see +expire_fragment+ for acceptable formats).
+      def read_fragment(key, options = nil)
+        return unless cache_configured?
+
+        key = fragment_cache_key(key)
+        instrument_fragment_cache :read_fragment, key do
+          result = cache_store.read(key, options)
+          result.respond_to?(:html_safe) ? result.html_safe : result
+        end
+      end
+
+      # Check if a cached fragment from the location signified by
+      # +key+ exists (see +expire_fragment+ for acceptable formats).
+      def fragment_exist?(key, options = nil)
+        return unless cache_configured?
+        key = fragment_cache_key(key)
+
+        instrument_fragment_cache :exist_fragment?, key do
+          cache_store.exist?(key, options)
+        end
+      end
+
+      # Removes fragments from the cache.
+      #
+      # +key+ can take one of three forms:
+      #
+      # * String - This would normally take the form of a path, like
+      #   <tt>pages/45/notes</tt>.
+      # * Hash - Treated as an implicit call to +url_for+, like
+      #   <tt>{ controller: 'pages', action: 'notes', id: 45}</tt>
+      # * Regexp - Will remove any fragment that matches, so
+      #   <tt>%r{pages/\d*/notes}</tt> might remove all notes. Make sure you
+      #   don't use anchors in the regex (<tt>^</tt> or <tt>$</tt>) because
+      #   the actual filename matched looks like
+      #   <tt>./cache/filename/path.cache</tt>. Note: Regexp expiration is
+      #   only supported on caches that can iterate over all keys (unlike
+      #   memcached).
+      #
+      # +options+ is passed through to the cache store's +delete+
+      # method (or <tt>delete_matched</tt>, for Regexp keys).
+      def expire_fragment(key, options = nil)
+        return unless cache_configured?
+        key = fragment_cache_key(key) unless key.is_a?(Regexp)
+
+        instrument_fragment_cache :expire_fragment, key do
+          if key.is_a?(Regexp)
+            cache_store.delete_matched(key, options)
+          else
+            cache_store.delete(key, options)
+          end
+        end
+      end
+
+      def instrument_fragment_cache(name, key) # :nodoc:
+        payload = instrument_payload(key)
+        ActiveSupport::Notifications.instrument("#{name}.#{instrument_name}", payload) { yield }
+      end
+    end
+  end
+end
diff --git a/actionpack/lib/action_controller.rb b/actionpack/lib/action_controller.rb
index 40f33a9de0..62f5905205 100644
--- a/actionpack/lib/action_controller.rb
+++ b/actionpack/lib/action_controller.rb
@@ -9,12 +9,15 @@ module ActionController
 
   autoload :API
   autoload :Base
-  autoload :Caching
   autoload :Metal
   autoload :Middleware
   autoload :Renderer
   autoload :FormBuilder
 
+  eager_autoload do
+    autoload :Caching
+  end
+
   autoload_under "metal" do
     autoload :ConditionalGet
     autoload :Cookies
@@ -47,11 +50,6 @@ module ActionController
 
   autoload :TestCase,           'action_controller/test_case'
   autoload :TemplateAssertions, 'action_controller/test_case'
-
-  def self.eager_load!
-    super
-    ActionController::Caching.eager_load!
-  end
 end
 
 # Common Active Support usage in Action Controller
diff --git a/actionpack/lib/action_controller/caching.rb b/actionpack/lib/action_controller/caching.rb
index ff3678d952..9df4ab6c7a 100644
--- a/actionpack/lib/action_controller/caching.rb
+++ b/actionpack/lib/action_controller/caching.rb
@@ -1,5 +1,3 @@
-require 'action_dispatch/caching'
-
 module ActionController
   # \Caching is a cheap way of speeding up slow applications by keeping the result of
   # calculations, renderings, and database calls around for subsequent requests.
@@ -26,7 +24,7 @@ module ActionController
     extend ActiveSupport::Concern
 
     included do
-      include ActionDispatch::Caching
+      include AbstractController::Caching
     end
 
     def instrument_payload(key)
diff --git a/actionpack/lib/action_dispatch/caching.rb b/actionpack/lib/action_dispatch/caching.rb
deleted file mode 100644
index 4e38098541..0000000000
--- a/actionpack/lib/action_dispatch/caching.rb
+++ /dev/null
@@ -1,60 +0,0 @@
-require 'action_dispatch/caching/fragments'
-
-module ActionDispatch
-  module Caching
-    extend ActiveSupport::Concern
-    extend ActiveSupport::Autoload
-
-    module ConfigMethods
-      def cache_store
-        config.cache_store
-      end
-
-      def cache_store=(store)
-        config.cache_store = ActiveSupport::Cache.lookup_store(store)
-      end
-
-      private
-        def cache_configured?
-          perform_caching && cache_store
-        end
-    end
-
-    include ConfigMethods
-    include ActionDispatch::Caching::Fragments
-
-    included do
-      extend ConfigMethods
-
-      config_accessor :default_static_extension
-      self.default_static_extension ||= '.html'
-
-      config_accessor :perform_caching
-      self.perform_caching = true if perform_caching.nil?
-
-      class_attribute :_view_cache_dependencies
-      self._view_cache_dependencies = []
-      helper_method :view_cache_dependencies if respond_to?(:helper_method)
-    end
-
-    module ClassMethods
-      def view_cache_dependency(&dependency)
-        self._view_cache_dependencies += [dependency]
-      end
-    end
-
-    def view_cache_dependencies
-      self.class._view_cache_dependencies.map { |dep| instance_exec(&dep) }.compact
-    end
-
-    protected
-      # Convenience accessor.
-      def cache(key, options = {}, &block)
-        if cache_configured?
-          cache_store.fetch(ActiveSupport::Cache.expand_cache_key(key, :controller), options, &block)
-        else
-          yield
-        end
-      end
-  end
-end
diff --git a/actionpack/lib/action_dispatch/caching/fragments.rb b/actionpack/lib/action_dispatch/caching/fragments.rb
deleted file mode 100644
index dcc490776e..0000000000
--- a/actionpack/lib/action_dispatch/caching/fragments.rb
+++ /dev/null
@@ -1,143 +0,0 @@
-module ActionDispatch
-  module Caching
-    # Fragment caching is used for caching various blocks within
-    # views without caching the entire action as a whole. This is
-    # useful when certain elements of an action change frequently or
-    # depend on complicated state while other parts rarely change or
-    # can be shared amongst multiple parties. The caching is done using
-    # the +cache+ helper available in the Action View. See
-    # ActionView::Helpers::CacheHelper for more information.
-    #
-    # While it's strongly recommended that you use key-based cache
-    # expiration (see links in CacheHelper for more information),
-    # it is also possible to manually expire caches. For example:
-    #
-    #   expire_fragment('name_of_cache')
-    module Fragments
-      extend ActiveSupport::Concern
-
-      included do
-        if respond_to?(:class_attribute)
-          class_attribute :fragment_cache_keys
-        else
-          mattr_writer :fragment_cache_keys
-        end
-
-        self.fragment_cache_keys = []
-
-        helper_method :fragment_cache_key if respond_to?(:helper_method)
-      end
-
-      module ClassMethods
-        # Allows you to specify controller-wide key prefixes for
-        # cache fragments. Pass either a constant +value+, or a block
-        # which computes a value each time a cache key is generated.
-        #
-        # For example, you may want to prefix all fragment cache keys
-        # with a global version identifier, so you can easily
-        # invalidate all caches.
-        #
-        #   class ApplicationController
-        #     fragment_cache_key "v1"
-        #   end
-        #
-        # When it's time to invalidate all fragments, simply change
-        # the string constant. Or, progressively roll out the cache
-        # invalidation using a computed value:
-        #
-        #   class ApplicationController
-        #     fragment_cache_key do
-        #       @account.id.odd? ? "v1" : "v2"
-        #     end
-        #   end
-        def fragment_cache_key(value = nil, &key)
-          self.fragment_cache_keys += [key || ->{ value }]
-        end
-      end
-
-      # Given a key (as described in +expire_fragment+), returns
-      # a key suitable for use in reading, writing, or expiring a
-      # cached fragment. All keys begin with <tt>views/</tt>,
-      # followed by any controller-wide key prefix values, ending
-      # with the specified +key+ value. The key is expanded using
-      # ActiveSupport::Cache.expand_cache_key.
-      def fragment_cache_key(key)
-        head = self.class.fragment_cache_keys.map { |k| instance_exec(&k) }
-        tail = key.is_a?(Hash) ? url_for(key).split("://").last : key
-        ActiveSupport::Cache.expand_cache_key([*head, *tail], :views)
-      end
-
-      # Writes +content+ to the location signified by
-      # +key+ (see +expire_fragment+ for acceptable formats).
-      def write_fragment(key, content, options = nil)
-        return content unless cache_configured?
-
-        key = fragment_cache_key(key)
-        instrument_fragment_cache :write_fragment, key do
-          content = content.to_str
-          cache_store.write(key, content, options)
-        end
-        content
-      end
-
-      # Reads a cached fragment from the location signified by +key+
-      # (see +expire_fragment+ for acceptable formats).
-      def read_fragment(key, options = nil)
-        return unless cache_configured?
-
-        key = fragment_cache_key(key)
-        instrument_fragment_cache :read_fragment, key do
-          result = cache_store.read(key, options)
-          result.respond_to?(:html_safe) ? result.html_safe : result
-        end
-      end
-
-      # Check if a cached fragment from the location signified by
-      # +key+ exists (see +expire_fragment+ for acceptable formats).
-      def fragment_exist?(key, options = nil)
-        return unless cache_configured?
-        key = fragment_cache_key(key)
-
-        instrument_fragment_cache :exist_fragment?, key do
-          cache_store.exist?(key, options)
-        end
-      end
-
-      # Removes fragments from the cache.
-      #
-      # +key+ can take one of three forms:
-      #
-      # * String - This would normally take the form of a path, like
-      #   <tt>pages/45/notes</tt>.
-      # * Hash - Treated as an implicit call to +url_for+, like
-      #   <tt>{ controller: 'pages', action: 'notes', id: 45}</tt>
-      # * Regexp - Will remove any fragment that matches, so
-      #   <tt>%r{pages/\d*/notes}</tt> might remove all notes. Make sure you
-      #   don't use anchors in the regex (<tt>^</tt> or <tt>$</tt>) because
-      #   the actual filename matched looks like
-      #   <tt>./cache/filename/path.cache</tt>. Note: Regexp expiration is
-      #   only supported on caches that can iterate over all keys (unlike
-      #   memcached).
-      #
-      # +options+ is passed through to the cache store's +delete+
-      # method (or <tt>delete_matched</tt>, for Regexp keys).
-      def expire_fragment(key, options = nil)
-        return unless cache_configured?
-        key = fragment_cache_key(key) unless key.is_a?(Regexp)
-
-        instrument_fragment_cache :expire_fragment, key do
-          if key.is_a?(Regexp)
-            cache_store.delete_matched(key, options)
-          else
-            cache_store.delete(key, options)
-          end
-        end
-      end
-
-      def instrument_fragment_cache(name, key) # :nodoc:
-        payload = instrument_payload(key)
-        ActiveSupport::Notifications.instrument("#{name}.#{instrument_name}", payload) { yield }
-      end
-    end
-  end
-end
-- 
cgit v1.2.3


From 338750393d0f19b193f0ead26adff2b9f586ec18 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Rafael=20Mendon=C3=A7a=20Fran=C3=A7a?=
 <rafaelmfranca@gmail.com>
Date: Wed, 24 Feb 2016 00:08:01 -0300
Subject: Move private methods to the private visibility

---
 actionpack/lib/action_controller/caching.rb | 22 ++++++++++++----------
 1 file changed, 12 insertions(+), 10 deletions(-)

(limited to 'actionpack')

diff --git a/actionpack/lib/action_controller/caching.rb b/actionpack/lib/action_controller/caching.rb
index 9df4ab6c7a..a9a8508abc 100644
--- a/actionpack/lib/action_controller/caching.rb
+++ b/actionpack/lib/action_controller/caching.rb
@@ -27,16 +27,18 @@ module ActionController
       include AbstractController::Caching
     end
 
-    def instrument_payload(key)
-      {
-        controller: controller_name,
-        action: action_name,
-        key: key
-      }
-    end
+    private
 
-    def instrument_name
-      "action_controller"
-    end
+      def instrument_payload(key)
+        {
+          controller: controller_name,
+          action: action_name,
+          key: key
+        }
+      end
+
+      def instrument_name
+        "action_controller"
+      end
   end
 end
-- 
cgit v1.2.3