Esto es para una API pública ya existente que no puedo romper, pero deseo extenderla.¿Manera elegante de escribir cadenas de pato, símbolos y matrices?
Actualmente, el método toma una cadena o un símbolo o cualquier otra cosa que tenga sentido cuando se pasa como primer parámetro a send
me gustaría añadir la posibilidad de enviar una lista de cadenas, símbolos, etc. . Podría simplemente usar is_a? Array
, pero hay otras maneras de enviar listas, y eso no es muy ruby-ish.
Llamaré map
en la lista, por lo que la primera inclinación es usar respond_to? :map
. Pero una cadena también responde al :map
, por lo que no funcionará.
Nada que ver con su pregunta, pero espero que esté haciendo algunos controles antes de pasar la información del usuario al método de envío. Yikes. –
buen punto. En nuestro caso, los documentos indican claramente que el parámetro es un nombre de método. Es una API lo suficientemente profunda que esto debería ser suficiente ... –
No es una cuestión de documentación, es un agujero de seguridad. Si pasan en un backtick, el segundo parámetro de send se ejecuta en un shell. ¿Es eso realmente lo que quieres? Es mucho mejor que examines la entrada en una declaración de caso y luego envíes símbolos de tu propia construcción para enviar. –