Module: RSpec::Rails::ControllerExampleGroup::ClassMethods Private
- Defined in:
- lib/rspec/rails/example/controller_example_group.rb
Overview
This module is part of a private API. You should avoid using this module if possible, as it may be removed or be changed in the future.
Class-level DSL for controller specs.
Instance Method Summary collapse
-
#controller(base_class = nil, &body) ⇒ Object
private
Supports a simple DSL for specifying behavior of ApplicationController.
-
#routes(&blk) ⇒ Object
private
Specifies the routeset that will be used for the example group.
Instance Method Details
#controller(base_class = nil, &body) ⇒ Object
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
Due to Ruby 1.8 scoping rules in anonymous subclasses, constants
defined in ApplicationController
must be fully qualified (e.g.
ApplicationController::AccessDenied
) in the block passed to the
controller
method. Any instance methods, filters, etc, that are
defined in ApplicationController
, however, are accessible from
within the block.
Supports a simple DSL for specifying behavior of ApplicationController.
Creates an anonymous subclass of ApplicationController and evals the
body
in that context. Also sets up implicit routes for this
controller, that are separate from those defined in "config/routes.rb".
If you would like to spec a subclass of ApplicationController, call controller like so:
controller(ApplicationControllerSubclass) do
# ....
end
55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 |
# File 'lib/rspec/rails/example/controller_example_group.rb', line 55 def controller(base_class = nil, &body) if RSpec.configuration.infer_base_class_for_anonymous_controllers? base_class ||= controller_class end base_class ||= defined?(ApplicationController) ? ApplicationController : ActionController::Base new_controller_class = Class.new(base_class) do def self.name root_controller = defined?(ApplicationController) ? ApplicationController : ActionController::Base if superclass == root_controller || superclass.abstract? "AnonymousController" else superclass.name end end end new_controller_class.class_exec(&body) (class << self; self; end).__send__(:define_method, :controller_class) { new_controller_class } before do @orig_routes = routes resource_name = if @controller.respond_to?(:controller_name) @controller.controller_name.to_sym else :anonymous end resource_path = if @controller.respond_to?(:controller_path) @controller.controller_path else resource_name.to_s end resource_module = resource_path.rpartition('/').first.presence resource_as = 'anonymous_' + resource_path.tr('/', '_') self.routes = ActionDispatch::Routing::RouteSet.new.tap do |r| r.draw do resources resource_name, :as => resource_as, :module => resource_module, :path => resource_path end end end after do self.routes = @orig_routes @orig_routes = nil end end |
#routes(&blk) ⇒ Object
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
Specifies the routeset that will be used for the example group. This is most useful when testing Rails engines.
113 114 115 116 117 |
# File 'lib/rspec/rails/example/controller_example_group.rb', line 113 def routes(&blk) before do self.routes = blk.call end end |