Sha256: 82ef098025d2d62f86f1495e881958c8dbfd7fb5ea3af2928717519e1e4a0058

Contents?: true

Size: 1.21 KB

Versions: 3

Compression:

Stored size: 1.21 KB

Contents

# frozen_string_literal: true

require 'net/http'
require 'tempfile'
require 'uri'

module RailsExecution
  module Files
    class Reader

      def initialize(task)
        @task = task
        @tempfile_by_name = {}
      end

      def call
        raise ::NotImplementedError, "load_files (Output: { 'file1' => 'file-url', file2 => 'file-url' })"
      end

      # Return: the Tempfile instance
      def get_file(name)
        return nil if name.blank?

        @file_url_by_name ||= call
        file_url = @file_url_by_name[name]
        return nil if file_url.blank?

        @tempfile_by_name[name] ||= save_to_tempfile(name, file_url)
      end

      private

      attr_reader :task

      def save_to_tempfile(file_name, url)
        file = open(url)
        return file if file.is_a?(Tempfile)

        raise "Unsupported the Filetype #{file.class.name}" unless file.is_a?(StringIO)

        file_extension = file.base_uri.path.split('.').last
        file_extension = ".#{file_extension}" if file_extension
        tempfile = Tempfile.new([file_name, file_extension])
        tempfile.binmode
        tempfile.write(file.string)
        tempfile.rewind
        tempfile.close
        tempfile
      end

    end
  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
rails_execution-0.1.12 lib/rails_execution/files/reader.rb
rails_execution-0.1.7 lib/rails_execution/files/reader.rb
rails_execution-0.1.5 lib/rails_execution/files/reader.rb