aboutsummaryrefslogtreecommitdiffstats
path: root/actionpack/lib/action_dispatch/routing/route_set.rb
Commit message (Collapse)AuthorAgeFilesLines
* sort_by instead of sortYang Bo2015-04-081-1/+1
| | | | | | it is avoid sort errot within different and mixed keys. used `sort_by` + `block` to list parameter by keys. keep minimum changes
* pass a config to the route setAaron Patterson2015-03-051-3/+19
| | | | | This way we can get the relative_url_root from the application without setting another global value
* Drop request class from RouteSet constructor.Aaron Patterson2015-03-041-4/+7
| | | | | If you would like to use a custom request class, please subclass and implemet the `request_class` method.
* Merge pull request #18775 from yasyf/issue_5122Rafael Mendonça França2015-03-031-1/+3
|\ | | | | | | Fallback to RAILS_RELATIVE_URL_ROOT in `url_for`
| * Fallback to RAILS_RELATIVE_URL_ROOT in `url_for`.Yasyf Mohamedali2015-02-241-1/+3
| | | | | | | | | | | | Fixed an issue where the `RAILS_RELATIVE_URL_ROOT` environment variable is not prepended to the path when `url_for` is called. If `SCRIPT_NAME` (used by Rack) is set, it takes precedence.
* | be optimistic about missing route keysAaron Patterson2015-03-021-13/+15
| | | | | | | | | | | | | | this patch makes errors slightly more expensive when someone is missing a route key, but in exchange it drops 4 allocations per `url_for` call. Since missing a route key is an error, optimizing for the non-error path seems like a good trade off
* | use arg size for parallel iterationAaron Patterson2015-03-021-1/+1
| | | | | | | | | | we already know the length of the args, so we can use that length for parallel iteration and cut down on allocations for `url_for` calls.
* | ask the routes objects for its Rack env keyAaron Patterson2015-03-021-0/+2
|/ | | | | | this centralizes the logic for determining the script name key and drops object allocations when calling `engine_script_name` (which is called on each `url_for`).
* Cache url_helpers instead of creating each timeEvan Phoenix2015-02-191-1/+3
| | | | | | | | | This has 2 effects: 1. RoutesProxy is CRAZY faster because it's no longer creating a new Module each time method_missing is hit. 2. It bypasses an existing bug in ruby that makes `class << obj` unsafe to be used in threading contexts.
* Skip url_helpers instead of caching, speed up integration testseileencodes2015-02-121-8/+0
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | We shouldn't cache if it's not absolutely necessary. Removes route caching and instead skips using the `url_helpers` is the integration test session doesn't require it. Benchmark ips on integration and controller index method tests below. Without any caching or changes to `#url_helpers`: ``` Calculating ------------------------------------- INDEX: Integration Test 71.000 i/100ms INDEX: Functional Test 99.000 i/100ms ------------------------------------------------- INDEX: Integration Test 728.878 (± 8.0%) i/s - 3.692k INDEX: Functional Test 1.015k (± 6.7%) i/s - 5.148k Comparison: INDEX: Functional Test: 1015.4 i/s INDEX: Integration Test: 728.9 i/s - 1.39x slower ``` With caching on `#url_helpers`: ``` Calculating ------------------------------------- INDEX: Integration Test 74.000 i/100ms INDEX: Functional Test 99.000 i/100ms ------------------------------------------------- INDEX: Integration Test 752.377 (± 6.9%) i/s - 3.774k INDEX: Functional Test 1.021k (± 6.7%) i/s - 5.148k Comparison: INDEX: Functional Test: 1021.1 i/s INDEX: Integration Test: 752.4 i/s - 1.36x slower ``` Afer removing the caching and bypassing the `url_helpers` when not necessary in the session: ``` Calculating ------------------------------------- INDEX: Integration Test 87.000 i/100ms INDEX: Functional Test 97.000 i/100ms ------------------------------------------------- INDEX: Integration Test 828.433 (± 6.4%) i/s - 4.176k INDEX: Functional Test 926.763 (± 7.2%) i/s - 4.656k Comparison: INDEX: Functional Test: 926.8 i/s INDEX: Integration Test: 828.4 i/s - 1.12x slower ```
* `RouteSet` should not be listed in the public API [ci skip]Sean Griffin2015-02-031-10/+10
| | | | | The use of `# :startdoc:` inside of the class was overriding the outer-most `# :nodoc:`, causing it to be listed in the documented API.
* Cache `url_helpers` separately for mailersAndrew White2015-02-011-44/+50
| | | | | The commit 3b63780 re-introduced url helper caching but we need to cache a separate module for Action Mailer without paths.
* Cache `url_helpers`eileencodes2015-02-011-42/+44
| | | | | | `url_helpers` used to be memoized. This was lost in a refactoring and this PR adds it back. We noticed this while investigating why integration tests are slower than controller tests.
* Preserve default url options when generating URLsTekin Suleyman2015-01-281-3/+4
| | | | | Fixes an issue that would cause default_url_options to be lost when generating URLs with fewer positional arguments than parameters in the route definition.
* improve performance of integration tests.Aaron Patterson2015-01-271-1/+8
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | I found delegate to be a bottleneck during integration tests. Here is the test case: ```ruby require 'test_helper' class DocumentsIntegrationTest < ActionDispatch::IntegrationTest test "index" do get '/documents' assert_equal 200, response.status end end Minitest.run_one_method(DocumentsIntegrationTest, 'test_index') StackProf.run(mode: :wall, out: 'stackprof.dump') do 3000.times do Minitest.run_one_method(DocumentsIntegrationTest, 'test_index') end end ``` Top of the stack: ``` [aaron@TC integration_performance_test (master)]$ stackprof stackprof.dump ================================== Mode: wall(1000) Samples: 23694 (7.26% miss rate) GC: 1584 (6.69%) ================================== TOTAL (pct) SAMPLES (pct) FRAME 7058 (29.8%) 6178 (26.1%) block in Module#delegate 680 (2.9%) 680 (2.9%) ActiveSupport::PerThreadRegistry#instance 405 (1.7%) 405 (1.7%) ThreadSafe::NonConcurrentCacheBackend#[] 383 (1.6%) 383 (1.6%) Set#include? 317 (1.3%) 317 (1.3%) ActiveRecord::Base.logger 281 (1.2%) 281 (1.2%) Rack::Utils::HeaderHash#[]= 269 (1.1%) 269 (1.1%) ActiveSupport::Notifications::Fanout::Subscribers::Evented#subscribed_to? 262 (1.1%) 262 (1.1%) block (4 levels) in Class#class_attribute 384 (1.6%) 246 (1.0%) block (2 levels) in Class#class_attribute ``` According to @eileencodes's tests, this speeds up integration tests so that they are only 1.4x slower than functional tests: Before: INDEX: Integration Test: 153.2 i/s - 2.43x slower After: INDEX: Integration Test: 275.1 i/s - 1.41x slower
* Remove unneeded requiresRafael Mendonça França2015-01-041-1/+0
| | | | These requires were added only to change deprecation message
* Remove deprecated usage of string keys in URL helpersRafael Mendonça França2015-01-041-17/+1
|
* Remove deprecated `only_path` option on `*_path` helpersRafael Mendonça França2015-01-041-28/+1
|
* Remove deprecate `*_path` helpers in email viewsRafael Mendonça França2015-01-041-25/+4
|
* Remove deprecated `NamedRouteCollection#helpers`Rafael Mendonça França2015-01-041-8/+0
|
* allow URL helpers to work with optional scopesAlex Robbin2014-12-131-1/+1
|
* Fix handling of positional url helper arguments when format is falseTatiana Soukiassian2014-12-131-2/+8
| | | | | | | There is no need to subtract one from the path_params size when there is no format parameter because it is not present in the path_params array. Fixes #17819.
* Merge pull request #17862 from lucasmazza/lm-hide-actionRafael Mendonça França2014-12-021-0/+2
| | | | `_generate_paths_by_default` should always be private.
* Pass symbol as an argument instead of a blockErik Michaels-Ober2014-11-291-2/+2
|
* sets script_name to always be a string.JONBRWN2014-11-251-1/+1
| | | | | | | | | | | Closes #17615 #17616 when script_name is nil in the options hash, script_name is set to nil. options = {script_name: nil} script_name = options.delete(:script_name) {‘’} # => nil Signed-off-by: Santiago Pastorino <santiago@wyeworks.com>
* Merge branch 'deprecate-string-options-in-url-helpers'Sean Griffin2014-11-241-1/+17
|\
| * Deprecate string options in URL helpersMelanie Gilman2014-11-241-1/+17
| | | | | | | | | | | | Fixes https://github.com/rails/rails/issues/16958 [Byron Bischoff & Melanie Gilman]
* | let mailer templates generate URLs by default [Xavier Noria, Richard Schneeman]Xavier Noria2014-11-241-2/+6
|/
* edit pass over all warningsXavier Noria2014-10-281-1/+4
| | | | | | | | | | | | | | | This patch uniformizes warning messages. I used the most common style already present in the code base: * Capitalize the first word. * End the message with a full stop. * "Rails 5" instead of "Rails 5.0". * Backticks for method names and inline code. Also, converted a few long strings into the new heredoc convention.
* let's warn with heredocsXavier Noria2014-10-281-11/+14
| | | | | | | | | | | | The current style for warning messages without newlines uses concatenation of string literals with manual trailing spaces where needed. Heredocs have better readability, and with `squish` we can still produce a single line. This is a similar use case to the one that motivated defining `strip_heredoc`, heredocs are super clean.
* Typos in the deprecation messageGodfrey Chan2014-10-281-2/+2
|
* Deprecate the `only_path` option on `*_path` helpers.Godfrey Chan2014-10-281-2/+26
| | | | | | | | | | | | In cases where this option is set to `true`, the option is redundant and can be safely removed; otherwise, the corresponding `*_url` helper should be used instead. Fixes #17294. See also #17363. [Dan Olson, Godfrey Chan]
* Revert "Merge pull request #16966 from why-el/symbolize-path-params"Rafael Mendonça França2014-09-251-1/+0
| | | | | | | | This reverts commit 9d05d6de52871e57bfbf54a60de005e8a5f5b0e4, reversing changes made to 0863c9248fd47a15e88e05ce4fcd80966684c0e3. The change in the behaviour reported at #16958 doesn't exist since 4.0 and 4.1 works in the same way
* Ensure named path params are symbols (Fixes #16958)Mohamed Wael Khobalatte2014-09-251-0/+1
|
* Deprecate NamedRouteCollection#helpers.Lucas Mazza2014-08-171-0/+5
| | | | | | This method was removed at 210b338db20b1cdd0684f40bd78b52ed16148b99 but it is used by third party gems to check if a named route was defined. To help on the upgrade path on 4.2.0 we bring it back and emit a deprecation warning.
* avoid testing only_pathAaron Patterson2014-08-041-0/+4
| | | | | we know that this call only wants the path returned, so lets call a method that returns the path.
* always return a string from find_script_nameAaron Patterson2014-08-011-2/+2
| | | | this allows us to avoid nil checks on the return value
* do a hash lookup for collision detectionAaron Patterson2014-07-311-0/+4
| | | | hash lookup should be faster than searching an array.
* remove useless deupAaron Patterson2014-07-301-1/+1
| | | | | every call to default_resources_path_names allocates a new hash, no need to dup
* remove alias_method_chainAaron Patterson2014-07-301-4/+2
| | | | we can `super` in to the previous implementation.
* avoid instrospection on the moduleAaron Patterson2014-07-301-1/+2
| | | | | we already know what helpers are path helpers, so just iterate through that list and define the helpers with warnings
* fix variable nameAaron Patterson2014-07-301-3/+3
|
* split path_helpers and url_helpersAaron Patterson2014-07-301-18/+25
| | | | | this lets us avoid hard coding a regexp for separating path and url helpers in the clear! method.
* `add` will remove the method if it exists alreadyAaron Patterson2014-07-301-1/+0
|
* Deprecate `*_path` methods in mailers@schneems and @sgrif2014-07-301-48/+72
| | | | | | | | | | | Email does not support relative links since there is no implicit host. Therefore all links inside of emails must be fully qualified URLs. All path helpers are now deprecated. When removed, the error will give early indication to developers to use `*_url` methods instead. Currently if a developer uses a `*_path` helper, their tests and `mail_view` will not catch the mistake. The only way to see the error is by sending emails in production. Preventing sending out emails with non-working path's is the desired end goal of this PR. Currently path helpers are mixed-in to controllers (the ActionMailer::Base acts as a controller). All `*_url` and `*_path` helpers are made available through the same module. This PR separates this behavior into two modules so we can extend the `*_path` methods to add a Deprecation to them. Once deprecated we can use this same area to raise a NoMethodError and add an informative message directing the developer to use `*_url` instead. The module with warnings is only mixed in when a controller returns false from the newly added `supports_relative_path?`. Paired @sgrif & @schneems
* oops! :bomb:Aaron Patterson2014-07-291-1/+1
| | | | use helpers.include? so we don't get any false positives
* ask the named routes collection if the route is definedAaron Patterson2014-07-291-0/+4
| | | | | we should not be accessing internals to figure out if a method is defined.
* helpers should be a Set so it doesn't grow unboundedAaron Patterson2014-07-291-4/+12
| | | | | since helpers is a set, we can be confident about when to remove methods from the module.
* pass the module to define_named_route_methodsAaron Patterson2014-07-291-7/+7
| | | | after this, we can disconnect @module from the instance
* only ask for the routes module onceAaron Patterson2014-07-291-2/+4
| | | | we can cache the module on the stack, then reuse it