Class: Slimmer::App
- Inherits:
-
Object
- Object
- Slimmer::App
- Defined in:
- lib/slimmer/app.rb
Instance Method Summary collapse
- #admin(request, body) ⇒ Object
- #call(env) ⇒ Object
-
#initialize(app, *args, &block) ⇒ App
constructor
A new instance of App.
- #on_404(request, body) ⇒ Object
- #on_error(request, status, body) ⇒ Object
- #on_success(source_request, request, body) ⇒ Object
- #rewrite_response(env, response_to_skin) ⇒ Object
- #s(body) ⇒ Object
Constructor Details
#initialize(app, *args, &block) ⇒ App
Returns a new instance of App.
6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
# File 'lib/slimmer/app.rb', line 6 def initialize(app, *args, &block) = args.first || {} @app = app logger = [:logger] || NullLogger.instance self.logger = logger if .key? :template_path raise "Template path should not be used. Use asset_host instead." end unless [:asset_host] [:asset_host] = Plek.current.find("assets") end @skin = Skin.new [:asset_host], [:cache_templates], [:prefix], :logger => logger end |
Instance Method Details
#admin(request, body) ⇒ Object
39 40 41 |
# File 'lib/slimmer/app.rb', line 39 def admin(request,body) @skin.admin(request,body) end |
#call(env) ⇒ Object
24 25 26 27 28 29 30 31 32 33 |
# File 'lib/slimmer/app.rb', line 24 def call(env) logger.debug "Slimmer: capturing response" response_array = @app.call(env) if response_array[1][SKIP_HEADER] logger.debug "Slimmer: Asked to skip slimmer via HTTP header" response_array else rewrite_response(env, response_array) end end |
#on_404(request, body) ⇒ Object
47 48 49 |
# File 'lib/slimmer/app.rb', line 47 def on_404(request,body) @skin.error(request, '404', body) end |
#on_error(request, status, body) ⇒ Object
43 44 45 |
# File 'lib/slimmer/app.rb', line 43 def on_error(request, status, body) @skin.error(request, '500', body) end |
#on_success(source_request, request, body) ⇒ Object
35 36 37 |
# File 'lib/slimmer/app.rb', line 35 def on_success(source_request, request, body) @skin.success(source_request, request, body) end |
#rewrite_response(env, response_to_skin) ⇒ Object
58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 |
# File 'lib/slimmer/app.rb', line 58 def rewrite_response(env, response_to_skin) status, headers, app_body = response_to_skin logger.debug "Slimmer: constructing request object" source_request = Rack::Request.new(env) logger.debug "Slimmer: constructing request headers object" request = Rack::Request.new(headers) content_type = headers['Content-Type'] || headers['content-type'] logger.debug "Slimmer: Content-Type: #{content_type}" if content_type =~ /text\/html/ logger.debug "Slimmer: Status code = #{status}" case status.to_i when 200 logger.debug "Slimmer: I will rewrite this request" logger.debug "Slimmer: #{TEMPLATE_HEADER} = #{headers[TEMPLATE_HEADER].inspect}" logger.debug "Slimmer: Request path = #{source_request.path.inspect}" if headers[TEMPLATE_HEADER] == 'admin' || source_request.path =~ /^\/admin(\/|$)/ logger.debug "Slimmer: Rewriting this request as an admin request" rewritten_body = admin(request,s(app_body)) else logger.debug "Slimmer: Rewriting this request as a public request" rewritten_body = on_success(source_request, request, s(app_body)) end when 301, 302, 304 logger.debug "Slimmer: I will not rewrite this request" rewritten_body = app_body when 404 logger.debug "Slimmer: Rewriting this request as a 404 error" rewritten_body = on_404(request,s(app_body)) else logger.debug "Slimmer: Rewriting this request as a generic error" rewritten_body = on_error(request,status,s(app_body)) end else logger.debug "Slimmer: I will not rewrite this request" rewritten_body = app_body end rewritten_body = [rewritten_body] unless rewritten_body.respond_to?(:each) headers['Content-Length'] = rewritten_body.join("").bytesize.to_s logger.debug "Slimmer: Returning final status, headers and body" [status, headers, rewritten_body] end |
#s(body) ⇒ Object
51 52 53 54 55 56 |
# File 'lib/slimmer/app.rb', line 51 def s(body) return body.to_s unless body.respond_to?(:each) b = "" body.each {|a| b << a } b end |