Sha256: 62aae8d79901a4d52831bcba360f4dbc9afb959f7b1e65348072218428a4205d

Contents?: true

Size: 1.42 KB

Versions: 2

Compression:

Stored size: 1.42 KB

Contents

require "ostruct"
require_relative "logger"
require_relative "caching_strategies/sql_cache"
require_relative "caching_strategies/active_support_cache"
require_relative "caching_strategies/base"

module ActiveCachedResource
  class Configuration < OpenStruct
    CACHING_STRATEGIES = {
      active_record: ActiveCachedResource::CachingStrategies::SQLCache,
      active_support: ActiveCachedResource::CachingStrategies::ActiveSupportCache
    }

    OPTIONS = %i[cache_key_prefix logger enabled ttl]

    def initialize(model, options = {})
      super(
        {
          cache: determine_cache_strategy(options[:cache_store], options[:cache_strategy]),
          cache_key_prefix: model.name.underscore,
          logger: ActiveCachedResource::Logger.new(model.name),
          enabled: true,
          ttl: 86400
        }.merge(options.slice(*OPTIONS))
      )
    end

    def on!
      self.enabled = true
    end

    def off!
      self.enabled = false
    end

    private

    def determine_cache_strategy(cache_store, cache_strategy)
      if cache_store.is_a?(CachingStrategies::Base)
        cache_store
      elsif cache_strategy
        CACHING_STRATEGIES.fetch(cache_strategy).new(cache_store)
      else
        raise ArgumentError, "cache_store must be a CachingStrategies::Base or cache_strategy must be provided"
      end
    rescue KeyError
      raise ArgumentError, "Invalid cache strategy: #{cache_strategy}"
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
active_cached_resource-0.1.0 lib/active_cached_resource/configuration.rb
active_cached_resource-0.0.1.pre lib/active_cached_resource/configuration.rb