Ei pessoal,
Tive um caso estranho em que uma pesquisa SQL teve que ser concluída com uma matriz de dados já presente na memória.
Os dados eram (no banco de dados e na memória) armazenados em chave / valor, então foi muito fácil até que me pediram para lidar com curingas de SQL …
Eventualmente, não foi tão complicado:
configs = {}
Model.where("key like #{key}").each do |c|
configs[c.key] = c.value
end
pattern = Regexp.escape key
pattern = pattern.sub "%", ".*"
pattern = pattern.sub "\?", "."
pattern = "^#{pattern}$"
r = Regexp.new pattern
opts = whateverYourDataComeFrom
opts.each do |k, v|
if r.match k
configs[k] = v
end
end
Algumas coisas a serem observadas:
Regexp.escape
é muito útil para evitar que caracteres especiais sejam interpretados como instruções regexp%
torna-se.*
, literalmente, “qualquer caractere em qualquer quantidade”?
torna-se.
, literalmente, “qualquer personagem, apenas uma vez”. Tenha cuidado,?
tem um significado em regexp e é escapado como\?
^...$
para “início da string” e “finalização da string”
Aqui está, divirta-se!