Sha256: 7e4f12c622aa2c4be187110ba6cdc33c889431dbb594eb86a1e1cbb9bcdfbc2b

Contents?: true

Size: 1.72 KB

Versions: 15

Compression:

Stored size: 1.72 KB

Contents

require 'json'
require 'open-uri'

begin
  require 'httpclient'
rescue LoadError
  puts "httpclient not available. Install it with: gem install httpclient"
end

module Middleman
  module SmushPngs
    def self.included(base)
      base.supported_formats << "png"
    end
    
    def render_path(file)
      if File.extname(file) == ".png"
        file = File.join(options.public, file)
        optimized = optimized_image_data_for(file)

        begin
          raise "Error: got larger" if size(file) < optimized.size
          raise "Error: empty file downloaded" if optimized.size < 20

          optimized
        rescue
          File.read(file)
        end
      else
        super
      end
    end

  protected
    def size(file)
      File.exist?(file) ? File.size(file) : 0
    end
    
    def optimized_image_data_for(file)
      # I leave these urls here, just in case it stops working again...
      # url = "http://smush.it/ws.php" # original, redirects to somewhere else..
      url = 'http://ws1.adq.ac4.yahoo.com/ysmush.it/ws.php'
      # url = "http://developer.yahoo.com/yslow/smushit/ws.php" # official but does not work
      # url = "http://smushit.com/ysmush.it/ws.php" # used at the new page but does not hande uploads
      # url = "http://smushit.eperf.vip.ac4.yahoo.com/ysmush.it/ws.php" # used at the new page but does not hande uploads
      response = HTTPClient.post url, { 'files[]' => File.new(file) }
      response = JSON.parse(response.body.content)
      raise "smush.it: #{response['error']}" if response['error']
      image_url = response['dest']
      raise "no dest path found" unless image_url
      open(image_url) { |source| source.read() }
    end
  end
  
  class Base
    include Middleman::SmushPngs
  end
end

Version data entries

15 entries across 15 versions & 1 rubygems

Version Path
middleman-0.9.23 lib/middleman/features/smush_pngs.rb
middleman-0.9.22 lib/middleman/features/smush_pngs.rb
middleman-0.9.21 lib/middleman/features/smush_pngs.rb
middleman-0.9.20 lib/middleman/features/smush_pngs.rb
middleman-0.9.18 lib/middleman/features/smush_pngs.rb
middleman-0.9.17 lib/middleman/features/smush_pngs.rb
middleman-0.9.16 lib/middleman/features/smush_pngs.rb
middleman-0.9.15 lib/middleman/features/smush_pngs.rb
middleman-0.9.14 lib/middleman/features/smush_pngs.rb
middleman-0.9.13 lib/middleman/features/smush_pngs.rb
middleman-0.9.12 lib/middleman/features/smush_pngs.rb
middleman-0.9.11 lib/middleman/features/smush_pngs.rb
middleman-0.9.10 lib/middleman/features/smush_pngs.rb
middleman-0.9.9 lib/middleman/features/smush_pngs.rb
middleman-0.9.8 lib/middleman/features/smush_pngs.rb