aboutsummaryrefslogtreecommitdiffstats
path: root/actionview/lib
Commit message (Collapse)AuthorAgeFilesLines
* Merge pull request #35959 from jhawthorn/unbound_templatesRafael França2019-04-154-14/+67
|\ | | | | De-duplicate templates, introduce UnboundTemplate
| * Avoid duplication using _find_allJohn Hawthorn2019-04-121-11/+7
| |
| * Support disabling cache for DigestorJohn Hawthorn2019-04-122-22/+37
| | | | | | | | | | | | This adds a bit of complexity, but is necessary for now to avoid holding extra copies of templates which are resolved from ActionView::Digestor after disabling cache on the lookup context.
| * De-dup Templates, introduce UnboundTemplateJohn Hawthorn2019-04-123-10/+52
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Previously it's possible to have multiple copies of the "same" Template. For example, if index.html.erb is found both the :en and :fr locale, it will return a different Template object for each. The same can happen with formats, variants, and handlers. This commit de-duplicates templates, there will now only be one template per file/virtual_path/locals tuple. We need to consider virtual_path because both `render "index"`, and `render "index.html"` can both find the same file but will have different virtual_paths. IMO this is rare and should be deprecated/removed, but it exists now so we need to consider it in order to cache correctly. This commit introduces a new UnboundTemplate class, which represents a template with unknown locals. Template objects can be built from it by using `#with_locals`. Currently, this is just a convenience around caching templates, but I hope it's a helpful concept that could have more utility in the future.
* | Squash `warning: instance variable @filename not initialized`utilum2019-04-121-1/+1
|/
* Remove FileTemplateJohn Hawthorn2019-04-043-14/+3
| | | | This is unnecessary now that we can just provide a file source
* Deprecate Template#refreshJohn Hawthorn2019-04-041-19/+1
|
* Add ActionView::Template::Sources::FileJohn Hawthorn2019-04-044-24/+38
|
* Don't call Template#refreshJohn Hawthorn2019-04-041-6/+1
| | | | | Now that Template#source will always return a source, this is unnecessary.
* Don't discard source after renderingJohn Hawthorn2019-04-041-3/+0
| | | | | | | | | | Previously, we would discard the template source after rendering, if we had a virtual path, in hopes that the virtual path would let us find our same template again going through the Resolver. Previously we discarded the source as an optimization, to avoid keeping it around in memory. By instead just reading the file every time source is called, as FileTemplate does, this is unnecessary.
* Fix arity warning for template handlerslocalhostdotdev2019-04-041-3/+3
| | | | | | | | | | | | | | | | | | | | | | | Mainly to help with knowning which template is reponsible for the warning. handler.class # => Class handler.to_s # => Coffee::Rails::TemplateHandler Before: Change: >> Class#call(template) To: >> Class#call(template, source) After: Change: >> Coffee::Rails::TemplateHandler.call(template) To: >> Coffee::Rails::TemplateHandler.call(template, source)
* Merge pull request #35145 from st0012/fix-35114Rafael França2019-04-031-13/+20
|\ | | | | Fix partial caching ignore repeated items issue
| * Fix partial caching ignore repeated items issuest00122019-04-041-13/+20
| | | | | | | | | | | | This is because we only use hash to maintain the result. So when the key are the same, the result would be skipped. The solution is to maintain an array for tracking every item's position to restructure the result.
* | Fix checking for template variants when using the ActionView::FixtureResolverEdward Rudd2019-04-031-2/+2
| |
* | Merge pull request #35825 from jhawthorn/always_filter_view_pathsEileen M. Uchitelle2019-04-035-30/+25
|\ \ | |/ |/| Make Resolver#find_all_anywhere equivalent to #find_all
| * Always reject files external to appJohn Hawthorn2019-04-035-30/+25
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Previously, when using `render file:`, it was possible to render files not only at an absolute path or relative to the current directory, but relative to ANY view paths. This was probably done for absolutely maximum compatibility when addressing CVE-2016-0752, but I think is unlikely to be used in practice. Tihs commit removes the ability to `render file:` with a path relative to a non-fallback view path. Make FallbackResolver.new private To ensure nobody is making FallbackResolvers other than "/" and "". Make reject_files_external_... no-op for fallbacks Because there are only two values used for path: "" and "/", and File.join("", "") == File.join("/", "") == "/", this method was only testing that the absolute paths started at "/" (which of course all do). This commit doesn't change any behaviour, but it makes it explicit that the FallbackFileSystemResolver works this way. Remove outside_app_allowed argument Deprecate find_all_anywhere This is now equivalent to find_all Remove outside_app argument Deprecate find_file for find Both LookupContext#find_file and PathSet#find_file are now equivalent to their respective #find methods.
* | [ci skip] Updated the doc after renaming Template::File -> Template::RawFile ↵Abhay Nikam2019-04-021-1/+1
| | | | | | | | in #35826
* | Rename File to RawFileCliff Pruitt2019-04-015-5/+5
|/
* Only clear template caches in dev after changes (#35629)John Hawthorn2019-04-015-7/+53
|
* url -> URL where apt except inside actionpack/Sharang Dashputre2019-04-012-2/+2
|
* Merge pull request #35793 from jhawthorn/deprecate_layout_absolute_pathKasper Timm Hansen2019-03-311-0/+1
|\ | | | | Deprecate render layout with an absolute path
| * Deprecate render layout with an absolute pathJohn Hawthorn2019-03-291-0/+1
| | | | | | | | | | | | | | This has similar problems to render file:. I've never seen this used, and believe it's a relic from when all templates could be rendered from an absolute path.
* | Merge pull request #35688 from jhawthorn/render_file_rfcAaron Patterson2019-03-305-4/+38
|\ \ | |/ |/| RFC: Introduce Template::File
| * Introduce Template::File as new render file:John Hawthorn2019-03-275-4/+38
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | The previous behaviour of render file: was essentially the same as render template:, except that templates can be specified as an absolute path on the filesystem. This makes sense for historic reasons, but now render file: is almost exclusively used to render raw files (not .erb) like public/404.html. In addition to complicating the code in template/resolver.rb, I think the current behaviour is surprising to developers. This commit deprecates the existing "lookup a template from anywhere" behaviour and replaces it with "render this file exactly as it is on disk". Handlers will no longer be used (it will render the same as if the :raw handler was used), but formats (.html, .xml, etc) will still be detected (and will default to :plain). The existing render file: behaviour was the path through which Rails apps were vulnerable in the recent CVE-2019-5418. Although the vulnerability has been patched in a fully backwards-compatible way, I think it's a strong hint that we should drop the existing previously-vulnerable behaviour if it isn't a benefit to developers.
* | Fix annotated typoPrathamesh Sonpatki2019-03-292-3/+3
| |
* | Merge pull request #35308 from ↵Rafael França2019-03-282-1/+29
|\ \ | |/ |/| | | | | erose/better-error-reporting-for-syntax-errors-in-templates Display a more helpful error message when an ERB template has a Ruby syntax error.
| * Add handling and tests.Eli Rose2019-02-172-1/+29
| |
* | Merge pull request #35758 from Shigeyuki-fukuda/aligned_order_of_argumentRafael França2019-03-261-2/+2
|\ \ | | | | | | Aligned the order of the arguments of render_template and render_with_layout
| * | Aligned the order of the arguments of render_template and render_with_layoutShigeyuki-fukuda2019-03-271-2/+2
| | |
* | | Deprecate custom patterns for PathResolverJohn Hawthorn2019-03-261-39/+11
|/ / | | | | | | | | | | | | | | | | | | | | | | | | Custom glob patterns tie the implementation (Using Dir.glob) to the API we provide. It also doesn't really work. extract_handler_and_format_and_variant expects the handler, format, and variant to be at the end of the template path, and in the same order as they are in the default pattern. This deprecates specifying a custom path for FileSystemResolver and removes the pattern argument of OptimizedFileSystemResolver#initialize, which does not work with a custom pattern.
* | Merge pull request #35661 from jhawthorn/lookup_context_validationEileen M. Uchitelle2019-03-202-1/+9
|\ \ | | | | | | Validate types assigned to LookupContext#formats=
| * | Don't compact formatsJohn Hawthorn2019-03-191-1/+1
| | |
| * | Avoid assigning [nil] to formatsJohn Hawthorn2019-03-191-1/+1
| | |
| * | Rename invalid_types to invalid_valuesJohn Hawthorn2019-03-181-3/+3
| | |
| * | Raise in LookupContext#formats= on invalid formatJohn Hawthorn2019-03-181-0/+5
| | | | | | | | | | | | | | | | | | This is a developer quality of life improvement, to ensure that unknown formats aren't assigned (which it would previously accept, but wouldn't work 100% correctly due to caching).
| * | Make uniq in LookupContext#formats=John Hawthorn2019-03-181-0/+2
| | | | | | | | | | | | | | | Having a format listed twice had no effect. This is mostly helpful to avoid an extra format when assigning [:html, "*/*"]
| * | Ignore nil in LookupContext#formats=John Hawthorn2019-03-181-0/+1
| | | | | | | | | | | | | | | This also removes the mutation we were performing on the values being passed in.
* | | Re-add Template#updated_at as deprecatedJohn Hawthorn2019-03-192-6/+13
| | |
* | | Remove virtual_path from fallback templatesJohn Hawthorn2019-03-181-8/+16
|/ /
* | Ruby 2.4 and later support native Unicode case mappingsRyuta Kamizono2019-03-181-1/+1
| | | | | | | | Here is only place where we use `mb_chars` internally.
* | Merge pull request #35623 from jhawthorn/actionview_cacheAaron Patterson2019-03-154-48/+11
|\ \ | | | | | | Make Template::Resolver always cache
| * | Remove updated_at from TemplatesJohn Hawthorn2019-03-154-18/+9
| | |
| * | Make Template::Resolver always cacheJohn Hawthorn2019-03-151-30/+2
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | All actionview caches are already cleared at the start of each request (when Resolver.caching is false) by PerExecutionDigestCacheExpiry, which calls LookupContext::DetailsKey.clear (which clears all caches). Because caches are always cleared per-request in dev, we shouldn't need this extra logic to compare mtimes and conditionally reload templates. This should make templates slightly faster in development (particularly multiple renders of the same template)
* | | Rename `ActionView::Base#run` to `#_run`Seb Jacobs2019-03-153-3/+3
|/ / | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | There was a recent change by @tenderlove to Action view which introduced `ActionView::Base#run` [1]. We ran into an issue with our application because one of the core concepts in our domain model is a `Run` which is exposed in most of our views as a helper method, which now conflicts with this new method. Although this is a public method it is not really meant to be part of the public API. In order to discourage public use of this method and to reduce the chances of this method conflicting with helper methods we can prefix this method with an underscore, renaming this method to `_run`. [1] https://github.com/rails/rails/commit/c740ebdaf5
* | Merge tag 'v6.0.0.beta3'eileencodes2019-03-131-1/+1
|\ \ | | | | | | | | | v6.0.0.beta3 release
| * | Prep releaseeileencodes2019-03-111-1/+1
| | | | | | | | | | | | | | | | | | | | | * Update RAILS_VERSION * Bundle * rake update_versions * rake changelog:header
* | | Squish the deprecation messages across the codebasePrathamesh Sonpatki2019-03-112-4/+4
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Sample example -> Before: prathamesh@Prathameshs-MacBook-Pro-2 blog *$ rails server thin DEPRECATION WARNING: Passing the Rack server name as a regular argument is deprecated and will be removed in the next Rails version. Please, use the -u option instead. After: prathamesh@Prathameshs-MacBook-Pro-2 squish_app *$ rails server thin DEPRECATION WARNING: Passing the Rack server name as a regular argument is deprecated and will be removed in the next Rails version. Please, use the -u option instead.
* | | Merge pull request #35121 from utilum/warning_tried_to_create_proc_without_blockKasper Timm Hansen2019-03-101-2/+2
|\ \ \ | | | | | | | | Ruby 2.7 warning: creating a Proc without a block
| * | | Ruby 2.7 warning: creating a Proc without a blockutilum2019-02-131-2/+2
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | As of [Revision 66772]( https://bugs.ruby-lang.org/projects/ruby-trunk/repository/trunk/revisions/66772) `Proc.new` without giving a block emits `warning: tried to create Proc object without a block`. This commit fixes cases where Rails test suit tickles this warning. See CI logs: https://travis-ci.org/rails/rails/jobs/487205819#L1161-L1190 https://travis-ci.org/rails/rails/jobs/487205821#L1154-1159 https://travis-ci.org/rails/rails/jobs/487205821#L1160-L1169 https://travis-ci.org/rails/rails/jobs/487205821#L1189 https://travis-ci.org/rails/rails/jobs/487254404#L1307-L1416 https://travis-ci.org/rails/rails/jobs/487254405#L1174-L1191
* | | | Updated links from http to https in guides, docs, etcAbhay Nikam2019-03-092-2/+2
| | | |