¿Cómo puedo hacer mi propia clase que se puede sustituir por IO para, p. Ej., redirigir/capturar entrada/salida para algún código que acepte un parámetro IO-like? IO en sí parece estar acoplado a los descriptores de archivos del sistema operativo y la única clase que conozco que lo imita sin subclasificarlo es StringIO, que parece simplemente reimplementar toda la interfaz.¿Cómo se crea una subclase personalizada de IO en Ruby?
Creo que el lenguaje proporcionaría una manera directa de hacerlo, pero no puedo encontrar ninguna información sobre el tema. ¿Hay algún mixin que implemente la interfaz sobre algunas primitivas, como lo hace Enumerable?
El problema es que hay un montón de métodos que leen/escriben datos y volver a implementarlos es tedioso. Enumerable implementa explícitamente todo en términos de #each, por lo tanto anulando #each, obtiene todo lo demás "gratis". No entiendo por qué IO no funciona de la misma manera o por qué los mixins que ahora estoy escribiendo para lograr esto todavía no existen. La otra cosa extraña es que IO es tan especializado, con métodos como sys * que no pertenecen a otras implementaciones. Esto se puede solucionar, pero no es ideal. – jedediah