aboutsummaryrefslogtreecommitdiffstats
path: root/actionpack/lib/action_dispatch/journey/visitors.rb
Commit message (Collapse)AuthorAgeFilesLines
* Make URL escaping more consistentAndrew White2014-04-201-4/+17
| | | | | | | | | | | | | | | | | | | | | | 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.
* 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
* 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
* Rewrite journey routes formatter for performanceBogdan Gusiev2013-08-281-23/+23
|
* store a symbol directly inside DISPATCH_CACHE for extra roflscaleCharlie Somerville2013-06-301-1/+1
|
* Use custom visitor class for optimized url helpersAndrew White2013-03-031-0/+8
| | | | | | | | 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
* update AD::Journey to follow Rails coding conventionsFrancesco Rodriguez2012-12-201-92/+95
|
* :nodoc: Journey because is not part of the public API [ci skip]Francesco Rodriguez2012-12-191-7/+5
|
* Integrate Journey into Action DispatchAndrew White2012-12-191-0/+188
Move the Journey code underneath the ActionDispatch namespace so that we don't pollute the global namespace with names that may be used for models. Fixes rails/journey#49.