lib/pdfkit/middleware.rb in pdfkit-0.3.1 vs lib/pdfkit/middleware.rb in pdfkit-0.3.2
- old
+ new
@@ -1,8 +1,7 @@
class PDFKit
- # A rack middleware for validating HTML via w3c validator
class Middleware
def initialize(app, options = {})
@app = app
@options = options
@@ -10,13 +9,13 @@
def call(env)
@render_pdf = false
set_request_to_render_as_pdf(env) if env['PATH_INFO'].match(/\.pdf$/)
- status, headers, response = @app.call( env )
+ status, headers, response = @app.call(env)
- request = Rack::Request.new( env )
+ request = Rack::Request.new(env)
if @render_pdf && headers['Content-Type'] =~ /text\/html|application\/xhtml\+xml/
body = response.body
body = translate_paths(body, env)
@@ -26,44 +25,39 @@
# Do not cache PDFs
puts "DELETING CACHING"
headers.delete('ETag')
headers.delete('Cache-Control')
- headers["Content-Length"] = body.length.to_s
+ headers["Content-Length"] = body.bytes.to_a.size.to_s
headers["Content-Type"] = "application/pdf"
response = [body]
end
[status, headers, response]
end
private
+ # Change relative paths to absolute
def translate_paths(body, env)
- # Make absolute urls
- uri = env['REQUEST_URI'].split('?').first
- uri += '/' unless uri.match(/\/$/)
- root = env['rack.url_scheme'] + "://" + env['HTTP_HOST']
+ # Host with protocol
+ root = env['rack.url_scheme'] + "://" + env['HTTP_HOST'] + "/"
- # translate relative urls
- body.gsub!(/(href|src)=['"]([^\/][^\"']*)['"]/,'\1="'+root+'/\2"')
-
- # translate absolute urls
- body.gsub!(/(href|src)=['"]\/([^\"]*|[^']*)['"]/,'\1="'+uri+'\2"')
+ body.gsub!(/(href|src)=['"]\/([^\"']*|[^"']*)['"]/,'\1="'+root+'\2"')
end
def set_request_to_render_as_pdf(env)
@render_pdf = true
puts "Setting PDF mode"
path = Pathname(env['PATH_INFO'])
env['PATH_INFO'] = path.to_s.sub(/#{path.extname}$/,'') if path.extname == '.pdf'
- env['HTTP_ACCEPT'] = concat(env['HTTP_ACCEPT'], Rack::Mime.mime_type('html'))
+ env['HTTP_ACCEPT'] = concat(env['HTTP_ACCEPT'], Rack::Mime.mime_type('.html'))
end
def concat(accepts, type)
(accepts || '').split(',').unshift(type).compact.join(',')
end
end
-end
\ No newline at end of file
+end