redis.log(redis.LOG_NOTICE, 'Minuteman')

local action = cjson.decode(ARGV) local keys = cjson.decode(ARGV) local dest = cjson.decode(ARGV)

local function operate(action, keys)

if type(keys) == "string" then keys = { keys } end

redis.call("BITOP", action, dest, unpack(keys) )

return dest

end

local function AND(keys) return operate(“AND”, keys) end local function OR(keys) return operate(“OR”, keys) end local function XOR(keys) return operate(“XOR”, keys) end local function NOT(keys) return operate(“NOT”, keys) end

local function MINUS(keys)

local items = keys
local src = table.remove(items, 1)
local and_op = AND(keys)

return XOR({ src, and_op })

end

local function operation(action, keys)

if action == "MINUS" then
  return MINUS(keys)
else
  return operate(action, keys)
end

end

return operation(action, keys)