Sha256: 18e899b8d51c6d8b6cecfb2a1e89ac30df8bf5ae5c729a62100f4a04cafb3ac8

Contents?: true

Size: 1.93 KB

Versions: 20

Compression:

Stored size: 1.93 KB

Contents

require 'hanami/action/cache/directives'

module Hanami
  module Action
    module Cache
      # Module with Cache-Control logic
      #
      # @since 0.3.0
      # @api private
      module CacheControl
        # The HTTP header for Cache-Control
        #
        # @since 0.3.0
        # @api private
        HEADER = 'Cache-Control'.freeze

        # @since 0.3.0
        # @api private
        def self.included(base)
          base.class_eval do
            extend ClassMethods
            @cache_control_directives = nil
          end
        end

        # @since 0.3.0
        # @api private
        module ClassMethods
          # @since 0.3.0
          # @api private
          def cache_control(*values)
            @cache_control_directives ||= Directives.new(*values)
          end

          # @since 0.3.0
          # @api private
          def cache_control_directives
            @cache_control_directives || Object.new.tap do |null_object|
              def null_object.headers
                Hash.new
              end
            end
          end
        end

        # Finalize the response including default cache headers into the response
        #
        # @since 0.3.0
        # @api private
        #
        # @see Hanami::Action#finish
        def finish
          super
          headers.merge!(self.class.cache_control_directives.headers) unless headers.include? HEADER
        end

        # Class which stores CacheControl values
        #
        # @since 0.3.0
        # @api private
        class Directives
          # @since 0.3.0
          # @api private
          def initialize(*values)
            @directives = Hanami::Action::Cache::Directives.new(*values)
          end

          # @since 0.3.0
          # @api private
          def headers
            if @directives.any?
              { HEADER => @directives.join(', ') }
            else
              {}
            end
          end
        end
      end
    end
  end
end

Version data entries

20 entries across 20 versions & 1 rubygems

Version Path
hanami-controller-1.3.3 lib/hanami/action/cache/cache_control.rb
hanami-controller-1.3.2 lib/hanami/action/cache/cache_control.rb
hanami-controller-1.3.1 lib/hanami/action/cache/cache_control.rb
hanami-controller-1.3.0 lib/hanami/action/cache/cache_control.rb
hanami-controller-1.3.0.beta1 lib/hanami/action/cache/cache_control.rb
hanami-controller-1.2.0 lib/hanami/action/cache/cache_control.rb
hanami-controller-1.2.0.rc2 lib/hanami/action/cache/cache_control.rb
hanami-controller-1.2.0.rc1 lib/hanami/action/cache/cache_control.rb
hanami-controller-1.2.0.beta2 lib/hanami/action/cache/cache_control.rb
hanami-controller-1.2.0.beta1 lib/hanami/action/cache/cache_control.rb
hanami-controller-1.1.1 lib/hanami/action/cache/cache_control.rb
hanami-controller-1.1.0 lib/hanami/action/cache/cache_control.rb
hanami-controller-1.1.0.rc1 lib/hanami/action/cache/cache_control.rb
hanami-controller-1.1.0.beta3 lib/hanami/action/cache/cache_control.rb
hanami-controller-1.1.0.beta2 lib/hanami/action/cache/cache_control.rb
hanami-controller-1.1.0.beta1 lib/hanami/action/cache/cache_control.rb
hanami-controller-1.0.1 lib/hanami/action/cache/cache_control.rb
hanami-controller-1.0.0 lib/hanami/action/cache/cache_control.rb
hanami-controller-1.0.0.rc1 lib/hanami/action/cache/cache_control.rb
hanami-controller-1.0.0.beta3 lib/hanami/action/cache/cache_control.rb