Sha256: e3ee56861cb92c59cb66fb214b0d69e4158e982c3454546646b6052519e0212f

Contents?: true

Size: 1.36 KB

Versions: 1

Compression:

Stored size: 1.36 KB

Contents

module RailsSettings
  module RequestCacheGetter
    extend ActiveSupport::Concern

    class_methods do
      def enable!
        Thread.current[:rails_settings_request_cache_enable] = true
      end

      def disable!
        Thread.current[:rails_settings_request_cache_enable] = nil
      end

      def enabled?
        Thread.current[:rails_settings_request_cache_enable]
      end

      def all_settings
        enabled? ? settings : nil
      end

      def all_settings=(val)
        self.settings = val
      end
    end
  end

  if defined? ActiveSupport::CurrentAttributes
    # For storage all settings in Current, it will reset after per request completed.
    # Base on ActiveSupport::CurrentAttributes
    # https://api.rubyonrails.org/classes/ActiveSupport/CurrentAttributes.html
    class RequestCache < ActiveSupport::CurrentAttributes
      include RequestCacheGetter
      attribute :settings
    end
  else
    # https://github.com/steveklabnik/request_store
    # For Rails 5.0
    require "request_store"

    class RequestCache
      include RequestCacheGetter

      class << self
        def reset
          self.settings = nil
        end

        def settings
          RequestStore.store[:rails_settings_all_settings]
        end

        def settings=(val)
          RequestStore.store[:rails_settings_all_settings]
        end
      end
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
rails-settings-cached-2.8.0 lib/rails-settings/request_cache.rb