def method_missing(meth, *args, &block)
buffer = StringIO.new
result = []
options = ''
params = ''
if block
query_options = QueryOptions.new
yield query_options
query_options.options.each do |opt|
options += " -#{opt}"
end
end
if args.first
args.first.each do |key, value|
params += " #{key}=#{value.is_a?(String) ? Escaping.encode(value) : value}"
end
end
@connection.cmd('String' => "#{meth}#{params}#{options}\r",
'Match' => /error id=0 msg=ok\n/,
'Timeout' => 3) do |data|
buffer << data
end
data = buffer.string
data.force_encoding 'UTF-8'
data.split('|').each do |current|
current_data = {}
current.split(' ').each do |entity|
key, value = entity.split '='
current_data[key] = value.is_a?(String) ? Escaping.decode(value) : nil
end
current_data.delete('error')
current_data.delete('id')
current_data.delete('msg')
result << current_data
end
result << {'id' => '0', 'msg' => 'ok'}
result.delete({})
result
end