Sha256: 8c4021d58bdd6edbdad92306f5692b3c1a8dceacbcba8c306640f56e396ce334

Contents?: true

Size: 1.02 KB

Versions: 1

Compression:

Stored size: 1.02 KB

Contents

# frozen_string_literal: true

require 'tempfile'
require 'uri'

class MyPDFKit
  class Source
    SOURCE_FROM_STDIN = '-'

    def initialize(url_file_or_html)
      @source = url_file_or_html
      # @source is assumed to be modifiable, so make sure it is.
      @source = @source.dup if @source.is_a?(String) && @source.frozen?
    end

    def url?
      @is_url ||= @source.is_a?(String) && @source.match(/\Ahttp/)
    end

    def file?
      @is_file ||= @source.kind_of?(File) || @source.kind_of?(Tempfile)
    end

    def html?
      @is_html ||= !(url? || file?)
    end

    def to_input_for_command
      if file?
        @source.path
      elsif url?
        escaped_url
      else
        SOURCE_FROM_STDIN
      end
    end

    def to_s
      file? ? @source.path : @source
    end

    private

    def escaped_url
      url_needs_escaping? ? URI::DEFAULT_PARSER.escape(@source) : @source
    end

    def url_needs_escaping?
      URI::DEFAULT_PARSER.escape(URI::DEFAULT_PARSER.unescape(@source)) != @source
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
my_pdfkit-0.1.0.0 lib/my_pdfkit/source.rb