Sha256: 2fa8f90f4a1f8debd503f51b35a1aca76f64464ecc08757c152d225984f3816a

Contents?: true

Size: 1.38 KB

Versions: 1

Compression:

Stored size: 1.38 KB

Contents

# frozen_string_literal: true

module Lux::Cache
  extend self

  def server= obj
    @@server = obj
  end

  # cache data in current thread
  def thread key
    data = Lux.thread[:cache][key]
    return data if data
    Lux.thread[:cache][key] = yield
  end

  def read key
    return nil if (Lux.page.no_cache? rescue false)
    @@server.get(key)
  end
  alias :get :read

  def read_multi *args
    @@server.get_multi(*args)
  end
  alias :get_multi :read_multi

  def write key, data, ttl=nil
    ttl = ttl.to_i if ttl
    @@server.set(key, data, ttl)
  end
  alias :set :write

  def delete key, data=nil
    @@server.delete(key)
  end

  def fetch key, ttl=nil, log=true
    ttl = ttl.to_i if ttl
    @@server.delete key if Lux.page && Lux.page.no_cache?

    Lux.log " Cache.fetch.get #{key} (ttl: #{ttl.or(:nil)})" if log
    data = @@server.fetch key, ttl do
      data = yield
      Lux.log " Cache.fetch.SET #{key} len:#{data.to_s.length}" if log
      data
    end

    data
  end

  def is_available?
    set('lux-test', 9)
    get('lux-test') == 9
  end

  def generate_key *data
    keys = []
    for el in [data].flatten
      if el.respond_to?(:updated_at)
        keys.push el.updated_at
      elsif el.respond_to?(:created_at)
        keys.push el.created_at
      else
        keys.push el.to_s
      end
    end
    key = keys.join('-')
    key.length < 30 ? key : Crypt.md5(key)
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
lux-fw-0.1.17 ./lib/lux/cache/cache.rb