Class: Slimmer::App
- Inherits:
-
Object
- Object
- Slimmer::App
- Defined in:
- lib/slimmer/app.rb
Instance Method Summary collapse
- #call(env) ⇒ Object
- #content_length(rewritten_body) ⇒ Object
- #in_development? ⇒ Boolean
-
#initialize(app, *args, &block) ⇒ App
constructor
A new instance of App.
- #response_can_be_rewritten?(response) ⇒ Boolean
- #rewrite_response(env, response) ⇒ Object
- #s(body) ⇒ Object
- #skip_slimmer?(env, response) ⇒ Boolean
- #skip_slimmer_header?(response) ⇒ Boolean
- #skip_slimmer_param?(env) ⇒ Boolean
Constructor Details
#initialize(app, *args, &block) ⇒ App
Returns a new instance of App.
8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
# File 'lib/slimmer/app.rb', line 8 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 .merge(logger: logger) end |
Instance Method Details
#call(env) ⇒ Object
26 27 28 29 30 31 32 33 34 35 36 |
# File 'lib/slimmer/app.rb', line 26 def call(env) logger.debug "Slimmer: capturing response" status, headers, body = @app.call(env) response = Rack::Response.new(body, status, headers) if response_can_be_rewritten?(response) && !skip_slimmer?(env, response) rewrite_response(env, response) else [status, headers, body] end end |
#content_length(rewritten_body) ⇒ Object
66 67 68 69 70 |
# File 'lib/slimmer/app.rb', line 66 def content_length(rewritten_body) size = 0 rewritten_body.each { |part| size += part.bytesize } size.to_s end |
#in_development? ⇒ Boolean
46 47 48 |
# File 'lib/slimmer/app.rb', line 46 def in_development? ENV['RAILS_ENV'] == 'development' end |
#response_can_be_rewritten?(response) ⇒ Boolean
38 39 40 |
# File 'lib/slimmer/app.rb', line 38 def response_can_be_rewritten?(response) response.content_type =~ /text\/html/ && ![301, 302, 304].include?(response.status) end |
#rewrite_response(env, response) ⇒ Object
72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 |
# File 'lib/slimmer/app.rb', line 72 def rewrite_response(env, response) request = Rack::Request.new(env) rewritten_body = case response.status when 200 if response.headers[TEMPLATE_HEADER] == 'admin' || request.path =~ /^\/admin(\/|$)/ @skin.admin s(response.body) else @skin.success request, response, s(response.body) end when 404 @skin.error '404', s(response.body) else @skin.error '500', s(response.body) end rewritten_body = [rewritten_body] unless rewritten_body.respond_to?(:each) response.body = rewritten_body response.headers['Content-Length'] = content_length(response.body) response.finish rescue GdsApi::TimedOutException [503, {"Content-Type" => "text/plain"}, ["GDS API request timed out."]] end |
#s(body) ⇒ Object
59 60 61 62 63 64 |
# File 'lib/slimmer/app.rb', line 59 def s(body) return body.to_s unless body.respond_to?(:each) b = "" body.each {|a| b << a } b end |
#skip_slimmer?(env, response) ⇒ Boolean
42 43 44 |
# File 'lib/slimmer/app.rb', line 42 def skip_slimmer?(env, response) (in_development? && skip_slimmer_param?(env)) || skip_slimmer_header?(response) end |
#skip_slimmer_header?(response) ⇒ Boolean
55 56 57 |
# File 'lib/slimmer/app.rb', line 55 def skip_slimmer_header?(response) !!response.headers[SKIP_HEADER] end |
#skip_slimmer_param?(env) ⇒ Boolean
50 51 52 53 |
# File 'lib/slimmer/app.rb', line 50 def skip_slimmer_param?(env) skip = Rack::Request.new(env).params['skip_slimmer'] skip and skip.to_i > 0 end |