# frozen_string_literal: true class RedisClient module CommandBuilder extend self if Symbol.method_defined?(:name) def generate!(args, kwargs) command = args.flat_map do |element| case element when Hash element.flatten when Set element.to_a 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 command end else def generate!(args, kwargs) command = args.flat_map do |element| case element when Hash element.flatten when Set element.to_a 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 command end end end end