aboutsummaryrefslogtreecommitdiffstats
path: root/actionpack/lib/action_dispatch/journey
Commit message (Collapse)AuthorAgeFilesLines
* fix escaping in generationAaron Patterson2014-05-191-1/+7
|
* Revert "Rewrite journey routes formatter for performance"Aaron Patterson2014-05-191-28/+23
| | | | | | | | | | This reverts commit 5c224de9e110763ec7a0f01f5b604bcf81f40bfb. Conflicts: actionpack/lib/action_dispatch/journey/visitors.rb 5c224de9e110763ec7a0f01f5b604bcf81f40bfb introduced a bug in the formatter. This commit includes a regression test.
* Make URL escaping more consistentAndrew White2014-04-203-4/+30
| | | | | | | | | | | | | | | | | | | | | | 1. Escape '%' characters in URLs - only unescaped data should be passed to URL helpers 2. Add an `escape_segment` helper to `Router::Utils` that escapes '/' characters 3. Use `escape_segment` rather than `escape_fragment` in optimized URL generation 4. Use `escape_segment` rather than `escape_path` in URL generation For point 4 there are two exceptions. Firstly, when a route uses wildcard segments (e.g. *foo) then we use `escape_path` as the value may contain '/' characters. This means that wildcard routes can't be optimized. Secondly, if a `:controller` segment is used in the path then this uses `escape_path` as the controller may be namespaced. Fixes #14629, #14636 and #14070.
* Optimize URI escapingAndrew White2014-04-201-17/+42
| | | | | | | | | | | | | The URI::Parser#escape method is a general use method that has to deal with a variety of input however our use of it is limited in scope so we can increase the performance by implementing our specific needs within ActionDispatch::Journey::Router::Utils directly. If there is no encoding required then there is no change in performance or number of objects allocated, but for each character that needs to be encoded we save five object allocations and gain a performance boost. The performance boost seen varies from 20% when there is one character to over 50% when encoding ten characters.
* Always escape string passed to url helper.edogawaconan2014-04-201-1/+1
| | | | | | | | | | Makes it clear that anything passed with the helper must not be percent encoded. Fixes previous behavior which tricks people into believing passing non-percent-encoded will generate a proper percent-encoded path while in reality it doesn't ('%' isn't escaped). The intention is nice but the heuristic is broken.
* push move_string in to `move`Aaron Patterson2014-04-011-14/+12
|
* combine move_regexp and move_string so we only loop over states onceAaron Patterson2014-04-011-9/+6
|
* do not create memo objects since we'll just throw them awayAaron Patterson2014-04-012-9/+11
|
* only ask if `t` is empty once.Aaron Patterson2014-04-011-4/+1
|
* Replace map.flatten with flat_map in actionpackErik Michaels-Ober2014-03-037-18/+18
|
* Replace map.flatten(1) with flat_mapErik Michaels-Ober2014-02-282-5/+5
|
* Revert "Don't remove trailing slash from PATH_INFO for mounted apps"Piotr Sarnacki2014-01-161-7/+1
| | | | | | | The revert is needed because of a regression described in #13369, routes with trailing slash are no longer recognized properly. This reverts commit 50311f1391ddd8e0349d74eb57f04b7e0045a27d.
* Show full route constraints in error messageAndrew White2014-01-051-2/+2
| | | | | | | | When an optimized helper fails to generate, show the full route constraints in the error message. Previously it would only show the contraints that were required as part of the path. Fixes #13592
* Use a custom route vistor for optimized route generationAndrew White2014-01-051-4/+24
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Using a Regexp to replace dynamic segments in a path string is fraught with difficulty and can lead to odd edge cases like #13349. Since we already have a parsed representation of the path it makes sense to use that to generate an array of segments that can be used to build an optimized route's path quickly. Tests on a simple route (e.g. /posts/:id) show a speedup of 35%: https://gist.github.com/pixeltrix/8261932 Calculating ------------------------------------- Current Helper: 5274 i/100ms New Helper: 8050 i/100ms ------------------------------------------------- Current Helper: 79263.6 (±3.7%) i/s - 395550 in 4.997252s New Helper: 153464.5 (±4.9%) i/s - 772800 in 5.047834s Tests on a more complex route show even an greater performance boost: https://gist.github.com/pixeltrix/8261957 Calculating ------------------------------------- Current Helper: 2367 i/100ms New Helper: 5382 i/100ms ------------------------------------------------- Current Helper: 29506.0 (±3.2%) i/s - 149121 in 5.059294s New Helper: 78815.5 (±4.1%) i/s - 398268 in 5.062161s It also has the added benefit of fixing the edge cases described above. Fixes #13349
* Spelling and Grammar checksAkshay Vishnoi2013-12-121-1/+1
|
* Revert "Merge pull request #12990 from vipulnsward/remove_visualizer_param"Rafael Mendonça França2013-11-211-1/+1
| | | | | | | | | | | This reverts commit 5a19346d2855ecb1c791cdef3af92589566d00db, reversing changes made to d82588ee4756b03025813b3997f4db171ee0fcdc. This argument is being used in the view https://github.com/rails/rails/blob/5a19346d2855ecb1c791cdef3af92589566d00db/actionpack/lib/action_dispatch/journey/visualizer/index.html.erb#L4 It is being set using the binding https://github.com/rails/rails/blob/5a19346d2855ecb1c791cdef3af92589566d00db/actionpack/lib/action_dispatch/journey/gtg/transition_table.rb#L108
* Remove unused param `title`to `TransitionTable#visualizer`Vipul A M2013-11-221-1/+1
|
* Eliminate `JSON.{parse,load,generate,dump}` and `def to_json`Godfrey Chan2013-11-051-5/+3
| | | | | | | | | | | | | | | JSON.{dump,generate} offered by the JSON gem is not compatiable with Rails at the moment and can cause a lot of subtle bugs when passed certain data structures. This changed all direct usage of the JSON gem in internal Rails code to always go through AS::JSON.{decode,encode}. We also shouldn't be implementing `to_json` most of the time, and these occurances are replaced with an equivilent `as_json` implementation to avoid problems down the road. See [1] for all the juicy details. [1]: intridea/multi_json#138 (comment)
* Correct error in Utils.normalize_path that changed paths improperlyJosh Symonds2013-10-231-1/+1
|
* Make GTG::TransTable thread safe.thedarkone2013-09-281-12/+23
| | | | From now on only the `[]=` method is allowed to modify the internal states hashes.
* Replace global Hash with TS::Cache.thedarkone2013-09-281-1/+4
|
* No need the else clauseRafael Mendonça França2013-09-241-2/+0
|
* Use join to concat the both side of the ASTRafael Mendonça França2013-09-241-1/+2
| | | | Onf of the sides can be nil and it will raise a Conversion error
* Merge pull request #9155 from bogdan/route-formatterAndrew White2013-09-221-23/+23
|\ | | | | Rewrite Journey::Visitors::Formatter for performance
| * Rewrite journey routes formatter for performanceBogdan Gusiev2013-08-281-23/+23
| |
* | [ci skip] Add some comment about downcase url encoded string.kennyj2013-09-221-0/+2
| |
* | Remove 1.8 compatible codekennyj2013-09-191-1/+1
| |
* | Fix an issue where router can't recognize downcased url encoding path.kennyj2013-09-191-0/+1
|/
* Clear named routes when routes.rb is reloadedAndrew White2013-07-211-0/+1
| | | | | | | | Fix an issue where Journey was failing to clear the named routes hash when the routes were reloaded and since it doesn't overwrite existing routes then if a route changed but wasn't renamed it kept the old definition. This was being masked by the optimised url helpers so it only became apparent when passing an options hash to the url helper.
* Skip Rack applications and redirects when generating urlsAndrew White2013-07-162-1/+17
| | | | | | | | | | When generating an unnamed url (i.e. using `url_for` with an options hash) we should skip anything other than standard Rails routes otherwise it will match the first mounted application or redirect and generate a url with query parameters rather than raising an error if the options hash doesn't match any defined routes. Fixes #8018
* store a symbol directly inside DISPATCH_CACHE for extra roflscaleCharlie Somerville2013-06-301-1/+1
|
* Don't remove trailing slash from PATH_INFO for mounted appsPiotr Sarnacki2013-06-211-1/+7
| | | | | | | | | | | | | | | | | | | | | | | | | Previously when app was mounted as following: class Foo def call(env) [200, {}, [env['PATH_INFO']]] end end RackMountRailsBug::Application.routes.draw do mount RackTest.new => "/foo" end trailing slash was removed from PATH_INFO. For example requesting GET /foo/bar/ on routes defined above would result in a response containing "/foo/bar" instead of "/foo/bar/". This commit fixes the issue. (closes #3215)
* rails -> Rails [ci skip]Prathamesh Sonpatki2013-05-091-1/+1
|
* add missing semicolon to journey parser.yBen Holley2013-04-301-0/+1
|
* Passing subdomain: '' to url_for removes the subdomain (instead of adding a ↵Derek Watson2013-04-181-0/+4
| | | | | | leading .) Adding a boolean route constraint checks for presence/absence of request property
* make [] method in router more readablebuddhamagnet2013-04-151-1/+3
|
* Mark unused variables and make some style fixesAgis Anastasopoulos2013-04-081-1/+1
| | | | It'd be a nice convention to mark the unused variables like this, now that Ruby 2 will issue no warnings for such vars being unused.
* Use custom visitor class for optimized url helpersAndrew White2013-03-032-0/+12
| | | | | | | | Rather than trying to use gsub to remove the optional route segments, which will fail with nested optional segments, use a custom visitor class that returns a empty string for group nodes. Closes #9524
* Make ActionDispatch::Journey::Path::Pattern#new raise more meaningful ↵zires2013-02-271-1/+1
| | | | exception message.
* Change the behavior of route defaultsAndrew White2013-01-151-4/+7
| | | | | | | | | | | | | | | | | | | This commit changes route defaults so that explicit defaults are no longer required where the key is not part of the path. For example: resources :posts, bucket_type: 'posts' will be required whenever constructing the url from a hash such as a functional test or using url_for directly. However using the explicit form alters the behavior so it's not required: resources :projects, defaults: { bucket_type: 'projects' } This changes existing behavior slightly in that any routes which only differ in their defaults will match the first route rather than the closest match. Closes #8814
* Add support for other types of routing constraintsAndrew White2013-01-152-10/+25
| | | | | | | | | | | | | | This now allows the use of arrays like this: get '/foo/:action', to: 'foo', constraints: { subdomain: %w[www admin] } or constraints where the request method returns an Fixnum like this: get '/foo', to: 'foo#index', constraints: { port: 8080 } Note that this only applies to constraints on the request - path constraints still need to be specified as Regexps as the various constraints are compiled into a single Regexp.
* Raise correct exception now Journey is integrated.Andrew White2013-01-151-1/+6
| | | | | | | Now that Journey has been integrated into ActionDispatch we can raise the exception ActionController::UrlGenerationError directly rather than raising the internal Journey::Router::RoutingError and then have ActionDispatch::Routing::RouteSet#generate re-raise the exception.
* access `@path` and `@routes` via reader methods in journeyGosha Arinich2013-01-072-3/+3
|
* refactor Journey::RoutesGosha Arinich2013-01-071-12/+11
| | | | | * prefer do-end for multiline blocks * prefer or-equals over returns with checks
* Refactor to not call path.ast twiceCarlos Antonio da Silva2013-01-061-2/+3
|
* refactor Route#ast to use or-equals and block, instead of return with a condGosha Arinich2013-01-061-5/+4
|
* remove another unnecessary dupGosha Arinich2013-01-021-5/+3
|
* remove unnecessary #dupGosha Arinich2013-01-021-2/+1
|
* Fix indentation issuing warningCarlos Antonio da Silva2012-12-201-1/+1
|
* update AD::Journey to follow Rails coding conventionsFrancesco Rodriguez2012-12-2016-437/+439
|