Class: Rack::Preview

Inherits:
Object
  • Object
show all
Defined in:
lib/rack/preview.rb

Instance Method Summary collapse

Constructor Details

#initialize(app, preview_body = nil, &block) ⇒ Preview

Returns a new instance of Preview.



7
8
9
10
# File 'lib/rack/preview.rb', line 7

def initialize(app, preview_body = nil, &block)
  @app = app
  @preview = (preview_body ? [preview_body] : block.call)
end

Instance Method Details

#call(env) ⇒ Object



12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
# File 'lib/rack/preview.rb', line 12

def call(env)
  status, headers, response = @app.call(env)
  
  previewing     = env["HTTP_X_PURPOSE"] =~ /preview/i                # note http://code.google.com/p/chromium/issues/detail?id=80824
  ua_string      = env["HTTP_USER_AGENT"]
  safari_preview = ua_string !~ /Chrome/ && ua_string =~ /Safari/     # Chrome sends "Safari" in its UA
  opera_preview  = ua_string =~ /Opera/                               # Opera documentation says they'll send X-Purpose: preview
      
  if previewing && (safari_preview || opera_preview)
    response.close if response.respond_to?(:close)
    [status, headers, @preview]
  else
    [status, headers, response]
  end
end