Class: Slimmer::App
- Inherits:
-
Object
- Object
- Slimmer::App
- Defined in:
- lib/slimmer/app.rb
Instance Attribute Summary collapse
-
#logger ⇒ Object
Returns the value of attribute logger.
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?(status, headers) ⇒ Boolean
- #rewrite_response(env, response) ⇒ Object
- #s(body) ⇒ Object
- #skip_slimmer?(env, response) ⇒ Boolean
- #skip_slimmer_header?(response) ⇒ Boolean
- #skip_slimmer_param?(env) ⇒ Boolean
- #strip_slimmer_headers(headers) ⇒ Object
Constructor Details
#initialize(app, *args, &block) ⇒ App
Returns a new instance of App.
5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
# File 'lib/slimmer/app.rb', line 5 def initialize(app, *args, &block) = args.first || {} @app = app logger = [:logger] || NullLogger.instance self.logger = logger begin if logger.level == 0 # Log set to debug level unless [:enable_debugging] self.logger = logger.dup self.logger.level = 1 # info end end rescue NoMethodError # In case logger doesn't respond_to? :level end if .key? :template_path raise "Template path should not be used. Use asset_host instead." end unless [:asset_host] [:asset_host] = Plek.current.find("static") end @skin = Skin.new .merge(logger: self.logger) end |
Instance Attribute Details
#logger ⇒ Object
Returns the value of attribute logger.
3 4 5 |
# File 'lib/slimmer/app.rb', line 3 def logger @logger end |
Instance Method Details
#call(env) ⇒ Object
32 33 34 35 36 37 38 39 40 41 42 43 44 45 |
# File 'lib/slimmer/app.rb', line 32 def call(env) logger.debug "Slimmer: capturing response" status, headers, body = @app.call(env) if response_can_be_rewritten?(status, headers) response = Rack::Response.new(body, status, headers) if !skip_slimmer?(env, response) status, headers, body = rewrite_response(env, response) end end [status, strip_slimmer_headers(headers), body] end |
#content_length(rewritten_body) ⇒ Object
75 76 77 78 79 |
# File 'lib/slimmer/app.rb', line 75 def content_length(rewritten_body) size = 0 rewritten_body.each { |part| size += part.bytesize } size.to_s end |
#in_development? ⇒ Boolean
55 56 57 |
# File 'lib/slimmer/app.rb', line 55 def in_development? ENV['RAILS_ENV'] == 'development' end |
#response_can_be_rewritten?(status, headers) ⇒ Boolean
47 48 49 |
# File 'lib/slimmer/app.rb', line 47 def response_can_be_rewritten?(status, headers) Rack::Utils::HeaderHash.new(headers)["Content-Type"] =~ /text\/html/ && ![301, 302, 304].include?(status) end |
#rewrite_response(env, response) ⇒ Object
81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 |
# File 'lib/slimmer/app.rb', line 81 def rewrite_response(env, response) request = Rack::Request.new(env) rewritten_body = case response.status when 200 @skin.success request, response, s(response.body) 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 end |
#s(body) ⇒ Object
68 69 70 71 72 73 |
# File 'lib/slimmer/app.rb', line 68 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
51 52 53 |
# File 'lib/slimmer/app.rb', line 51 def skip_slimmer?(env, response) (in_development? && skip_slimmer_param?(env)) || skip_slimmer_header?(response) end |
#skip_slimmer_header?(response) ⇒ Boolean
64 65 66 |
# File 'lib/slimmer/app.rb', line 64 def skip_slimmer_header?(response) !!response.headers[Headers::SKIP_HEADER] end |
#skip_slimmer_param?(env) ⇒ Boolean
59 60 61 62 |
# File 'lib/slimmer/app.rb', line 59 def skip_slimmer_param?(env) skip = Rack::Request.new(env).params['skip_slimmer'] skip and skip.to_i > 0 end |
#strip_slimmer_headers(headers) ⇒ Object
100 101 102 |
# File 'lib/slimmer/app.rb', line 100 def strip_slimmer_headers(headers) headers.reject {|k, v| k =~ /\A#{Headers::HEADER_PREFIX}/ } end |