From a54e3f377249e3d44b48d72d8692ddcd6dfec00c Mon Sep 17 00:00:00 2001 From: Steve Klabnik Date: Sun, 14 Oct 2012 12:34:47 -0700 Subject: [PATCH] Second attempt at view_context fix --- lib/draper/view_context.rb | 23 ++++++++++++++++++++--- 1 file changed, 20 insertions(+), 3 deletions(-) diff --git a/lib/draper/view_context.rb b/lib/draper/view_context.rb index e0194e3..653ad3d 100644 --- a/lib/draper/view_context.rb +++ b/lib/draper/view_context.rb @@ -1,18 +1,35 @@ module Draper module ViewContext def self.current - Thread.current[:current_view_context] || ApplicationController.new.view_context + Thread.current[:current_view_context] ||= build_view_context end def self.current=(input) Thread.current[:current_view_context] = input end + + private + + def self.build_view_context + ApplicationController.new.view_context.tap do |context| + context.instance_eval do + def url_options + ActionMailer::Base.default_url_options + end + end unless context.request + if defined?(ActionController::TestRequest) + context.controller.request ||= ActionController::TestRequest.new + context.request ||= context.controller.request + context.params ||= {} + end + end + end end module ViewContextFilter def view_context - ApplicationController.new.view_context.tap do |context| - Draper::ViewContext.current = self.view_context + super.tap do |context| + Draper::ViewContext.current = context end end end