1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87
|
# frozen_string_literal: true
class RedisClient
module CommandBuilder
extend self
if Symbol.method_defined?(:name)
def generate(args, kwargs = nil)
command = args.flat_map do |element|
case element
when Hash
element.flatten
else
element
end
end
kwargs&.each do |key, value|
if value
if value == true
command << key.name
else
command << key.name << value
end
end
end
command.map! do |element|
case element
when String
element
when Symbol
element.name
when Integer, Float
element.to_s
else
raise TypeError, "Unsupported command argument type: #{element.class}"
end
end
if command.empty?
raise ArgumentError, "can't issue an empty redis command"
end
command
end
else
def generate(args, kwargs = nil)
command = args.flat_map do |element|
case element
when Hash
element.flatten
else
element
end
end
kwargs&.each do |key, value|
if value
if value == true
command << key.to_s
else
command << key.to_s << value
end
end
end
command.map! do |element|
case element
when String
element
when Integer, Float, Symbol
element.to_s
else
raise TypeError, "Unsupported command argument type: #{element.class}"
end
end
if command.empty?
raise ArgumentError, "can't issue an empty redis command"
end
command
end
end
end
end
|