Class: Mindee::Input::Source::URLInputSource
- Inherits:
-
Object
- Object
- Mindee::Input::Source::URLInputSource
- Defined in:
- lib/mindee/input/sources/url_input_source.rb
Overview
Load a remote document from a file url.
Instance Attribute Summary collapse
- #url ⇒ String readonly
Instance Method Summary collapse
-
#as_local_input_source(filename: nil, username: nil, password: nil, token: nil, max_redirects: 3) ⇒ BytesInputSource
Downloads the file from the url, and returns a BytesInputSource wrapper object for it.
-
#fetch_file_content(username: nil, password: nil, token: nil, max_redirects: 3) ⇒ String
Fetches the file content from the URL.
-
#initialize(url) ⇒ URLInputSource
constructor
A new instance of URLInputSource.
-
#write_to_file(path, filename: nil, username: nil, password: nil, token: nil, max_redirects: 3) ⇒ String
Downloads the file from the URL and saves it to the specified path.
Constructor Details
#initialize(url) ⇒ URLInputSource
Returns a new instance of URLInputSource.
16 17 18 19 20 21 22 |
# File 'lib/mindee/input/sources/url_input_source.rb', line 16 def initialize(url) raise Errors::MindeeInputError, 'URL must be HTTPS' unless url.start_with? 'https://' logger.debug("URL input: #{url}") @url = url end |
Instance Attribute Details
#url ⇒ String (readonly)
14 15 16 |
# File 'lib/mindee/input/sources/url_input_source.rb', line 14 def url @url end |
Instance Method Details
#as_local_input_source(filename: nil, username: nil, password: nil, token: nil, max_redirects: 3) ⇒ BytesInputSource
Downloads the file from the url, and returns a BytesInputSource wrapper object for it.
53 54 55 56 57 58 59 60 |
# File 'lib/mindee/input/sources/url_input_source.rb', line 53 def as_local_input_source(filename: nil, username: nil, password: nil, token: nil, max_redirects: 3) filename = fill_filename(filename) response_body = fetch_file_content(username: username, password: password, token: token, max_redirects: max_redirects) bytes = StringIO.new(response_body) BytesInputSource.new(bytes.read || '', filename || '') end |
#fetch_file_content(username: nil, password: nil, token: nil, max_redirects: 3) ⇒ String
Fetches the file content from the URL.
69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 |
# File 'lib/mindee/input/sources/url_input_source.rb', line 69 def fetch_file_content(username: nil, password: nil, token: nil, max_redirects: 3) uri = URI.parse(@url) request = Net::HTTP::Get.new(uri) request['Authorization'] = "Bearer #{token}" if token request.basic_auth(username, password) if username && password response = make_request(uri, request, max_redirects) if response.code.to_i > 299 raise Errors::MindeeAPIError, "Failed to download file: HTTP status code #{response.code}" elsif response.code.to_i < 200 raise Errors::MindeeAPIError, "Failed to download file: Invalid response code #{response.code}." end response.body end |
#write_to_file(path, filename: nil, username: nil, password: nil, token: nil, max_redirects: 3) ⇒ String
Downloads the file from the URL and saves it to the specified path.
33 34 35 36 37 38 39 40 41 42 43 |
# File 'lib/mindee/input/sources/url_input_source.rb', line 33 def write_to_file(path, filename: nil, username: nil, password: nil, token: nil, max_redirects: 3) response_body = fetch_file_content(username: username, password: password, token: token, max_redirects: max_redirects) filename = fill_filename(filename) full_path = File.join(path.chomp('/'), filename) File.write(full_path, response_body) full_path end |