lib/rails_current.rb in rails_current-1.8.2 vs lib/rails_current.rb in rails_current-1.9.0

- old
+ new

@@ -1,10 +1,10 @@ # -*- encoding : utf-8 -*- module Current def Current.version - '1.8.2' + '1.9.0' end def Current.dependencies { 'map' => [ 'map' , ' >= 6.0.1' ] @@ -159,42 +159,55 @@ super end end def Current.mock_controller(options = {}) - require 'rails' - require 'action_controller' - require 'action_dispatch/testing/test_request.rb' - require 'action_dispatch/testing/test_response.rb' + ensure_rails_application do + require 'action_controller' + require 'action_dispatch/testing/test_request.rb' + require 'action_dispatch/testing/test_response.rb' - default_url_options = - begin - require 'rails_default_url_options' - DefaultUrlOptions - rescue LoadError - options[:default_url_options] || {} + store = ActiveSupport::Cache::MemoryStore.new + + controller = mock_controller_class.new + controller.perform_caching = true + controller.cache_store = store + + request = ActionDispatch::TestRequest.new + response = ActionDispatch::TestResponse.new + + controller.request = request + controller.response = response + + singleton_class = + class << controller + self + end + + singleton_class.module_eval do + define_method(:default_url_options) do + @default_url_options ||= ( + defined?(DefaultUrlOptions) ? DefaultUrlOptions.dup : {} + ) + end end - ensure_rails_application do - store = ActiveSupport::Cache::MemoryStore.new - controller = - begin - ApplicationController.new - rescue NameError - ActionController::Base.new - end - controller.perform_caching = true - controller.cache_store = store - request = ActionDispatch::TestRequest.new - response = ActionDispatch::TestResponse.new - controller.request = request - controller.response = response - #controller.send(:initialize_template_class, response) - #controller.send(:assign_shortcuts, request, response) - controller.send(:default_url_options).merge!(default_url_options) Current.proxy_for(controller) end end + + def Current.mock_controller_class + unless const_defined?(:Controller) + controller_class = + if defined?(::ApplicationController) + Class.new(::ApplicationController) + else + Class.new(::ActionController::Base) + end + const_set(:Controller, controller_class) + end + return const_get(:Controller) + end def Current.ensure_rails_application(&block) require 'rails' unless defined?(Rails) if Rails.application.nil? mock = Class.new(Rails::Application)