class Lux::Cache

Public Class Methods

new() click to toggle source
# File lib/lux/cache/cache.rb, line 5
def initialize
  @server = Lux::Cache::MemoryCache.new
end

Public Instance Methods

[](key) click to toggle source
# File lib/lux/cache/cache.rb, line 107
def [] key
  @server.get key.to_s
end
[]=(key, value) click to toggle source
# File lib/lux/cache/cache.rb, line 102
def []= key, value
  @server.set key.to_s, value
  value
end
delete(key, data=nil) click to toggle source
# File lib/lux/cache/cache.rb, line 49
def delete key, data=nil
  @server.delete(key)
end
fetch(key, opts={}) { || ... } click to toggle source
# File lib/lux/cache/cache.rb, line 53
def fetch key, opts={}
  opts = { ttl: opts } unless opts.is_a?(Hash)
  opts = opts.to_opts(:ttl, :force, :log, :if)

  return yield if opts.if.is_a?(FalseClass)

  opts.ttl     = opts.ttl.to_i if opts.ttl
  opts.log   ||= Lux.config(:log_to_stdout)  unless opts.log.class   == FalseClass
  opts.force ||= Lux.current.try(:no_cache?) unless opts.force.class == FalseClass

  @server.delete key if opts.force

  Lux.log " Cache.fetch.get #{key} (ttl: #{opts.ttl.or(:nil)})".green if opts.log

  data = @server.fetch key, opts.ttl do
    speed = Lux.speed { data = yield }

    Lux.log " Cache.fetch.SET #{key} len:#{data.to_s.length} (#{speed})".red if opts.log

    data
  end

  data
end
generate_key(*data) click to toggle source
# File lib/lux/cache/cache.rb, line 83
def generate_key *data
  keys = []

  for el in [data].flatten
    keys.push el.id if el.respond_to?(:id)

    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('-')
  Crypt.sha1(key)
end
get(key)
Alias for: read
get_multi(*args)
Alias for: read_multi
is_available?() click to toggle source
# File lib/lux/cache/cache.rb, line 78
def is_available?
  set('lux-test', 9)
  get('lux-test') == 9
end
read(key) click to toggle source
# File lib/lux/cache/cache.rb, line 32
def read key
  return nil if (Lux.current.no_cache? rescue false)
  @server.get(key)
end
Also aliased as: get
read_multi(*args) click to toggle source
# File lib/lux/cache/cache.rb, line 38
def read_multi *args
  @server.get_multi(*args)
end
Also aliased as: get_multi
server() click to toggle source
# File lib/lux/cache/cache.rb, line 28
def server
  @server
end
server=(name) click to toggle source

sert cache server Lux.cache.server = :memory Lux.cache.server = :memcached Lux.cache.server = Dalli::Client.new('localhost:11211', { :namespace=>Digest::MD5.hexdigest(__FILE__), :compress => true, :expires_in => 1.hour })

# File lib/lux/cache/cache.rb, line 13
def server= name
  @server = if name.is_a?(Symbol)
    if name == :memcached
      require 'dalli'
      Dalli::Client.new('127.0.0.1:11211', { :namespace=>Digest::MD5.hexdigest(__FILE__)[0,4], :compress => true,  :expires_in => 1.hour })
    else
      "Lux::Cache::#{name.to_s.classify}Cache".constantize.new
    end
  else
    name
  end

  fetch('cache-test') { true }
end
set(key, data, ttl=nil)
Alias for: write
write(key, data, ttl=nil) click to toggle source
# File lib/lux/cache/cache.rb, line 43
def write key, data, ttl=nil
  ttl = ttl.to_i if ttl
  @server.set(key, data, ttl)
end
Also aliased as: set