Sha256: d4fb2418236811c9a9bef699bad91df4d166b9d2f87950b8bdc73eeb5d1bd0df

Contents?: true

Size: 1.36 KB

Versions: 1

Compression:

Stored size: 1.36 KB

Contents

require 'uri'
require 'open-uri'

module Pageflow
  module Chart
    class Downloader
      attr_reader :options

      class HTTPError < StandardError; end

      def initialize(options = {})
        @options = options
      end

      def load(url, raise_on_http_error: false)
        file = make_absolute(url).open
        yield(file)
      rescue OpenURI::HTTPError => exception
        Rails.logger.error "Exception loading url #{url}: #{exception.message}"
        raise(HTTPError) if raise_on_http_error
      ensure
        file.close if file
      end

      def load_all(urls, options = {})
        file = Tempfile.new(['concatenation', options.fetch(:extension, 'txt')])
        file.binmode

        begin
          urls.map do |url|
            file.write(options[:before_each]) if options.key?(:before_each)

            load(url) do |source|
              while data = source.read(16 * 1024)
                file.write(data)
              end
            end

            file.write(options[:after_each]) if options.key?(:after_each)
            file.write(options.fetch(:separator, "\n"))
          end

          file.rewind
          yield(file)
        ensure
          file.close
          file.unlink
        end
      end

      private

      def make_absolute(url)
        options[:base_url] ? URI.join(options[:base_url], url) : URI.parse(url)
      end
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
pageflow-chart-2.6.0 lib/pageflow/chart/downloader.rb