Sha256: 0d5c8ef5ac67fa4923d324cab5ed85c1665c13446dc1f7d1b595a2e00483d9a5

Contents?: true

Size: 805 Bytes

Versions: 8

Compression:

Stored size: 805 Bytes

Contents

require 'open-uri'
require 'base64'

class Prawn::Svg::UrlLoader
  attr_accessor :enable_cache, :enable_web
  attr_reader :url_cache

  DATAURL_REGEXP = /(data:image\/(png|jpg);base64(;[a-z0-9]+)*,)/
  URL_REGEXP = /^https?:\/\/|#{DATAURL_REGEXP}/

  def initialize(opts = {})
    @url_cache = {}
    @enable_cache = opts.fetch(:enable_cache, false)
    @enable_web = opts.fetch(:enable_web, true)
  end

  def valid?(url)
    !!url.match(URL_REGEXP)
  end

  def load(url)
    @url_cache[url] || begin
      if m = url.match(DATAURL_REGEXP)
        data = Base64.decode64(url[m[0].length .. -1])
      elsif enable_web
        data = open(url).read
      else
        raise "No handler available to retrieve URL #{url}"
      end
      @url_cache[url] = data if enable_cache
      data
    end
  end
end

Version data entries

8 entries across 8 versions & 1 rubygems

Version Path
prawn-svg-0.21.0 lib/prawn/svg/url_loader.rb
prawn-svg-0.20.0 lib/prawn/svg/url_loader.rb
prawn-svg-0.19.0 lib/prawn/svg/url_loader.rb
prawn-svg-0.18.0 lib/prawn/svg/url_loader.rb
prawn-svg-0.17.0 lib/prawn/svg/url_loader.rb
prawn-svg-0.16.2 lib/prawn/svg/url_loader.rb
prawn-svg-0.16.1 lib/prawn/svg/url_loader.rb
prawn-svg-0.16.0 lib/prawn/svg/url_loader.rb