Tengo una aplicación de línea de comandos de Ruby que estoy desarrollando y quiero permitir que un usuario de ella proporcione código que se ejecutará como un filtro en parte del proceso. Básicamente, la aplicación hace lo siguiente:Script de una aplicación de línea de comandos de ruby; la mejor manera de hacer esto?
- de lectura en algunos datos
- Si se especifica un filtro, lo utilizan para filtrar los datos
- proceso de los datos
Quiero que el proceso de filtración (paso 2) ser lo más flexible posible.
Mi idea era que el usuario podría proporcionar un archivo de Ruby que establece una constante conocida para apuntar a un objeto que implementa una interfaz defino, por ejemplo:
# user's filter
class MyFilter
def do_filter(array_to_filter)
filtered_array = Array.new
# do my filtering on array_to_filter
filtered_array
end
FILTER = MyFilter.new
código de mi aplicación sería entonces hacer algo como esto:
array_that_might_get_filtered = get_my_array()
if (options.filter_file)
require options.filter_file
array_that_might_get_filtered = FILTER.do_filter(array_that_might_get_filtered)
end
Mientras que esto funcionaría, se siente cursi y parece que debe haber una mejor manera de hacerlo. También consideré tener el filtro en la forma de agregar un método de un nombre conocido a una clase conocida, pero tampoco me pareció del todo correcto.
¿Hay una mejor expresión idiomática en Ruby para esto?
Mucho más práctico que mi respuesta general. +1 – VonC