Skip to content

Commit

Permalink
Reimplement smusher for thor
Browse files Browse the repository at this point in the history
  • Loading branch information
tdreyno committed Jan 30, 2011
1 parent d643a8e commit c6b0723
Show file tree
Hide file tree
Showing 5 changed files with 56 additions and 38 deletions.
8 changes: 2 additions & 6 deletions bin/mm-build
Expand Up @@ -4,10 +4,6 @@ ENV['MM_ENV'] = "build"

# Require app
require File.join(File.dirname(__FILE__), "..", "lib", "middleman")
require 'middleman/builder'

# Initialize server once so features are loaded
Middleman::Server.new

# Middleman::ThorBuilder.source_root(Dir.pwd)
Middleman::Builder.start
require 'middleman/builder'
Middleman::Builder.start
14 changes: 13 additions & 1 deletion lib/middleman/builder.rb
Expand Up @@ -12,7 +12,7 @@ def tilt_template(source, *args, &block)
source = File.expand_path(find_in_source_paths(source.to_s))
context = instance_eval('binding')

@@rack_test ||= Rack::Test::Session.new(Rack::MockSession.new(Middleman::Server))
@@rack_test ||= ::Rack::Test::Session.new(::Rack::MockSession.new(Middleman::Server))

create_file destination, nil, config do
# The default render just requests the page over Rack and writes the response
Expand All @@ -28,6 +28,7 @@ class Builder < Thor::Group
include Middleman::ThorActions

def initialize(*args)
Middleman::Server.new
::Tilt.mappings.keys << "js"
super
end
Expand All @@ -46,6 +47,17 @@ def build_static_files
def build_dynamic_files
action Directory.new(self, Middleman::Server.views, Middleman::Server.build_dir)
end

@@hooks = {}
def self.after_run(name, &block)
@@hooks[name] = block
end

def run_hooks
@@hooks.each do |name, proc|
instance_eval(&proc)
end
end
end

class Directory < ::Thor::Actions::EmptyDirectory
Expand Down
2 changes: 1 addition & 1 deletion lib/middleman/features.rb
Expand Up @@ -8,7 +8,7 @@ module Middleman::Features
autoload :MinifyCss, "middleman/features/minify_css"
autoload :MinifyJavascript, "middleman/features/minify_javascript"
autoload :Slickmap, "middleman/features/slickmap"
autoload :SmushPNGs, "middleman/features/smush_pngs"
autoload :SmushPngs, "middleman/features/smush_pngs"
autoload :CodeRay, "middleman/features/code_ray"
autoload :Lorem, "middleman/features/lorem"
# autoload :LiveReload, "middleman/features/live_reload"
Expand Down
68 changes: 39 additions & 29 deletions lib/middleman/features/smush_pngs.rb
@@ -1,37 +1,47 @@
module Middleman::Features::SmushPNGs
class << self
def registered(app)
require "middleman/builder"

app.alias_method :pre_smush_after_run, :after_run
app.define_method :after_run do
pre_smush_after_run
smush_dir = File.join(Middleman::Server.build_dir, Middleman::Server.images_dir)
module Middleman::Features::SmushPngs
module ThorActions
def smush_pngs
# Read cache
cache_file = File.join(Middleman::Server.root, ".smush-cache")
cache_data = if File.exists?(cache_file)
Marshal.restore(File.read(cache_file))
else
{}
end

smush_dir = File.join(Middleman::Server.build_dir, Middleman::Server.images_dir)

# Read cache
cache_file = File.join(Middleman::Server.root, ".smush-cache")
cache_data = if File.exists?(cache_file)
Marshal.restore(File.read(cache_file))
else
{}
end
files = ::Smusher.class_eval do
images_in_folder(smush_dir)
end

require "smusher"
require "json/pure"
files.each do |file|
::Smusher.class_eval do
images_in_folder(smush_dir).each do |file|
original_file_size = size(file)
return if original_file_size.zero?
return if cache_data[file] && cache_data[file] == original_file_size

with_logging(file, true) do
write_optimized_data(file)
cache_data[file] = size(file) # Add or update cache
File.open(cache_file, "w") { |f| f.write Marshal.dump(cache_data) } # Write cache
say "<%= color('#{"[SMUSHED]".rjust(12)}', :yellow) %> " + file.gsub(Middleman::Server.build_dir+"/", '')
end
original_file_size = size(file)
return if original_file_size.zero?
return if cache_data[file] && cache_data[file] == original_file_size

with_logging(file, true) do
write_optimized_data(file)
cache_data[file] = size(file) # Add or update cache
File.open(cache_file, "w") { |f| f.write Marshal.dump(cache_data) } # Write cache
end
end

say_status :smushed, file.gsub(Middleman::Server.build_dir+"/", "")
end
end
end

class << self
def registered(app)
require "middleman/builder"
require "smusher"
require "json/pure"

Middleman::Builder.send :include, ThorActions
Middleman::Builder.after_run "smush_pngs" do
smush_pngs
end
end
end
Expand Down
2 changes: 1 addition & 1 deletion lib/middleman/version.rb
@@ -1,3 +1,3 @@
module Middleman
VERSION = "1.1.0.beta.1"
VERSION = "1.1.0.beta.2"
end

0 comments on commit c6b0723

Please sign in to comment.