Class: Hork
- Inherits:
-
Object
- Object
- Hork
- Defined in:
- lib/hork.rb
Constant Summary collapse
- VERSION =
"1.0.0"
Instance Attribute Summary collapse
-
#app ⇒ Object
readonly
Returns the value of attribute app.
-
#compressed_files ⇒ Object
readonly
Returns the value of attribute compressed_files.
-
#css_compressor ⇒ Object
readonly
Returns the value of attribute css_compressor.
-
#js_compressor ⇒ Object
readonly
Returns the value of attribute js_compressor.
Instance Method Summary collapse
- #call(env) ⇒ Object
- #compress(type, source) ⇒ Object
- #compress_response(type, status, headers, body) ⇒ Object
-
#initialize(app) ⇒ Hork
constructor
A new instance of Hork.
- #read_body(source_body) ⇒ Object
Constructor Details
#initialize(app) ⇒ Hork
Returns a new instance of Hork.
10 11 12 13 14 15 |
# File 'lib/hork.rb', line 10 def initialize(app) @app = app @css_compressor = YUI::CssCompressor.new @js_compressor = YUI::JavaScriptCompressor.new(:munge => true) @compressed_files = {} end |
Instance Attribute Details
#app ⇒ Object (readonly)
Returns the value of attribute app.
8 9 10 |
# File 'lib/hork.rb', line 8 def app @app end |
#compressed_files ⇒ Object (readonly)
Returns the value of attribute compressed_files.
8 9 10 |
# File 'lib/hork.rb', line 8 def compressed_files @compressed_files end |
#css_compressor ⇒ Object (readonly)
Returns the value of attribute css_compressor.
8 9 10 |
# File 'lib/hork.rb', line 8 def css_compressor @css_compressor end |
#js_compressor ⇒ Object (readonly)
Returns the value of attribute js_compressor.
8 9 10 |
# File 'lib/hork.rb', line 8 def js_compressor @js_compressor end |
Instance Method Details
#call(env) ⇒ Object
17 18 19 20 21 22 23 24 25 |
# File 'lib/hork.rb', line 17 def call(env) status, headers, body = response = app.call(env) case headers["Content-Type"] when /\bcss\b/ then compress_response(:css, *response) when /\bjavascript\b/ then compress_response(:js, *response) else response end end |
#compress(type, source) ⇒ Object
33 34 35 36 |
# File 'lib/hork.rb', line 33 def compress(type, source) compressed_files[Digest::MD5.hexdigest(source)] ||= send("#{type}_compressor").compress(source) end |
#compress_response(type, status, headers, body) ⇒ Object
27 28 29 30 31 |
# File 'lib/hork.rb', line 27 def compress_response(type, status, headers, body) compressed_body = compress(type, read_body(body)) headers["Content-Length"] = Rack::Utils.bytesize(compressed_body).to_s [status, headers, [compressed_body]] end |
#read_body(source_body) ⇒ Object
38 39 40 41 42 |
# File 'lib/hork.rb', line 38 def read_body(source_body) "".tap do |body| source_body.each { |part| body << part } end end |