Revert "Allow loading external route files from the router"

This reverts commit 6acebb38bc0637bc05c19d87f8767f16ce79189b.

Usage of this feature did not reveal any improvement in existing apps.

Conflicts:

	actionpack/lib/action_dispatch/routing/mapper.rb
	guides/source/routing.textile
	railties/lib/rails/engine.rb
	railties/lib/rails/paths.rb
	railties/test/paths_test.rb
This commit is contained in:
José Valim 2012-06-29 17:39:50 +02:00
parent 50b6110106
commit 5e7d6bba79
10 changed files with 6 additions and 149 deletions

@ -1316,22 +1316,6 @@ def shallow?
parent_resource.instance_of?(Resource) && @scope[:shallow]
end
def draw(name)
path = @draw_paths.find do |_path|
File.exists? "#{_path}/#{name}.rb"
end
unless path
msg = "Your router tried to #draw the external file #{name}.rb,\n" \
"but the file was not found in:\n\n"
msg += @draw_paths.map { |_path| " * #{_path}" }.join("\n")
raise ArgumentError, msg
end
route_path = "#{path}/#{name}.rb"
instance_eval(File.read(route_path), route_path.to_s)
end
# match 'path' => 'controller#action'
# match 'path', to: 'controller#action'
# match 'path', 'otherpath', on: :member, via: :get
@ -1581,7 +1565,6 @@ def name_for_action(as, action) #:nodoc:
def initialize(set) #:nodoc:
@set = set
@draw_paths = set.draw_paths
@scope = { :path_names => @set.resources_path_names }
end

@ -237,7 +237,6 @@ def optimized_helper(route)
attr_accessor :formatter, :set, :named_routes, :default_scope, :router
attr_accessor :disable_clear_and_finalize, :resources_path_names
attr_accessor :default_url_options, :request_class, :valid_conditions
attr_accessor :draw_paths
alias :routes :set
@ -249,7 +248,6 @@ def initialize(request_class = ActionDispatch::Request)
self.named_routes = NamedRouteCollection.new
self.resources_path_names = self.class.default_resources_path_names.dup
self.default_url_options = {}
self.draw_paths = []
self.request_class = request_class
@valid_conditions = { :controller => true, :action => true }

@ -845,24 +845,6 @@ end
This will create routing helpers such as +magazine_periodical_ads_url+ and +edit_magazine_periodical_ad_path+.
h3. Breaking Up a Large Route File
If you have a large route file that you would like to break up into multiple files, you can use the +#draw+ method in your router:
<ruby>
draw :admin
</ruby>
Then, create a file called +config/routes/admin.rb+. Name the file the same as the symbol passed to the +draw+ method. You can then use the normal routing DSL inside that file:
<ruby>
# in config/routes/admin.rb
namespace :admin do
resources :posts
end
</ruby>
h3. Inspecting and Testing Routes
Rails offers facilities for inspecting and testing your routes.

@ -3,13 +3,12 @@
module Rails
class Application
class RoutesReloader
attr_reader :route_sets, :paths, :external_routes
attr_reader :route_sets, :paths
delegate :execute_if_updated, :execute, :updated?, :to => :updater
def initialize
@paths = []
@route_sets = []
@external_routes = []
@paths = []
@route_sets = []
end
def reload!
@ -24,11 +23,7 @@ def reload!
def updater
@updater ||= begin
dirs = @external_routes.each_with_object({}) do |dir, hash|
hash[dir.to_s] = %w(rb)
end
updater = ActiveSupport::FileUpdateChecker.new(paths, dirs) { reload! }
updater = ActiveSupport::FileUpdateChecker.new(paths) { reload! }
updater.execute
updater
end

@ -508,10 +508,7 @@ def env_config
# Defines the routes for this engine. If a block is given to
# routes, it is appended to the engine.
def routes
@routes ||= ActionDispatch::Routing::RouteSet.new.tap do |routes|
routes.draw_paths.concat paths["config/routes"].paths
end
@routes ||= ActionDispatch::Routing::RouteSet.new
@routes.append(&Proc.new) if block_given?
@routes
end
@ -555,12 +552,10 @@ def load_seed
initializer :add_routing_paths do |app|
paths = self.paths["config/routes.rb"].existent
external_paths = self.paths["config/routes"].paths
if routes? || paths.any?
app.routes_reloader.paths.unshift(*paths)
app.routes_reloader.route_sets << routes
app.routes_reloader.external_routes.unshift(*external_paths)
end
end

@ -53,7 +53,6 @@ def paths
paths.add "config/initializers", :glob => "**/*.rb"
paths.add "config/locales", :glob => "*.{rb,yml}"
paths.add "config/routes.rb"
paths.add "config/routes", :glob => "**/*.rb"
paths.add "db"
paths.add "db/migrate"
paths.add "db/seeds.rb"

@ -114,7 +114,7 @@ def filter_by(constraint)
class Path
include Enumerable
attr_reader :path, :root
attr_reader :path
attr_accessor :glob
def initialize(root, current, paths, options = {})
@ -180,14 +180,6 @@ def to_ary
@paths
end
def paths
raise "You need to set a path root" unless @root.path
map do |p|
File.join @root.path, p
end
end
# Expands all paths against the root and return all unique values.
def expanded
raise "You need to set a path root" unless @root.path

@ -50,8 +50,6 @@ def assert_not_in_load_path(*path)
assert_path @paths["config/locales"], "config/locales/en.yml"
assert_path @paths["config/environment"], "config/environment.rb"
assert_path @paths["config/environments"], "config/environments/development.rb"
assert_path @paths["config/routes.rb"], "config/routes.rb"
assert_path @paths["config/routes"], "config/routes"
assert_equal root("app", "controllers"), @paths["app/controllers"].expanded.first
end

@ -178,90 +178,7 @@ def index
assert_equal 'WIN', last_response.body
end
test "routes drawing from config/routes" do
app_file 'config/routes.rb', <<-RUBY
AppTemplate::Application.routes.draw do
draw :external
end
RUBY
app_file 'config/routes/external.rb', <<-RUBY
get ':controller/:action'
RUBY
controller :success, <<-RUBY
class SuccessController < ActionController::Base
def index
render :text => "success!"
end
end
RUBY
app 'development'
get '/success/index'
assert_equal 'success!', last_response.body
end
{"development" => "baz", "production" => "bar"}.each do |mode, expected|
test "reloads routes when external configuration is changed in #{mode}" do
controller :foo, <<-RUBY
class FooController < ApplicationController
def bar
render :text => "bar"
end
def baz
render :text => "baz"
end
end
RUBY
app_file 'config/routes.rb', <<-RUBY
AppTemplate::Application.routes.draw do
draw :external
end
RUBY
app_file 'config/routes/external.rb', <<-RUBY
get 'foo', :to => 'foo#bar'
RUBY
app(mode)
get '/foo'
assert_equal 'bar', last_response.body
app_file 'config/routes/external.rb', <<-RUBY
get 'foo', :to => 'foo#baz'
RUBY
sleep 0.1
get '/foo'
assert_equal expected, last_response.body
app_file 'config/routes.rb', <<-RUBY
AppTemplate::Application.routes.draw do
draw :external
draw :other_external
end
RUBY
app_file 'config/routes/other_external.rb', <<-RUBY
get 'win', :to => 'foo#baz'
RUBY
sleep 0.1
get '/win'
if mode == "development"
assert_equal expected, last_response.body
else
assert_equal 404, last_response.status
end
end
test "reloads routes when configuration is changed in #{mode}" do
controller :foo, <<-RUBY
class FooController < ApplicationController

@ -29,7 +29,6 @@ def setup
test "creating a root level path" do
@root.add "app"
assert_equal ["/foo/bar/app"], @root["app"].to_a
assert_equal ["/foo/bar/app"], @root["app"].paths
end
test "creating a root level path with options" do
@ -192,7 +191,6 @@ def setup
@root["app"] = "/app"
@root["app"].glob = "*.rb"
assert_equal "*.rb", @root["app"].glob
assert_equal ["/foo/bar/app"], @root["app"].paths
end
test "it should be possible to override a path's default glob without assignment" do