Chris@909: module RFPDF Chris@909: module TemplateHandler Chris@909: Chris@909: class CompileSupport Chris@909: # extend ActiveSupport::Memoizable Chris@909: Chris@909: attr_reader :options Chris@909: Chris@909: def initialize(controller) Chris@909: @controller = controller Chris@909: @options = pull_options Chris@909: set_headers Chris@909: end Chris@909: Chris@909: def pull_options Chris@909: @controller.send :compute_rfpdf_options || {} Chris@909: end Chris@909: Chris@909: def set_headers Chris@909: set_pragma Chris@909: set_cache_control Chris@909: set_content_type Chris@909: set_disposition Chris@909: end Chris@909: Chris@909: # TODO: kept around from railspdf-- maybe not needed anymore? should check. Chris@909: def ie_request? Chris@909: @controller.request.env['HTTP_USER_AGENT'] =~ /msie/i Chris@909: end Chris@909: # memoize :ie_request? Chris@909: Chris@909: # added to make ie happy with ssl pdf's (per naisayer) Chris@909: def ssl_request? Chris@909: # @controller.request.env['SERVER_PROTOCOL'].downcase == "https" Chris@909: @controller.request.ssl? Chris@909: end Chris@909: # memoize :ssl_request? Chris@909: Chris@909: # TODO: kept around from railspdf-- maybe not needed anymore? should check. Chris@909: def set_pragma Chris@909: if ssl_request? && ie_request? Chris@909: @controller.headers['Pragma'] = 'public' # added to make ie ssl pdfs work (per naisayer) Chris@909: else Chris@909: @controller.headers['Pragma'] ||= ie_request? ? 'no-cache' : '' Chris@909: end Chris@909: end Chris@909: Chris@909: # TODO: kept around from railspdf-- maybe not needed anymore? should check. Chris@909: def set_cache_control Chris@909: if ssl_request? && ie_request? Chris@909: @controller.headers['Cache-Control'] = 'maxage=1' # added to make ie ssl pdfs work (per naisayer) Chris@909: else Chris@909: @controller.headers['Cache-Control'] ||= ie_request? ? 'no-cache, must-revalidate' : '' Chris@909: end Chris@909: end Chris@909: Chris@909: def set_content_type Chris@909: @controller.response.content_type ||= Mime::PDF Chris@909: end Chris@909: Chris@909: def set_disposition Chris@909: inline = options[:inline] ? 'inline' : 'attachment' Chris@909: filename = options[:filename] ? "filename=#{options[:filename]}" : nil Chris@909: @controller.headers["Content-Disposition"] = [inline,filename].compact.join(';') Chris@909: end Chris@909: Chris@909: end Chris@909: Chris@909: end Chris@909: end Chris@909: Chris@909: Chris@909: