# frozen_string_literal: true require 'rest-client' require_relative '../log/loggable' require_relative '../vendors/errors/content_ingest_error' module Vle class VleIngestAsset include Log::Loggable def call(content, destination) logger.info("ONEX asset ingest: #{content}") tmp_file = Tempfile.new('vendor-scheduler-service-content-ingest') begin source = content[:url] || content[:uri] IO.copy_stream(URI.parse(source).open, tmp_file.path) logger.debug("Content retrieved. Now starting ONEX ingest...") res = RestClient.put(destination, tmp_file, { 'Content-Type': "binary/octet-stream" }) case res.code when 200 #Net::HTTPSuccess logger.debug("ONEX Asset ingested.") true else logger.error "Error ingesting content into ONEX: POST returned #{res.code}" raise Vendors::Errors::ContentIngestError end rescue StandardError => e logger.error "Error ingesting content into ONEX: #{e.message}" raise Vendors::Errors::ContentIngestError ensure tmp_file.close! end end end end