Abra una secuencia de IO desde un archivo local o url

Sé que hay librerías en otros idiomas que pueden tomar una cadena que contiene una ruta a un archivo local o una url y abrirla como una secuencia IO legible.

¿Hay alguna manera fácil de hacer esto en ruby?

open-uri es parte de la biblioteca estándar de Ruby, y redefinirá el comportamiento de open para que pueda abrir una url, así como un archivo local. Devuelve un objeto File , por lo que debería poder invocar métodos como read y readlines .

 require 'open-uri' file_contents = open('local-file.txt') { |f| f.read } web_contents = open('http://www.stackoverflow.com') {|f| f.read } 

Para url, es posible que desee rest-client , de su documento

Si desea transmitir los datos de la respuesta a un archivo como viene, en lugar de estar completamente en la memoria, también puede pasar RestClient :: Request.exe a un parámetro: block_response a la que pasa un bloque / proc. Este bloque recibe el objeto raw sin procesar Net :: HTTPResponse de Net :: HTTP, que puede usar para transmitir directamente a un archivo a medida que se recibe cada fragmento.

 File.open('/some/output/file', 'w') {|f| block = proc { |response| response.read_body do |chunk| f.write chunk end } RestClient::Request.execute(method: :get, url: 'http://example.com/some/really/big/file.img', block_response: block) }