Sha256: bbd587e8996edee85f9b0cc7468488b53af96fab41b2115f42d239a2048a32c7

Contents?: true

Size: 844 Bytes

Versions: 2

Compression:

Stored size: 844 Bytes

Contents

require 'base64'
require 'open-uri'

module SignatureGenerator

  class Inliner

    IMG_TAG = /<img[^>]+src\s*=\s*"(https?:\/\/[^"]+\.(?:png|jpg|jpeg))"/

    attr_reader :original_content

    def initialize(content)
      @original_content = content
    end

    def inlined
      result = original_content.dup
      url_candidates = result.scan(IMG_TAG).flatten
      url_candidates.each do |url|
        content64 = load_file url
        result.gsub! url, content64
      end
      result
    end

    private

    def load_file(url)
      content = open(url) {|f| f.read }
      ext = url.gsub /^.*\.([^\.]+)\s*$/, '\1'
      content64 = Base64.strict_encode64 content
      'data:image/%s;base64,%s' % [ext, content64]
    rescue
      EasyAppHelper.logger.warn SignatureGenerator::Error, "Cannot load file '#{file}'"
    end

  end

end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
signature_generator-0.1.6 lib/signature_generator/inliner.rb
signature_generator-0.1.5 lib/signature_generator/inliner.rb