Module: Seabright::RedisObject::ScriptSources

Defined in:
lib/redis_object/ext/script_cache.rb

Constant Summary collapse

FwdScript =
"redis.call('ZINTERSTORE', KEYS[1], 2, KEYS[2], KEYS[3], 'WEIGHTS', 1, 0)\nlocal keys = redis.call('ZRANGE', KEYS[1], 0, KEYS[4])\nredis.call('DEL', KEYS[1])\nreturn keys".freeze
RevScript =
"redis.call('ZINTERSTORE', KEYS[1], 2, KEYS[2], KEYS[3], 'WEIGHTS', 1, 0)\nlocal keys = redis.call('ZREVRANGE', KEYS[1], 0, KEYS[4])\nredis.call('DEL', KEYS[1])\nreturn keys".freeze
Matcher =
"local itms = redis.call('SMEMBERS',KEYS[1])
local out = {}
local val
local pattern
for i, v in ipairs(itms) do
  val = redis.call('HGET',v..'_h',ARGV[1])
  if val then
    if ARGV[2]:find('^pattern:') then
      pattern = ARGV[2]:gsub('^pattern:','')
      if val:match(pattern) ~= nil then
        table.insert(out,itms[i])
      end
    else
      if val == ARGV[2] then
        table.insert(out,itms[i])
      end
    end
  else
    if ARGV[2] == '#{NilPattern}' then
      table.insert(out,itms[i])
    end
  end
end
return out".gsub(/\t/,'').freeze
MultiMatcher =
"local itms = redis.call('SMEMBERS',KEYS[1])
local out = {}
local matchers = {}
local matcher = {}
local mod
for i=1,#ARGV do
  mod = i % 2
  if mod == 1 then
    matcher[1] = ARGV[i]
  else
    matcher[2] = ARGV[i]
    table.insert(matchers,matcher)
    matcher = {}
  end
end
local val
local good
local pattern
for i, v in ipairs(itms) do
  good = true
  for n=1,#matchers do
    val = redis.call('HGET',v..'_h',matchers[n][1])
    if val then
      if matchers[n][2]:find('^pattern:') then
        pattern = matchers[n][2]:gsub('^pattern:','')
        if val:match(pattern) then
          good = good
        else
          good = false
        end
      else
        if val ~= matchers[n][2] then
          good = false
        end
      end
    else
      if matchers[n][2] == '#{NilPattern}' then
        good = true
      else
        good = false
      end
    end
  end
  if good == true then
    table.insert(out,itms[i])
  end
end
return out".gsub(/\t/,'').freeze