Class: Middleman::Extensions::MinifyJavascript::Rack

Inherits:
Object
  • Object
show all
Defined in:
lib/middleman-more/extensions/minify_javascript.rb

Overview

Rack middleware to look for JS and compress it

Instance Method Summary collapse

Constructor Details

#initialize(app, options = {}) ⇒ Rack

Init

Parameters:

  • app (Class)
  • options (Hash) (defaults to: {})


31
32
33
34
35
36
# File 'lib/middleman-more/extensions/minify_javascript.rb', line 31

def initialize(app, options={})
  @app = app
  @compressor = options[:compressor]
  @ignore = options[:ignore]
  @inline = options[:inline]
end

Instance Method Details

#call(env) ⇒ Array

Rack interface

Parameters:

  • env (Rack::Environmemt)

Returns:

  • (Array)


41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
# File 'lib/middleman-more/extensions/minify_javascript.rb', line 41

def call(env)
  status, headers, response = @app.call(env)

  path = env["PATH_INFO"]

  begin
    if @inline && (path.end_with?('.html') || path.end_with?('.php'))
      uncompressed_source = ::Middleman::Util.extract_response_text(response)

      minified = minify_inline_content(uncompressed_source)

      headers["Content-Length"] = ::Rack::Utils.bytesize(minified).to_s
      response = [minified]
    elsif path.end_with?('.js') && @ignore.none? {|ignore| Middleman::Util.path_match(ignore, path) }
      uncompressed_source = ::Middleman::Util.extract_response_text(response)
      minified = @compressor.compress(uncompressed_source)

      headers["Content-Length"] = ::Rack::Utils.bytesize(minified).to_s
      response = [minified]
    end
  rescue ExecJS::ProgramError => e
    warn "WARNING: Couldn't compress JavaScript in #{path}: #{e.message}"
  end

  [status, headers, response]
end