/ / ¿Hay una forma más concisa de escribir este código - ruby

¿Hay alguna forma más concisa de escribir este código? Ruby

Acabo de escribir este código rubí, es muysimple, solo quiero cambiar el orden de operación dependiendo de una variable. Tengo la sensación de que lo que he escrito es más detallado de lo que debe ser, ¿alguien puede pensar en una forma más concisa de escribirlo?

if opts["--appears"]
if regex = opts["--matches"]
test = !response.text.match(regex)
else
test = !response.empty?
end
else
if regex = opts["--matches"]
test = response.text.match(regex)
else
test = response.empty?
end
end

Entonces, lo que creo que se puede optimizar es el bloque externo if, todo lo que cambia es que gira test dentro !test. Disculpas por lo que parece ser una pregunta simple, pero simplemente no puedo pensar en qué hacer para optimizarla.

Déjeme saber si cree que este es un mal foro para esta pregunta o si cree que debería ser movido a revisión de código. Estaba pensando que este podría ser el mejor lugar para hacerlo, pero no estaba seguro.

Gracias

Respuestas

2 para la respuesta № 1

Una mejora simple es ejecutar la prueba primero y luego devolver el negativo si aparece ["- aparece"]:

test = if regex = opts["--matches"]
response.text.match(regex)
else
response.empty?
end

opts["--appears"] ? !test : test

0 para la respuesta № 2

Creo que esto simplificaría el código y mejoraría la legibilidad:

regex = opts["--matches"]
test =
if opts["--appears"]
regex ? !response.text.match(regex) : !response.empty?
else
regex ? response.text.match(regex)  : response.empty?
end

o, si lo prefiere:

regex = opts["--matches"]
test =
case opts["--appears"]
when true
regex ? !response.text.match(regex) : !response.empty?
when false
regex ? response.text.match(regex)  : response.empty?
end