middleman 0.9.23 → 0.10.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.9.23
1
+ 0.10.0
@@ -1,58 +1,35 @@
1
- require 'json'
2
- require 'open-uri'
3
-
4
- begin
5
- require 'httpclient'
6
- rescue LoadError
7
- puts "httpclient not available. Install it with: gem install httpclient"
8
- end
1
+ require "smusher"
2
+ require "middleman/builder"
9
3
 
10
4
  module Middleman
11
- module SmushPngs
12
- def self.included(base)
13
- base.supported_formats << "png"
14
- end
15
-
16
- def render_path(file)
17
- if File.extname(file) == ".png"
18
- file = File.join(options.public, file)
19
- optimized = optimized_image_data_for(file)
20
-
21
- begin
22
- raise "Error: got larger" if size(file) < optimized.size
23
- raise "Error: empty file downloaded" if optimized.size < 20
24
-
25
- optimized
26
- rescue
27
- File.read(file)
28
- end
5
+ class Builder
6
+ alias_method :pre_smush_after_run, :after_run
7
+ def after_run
8
+ pre_smush_after_run
9
+ smush_dir = File.join(Middleman::Base.build_dir, Middleman::Base.images_dir)
10
+
11
+ # Read cache
12
+ cache_file = File.join(Middleman::Base.root, ".smush-cache")
13
+ cache_data = if File.exists?(cache_file)
14
+ Marshal.restore(File.read(cache_file))
29
15
  else
30
- super
16
+ {}
31
17
  end
32
- end
18
+
19
+ ::Smusher.class_eval do
20
+ images_in_folder(smush_dir).each do |file|
21
+ original_file_size = size(file)
22
+ return if original_file_size.zero?
23
+ return if cache_data[file] && cache_data[file] == original_file_size
33
24
 
34
- protected
35
- def size(file)
36
- File.exist?(file) ? File.size(file) : 0
37
- end
38
-
39
- def optimized_image_data_for(file)
40
- # I leave these urls here, just in case it stops working again...
41
- # url = "http://smush.it/ws.php" # original, redirects to somewhere else..
42
- url = 'http://ws1.adq.ac4.yahoo.com/ysmush.it/ws.php'
43
- # url = "http://developer.yahoo.com/yslow/smushit/ws.php" # official but does not work
44
- # url = "http://smushit.com/ysmush.it/ws.php" # used at the new page but does not hande uploads
45
- # url = "http://smushit.eperf.vip.ac4.yahoo.com/ysmush.it/ws.php" # used at the new page but does not hande uploads
46
- response = HTTPClient.post url, { 'files[]' => File.new(file) }
47
- response = JSON.parse(response.body.content)
48
- raise "smush.it: #{response['error']}" if response['error']
49
- image_url = response['dest']
50
- raise "no dest path found" unless image_url
51
- open(image_url) { |source| source.read() }
25
+ with_logging(file, true) do
26
+ write_optimized_data(file)
27
+ cache_data[file] = size(file) # Add or update cache
28
+ File.open(cache_file, "w") { |f| f.write Marshal.dump(cache_data) } # Write cache
29
+ say "<%= color('#{"[SMUSHED]".rjust(12)}', :yellow) %> " + file.gsub(Middleman::Base.build_dir+"/", '')
30
+ end
31
+ end
32
+ end
52
33
  end
53
34
  end
54
-
55
- class Base
56
- include Middleman::SmushPngs
57
- end
58
35
  end
@@ -14,12 +14,13 @@ end
14
14
 
15
15
  class Templater::Actions::Template
16
16
  def render
17
+ @@rack_test ||= Rack::Test::Session.new(Rack::MockSession.new(Middleman::Base))
18
+
17
19
  @render_cache ||= begin
18
20
  # The default render just requests the page over Rack and writes the response
19
21
  request_path = destination.gsub(File.join(Dir.pwd, Middleman::Base.build_dir), "")
20
- browser = Rack::Test::Session.new(Rack::MockSession.new(Middleman::Base))
21
- browser.get(request_path)
22
- browser.last_response.body
22
+ @@rack_test.get(request_path)
23
+ @@rack_test.last_response.body
23
24
  end
24
25
  end
25
26
  end
data/middleman.gemspec CHANGED
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{middleman}
8
- s.version = "0.9.23"
8
+ s.version = "0.10.0"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Thomas Reynolds"]
12
- s.date = %q{2009-10-28}
12
+ s.date = %q{2009-10-29}
13
13
  s.email = %q{tdreyno@gmail.com}
14
14
  s.executables = ["mm-init", "mm-build", "mm-server"]
15
15
  s.extra_rdoc_files = [
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: middleman
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.9.23
4
+ version: 0.10.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Thomas Reynolds
@@ -9,7 +9,7 @@ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
11
 
12
- date: 2009-10-28 00:00:00 -07:00
12
+ date: 2009-10-29 00:00:00 -07:00
13
13
  default_executable:
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency