module FakeRedis::BitopCommand

def bitwise_operation(operation, keys)

def bitwise_operation(operation, keys)
  apply_onto, *values = keys.map { |key| get(key) }.reject(&:nil?)
  values.reduce(apply_onto) do |memo, value|
    shorter, longer = [memo, value].sort_by(&:length).map(&:bytes).map(&:to_a)
    longer.each_with_index.map do |byte, index|
      byte.send(operation, shorter[index] || 0)
    end.pack('c*')
  end
end