mirror of
https://github.com/rails/rails.git
synced 2022-11-09 12:12:34 -05:00
Revert "Allow loading external route files from the router"
This reverts commit 6acebb38bc
.
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:
parent
50b6110106
commit
5e7d6bba79
10 changed files with 6 additions and 149 deletions
|
@ -1316,22 +1316,6 @@ module ActionDispatch
|
|||
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 @@ module ActionDispatch
|
|||
|
||||
def initialize(set) #:nodoc:
|
||||
@set = set
|
||||
@draw_paths = set.draw_paths
|
||||
@scope = { :path_names => @set.resources_path_names }
|
||||
end
|
||||
|
||||
|
|
|
@ -237,7 +237,6 @@ module ActionDispatch
|
|||
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 @@ module ActionDispatch
|
|||
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 @@ require "active_support/core_ext/module/delegation"
|
|||
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 @@ module Rails
|
|||
|
||||
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 @@ module Rails
|
|||
# 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 @@ module Rails
|
|||
|
||||
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 @@ module Rails
|
|||
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 @@ module Rails
|
|||
class Path
|
||||
include Enumerable
|
||||
|
||||
attr_reader :path, :root
|
||||
attr_reader :path
|
||||
attr_accessor :glob
|
||||
|
||||
def initialize(root, current, paths, options = {})
|
||||
|
@ -180,14 +180,6 @@ module Rails
|
|||
@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 @@ module ApplicationTests
|
|||
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 @@ module ApplicationTests
|
|||
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 @@ class PathsTest < ActiveSupport::TestCase
|
|||
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 @@ class PathsTest < ActiveSupport::TestCase
|
|||
@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
|
||||
|
|
Loading…
Reference in a new issue