aboutsummaryrefslogtreecommitdiffstats
path: root/actionview
Commit message (Collapse)AuthorAgeFilesLines
...
* | | | Don't try to destoy the given string via method argumentAkira Matsuda2018-04-271-1/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | | Or it would raise if the argument was frozen. And even with this change, it would still reduce String allocations together with 9276ea89d2b0be9fdd1ad6590857f8d45a38c267 because `escape` should be `true` in most cases
* | | | Reduce String allocations when building Action View tagsAkira Matsuda2018-04-271-1/+2
| | | | | | | | | | | | | | | | | | | | This method is called against each tag option for each tag, and creates an extra garbage String per each call
* | | | Merge pull request #32471 from janko-m/use-image_processing-gemGeorge Claghorn2018-04-231-2/+2
|\ \ \ \ | | | | | | | | | | Use ImageProcessing gem for ActiveStorage variants
| * | | | Recommend using :resize_to_fit after allJanko Marohnić2018-04-231-2/+2
| | | | |
* | | | | Merge pull request #31881 from yewton/rails-ujs-with-yarn-autocleanRafael França2018-04-231-0/+2
|\ \ \ \ \ | | | | | | | | | | | | Update rails-ujs readme
| * | | | | Update rails-ujs readmeYuto SASAKI2018-02-041-0/+2
| | | | | | | | | | | | | | | | | | Add a note on using `yarn autoclean`.
* | | | | | Make JS views rendered work with content security policyyuuji.yaginuma2018-04-202-1/+8
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | As of now, `HTMLElement.nonce` seems to work only in Chrome. So, it should not be used now. https://developer.mozilla.org/en-US/docs/Web/API/HTMLElement/nonce#Browser_compatibility Fixes #32577.
* | | | | | Merge pull request #32574 from DmytroVasin/rails-ujs-stoppable-eventsRafael França2018-04-198-60/+67
|\ \ \ \ \ \ | | | | | | | | | | | | | | Rails-ujs: Info about stoppable events
| * | | | | | Fix stoppable events in tests and docs.Dmytro Vasin2018-04-148-60/+67
| | |/ / / / | |/| | | |
* | | | | | Merge pull request #32636 from yhirano55/improve_line_tasksRafael França2018-04-191-1/+1
|\ \ \ \ \ \ | | | | | | | | | | | | | | Improve redundancy in line tasks
| * | | | | | Improve redundancy in line tasksYoshiyuki Hirano2018-04-191-1/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | * Remove needless concat from actionpack/Rakefile * Remove neesless File.join from actionview/Rakefile
* | | | | | | Replace `assert !` with `assert_not`Daniel Colson2018-04-194-21/+21
|/ / / / / / | | | | | | | | | | | | | | | | | | | | | | | | This autocorrects the violations after adding a custom cop in 3305c78dcd.
* | | | | | Merge pull request #32607 from yaroslav/feature/nonce-for-javascript_include_tagAndrew White2018-04-183-0/+22
|\ \ \ \ \ \ | | | | | | | | | | | | | | Add the `nonce: true` option for `javascript_include_tag` helper.
| * | | | | | Add the `nonce: true` option for `javascript_include_tag` helper.Yaroslav Markin2018-04-173-0/+22
| | | | | | |
* | | | | | | Merge pull request #32326 from ↵Guillermo Iguaran2018-04-181-1/+5
|\ \ \ \ \ \ \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | q-centrix/perf-improvement-translation-helper-default-array Only create an array with default options if we have default options
| * | | | | | | Only create an array with default options if we have default optionsDillon Welch2018-03-221-1/+5
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | If the options passed in don't have a default key, there's no point in creating an array from those empty results when we can just go straight to creating an empty array. Benchmarks: ```ruby master_version with false {:FREE=>-2497, :T_STRING=>52, :T_ARRAY=>2000, :T_HASH=>1000, :T_IMEMO=>1} master_version with true {:FREE=>-3001, :T_ARRAY=>2000, :T_HASH=>1000} fast_version with false {:FREE=>-1001, :T_ARRAY=>1000} fast_version with true {:FREE=>-3001, :T_ARRAY=>2000, :T_HASH=>1000} Warming up -------------------------------------- master_version with false 104.985k i/100ms master_version with true 118.737k i/100ms fast_version with false 206.013k i/100ms fast_version with true 107.005k i/100ms Calculating ------------------------------------- master_version with false 1.970M (±24.6%) i/s - 8.924M in 5.010302s master_version with true 2.152M (±12.4%) i/s - 10.686M in 5.051588s fast_version with false 5.613M (±19.6%) i/s - 26.782M in 5.003740s fast_version with true 2.027M (±15.8%) i/s - 9.951M in 5.065670s Comparison: fast_version with false: 5613159.2 i/s master_version with true: 2152354.4 i/s - 2.61x slower fast_version with true: 2027296.0 i/s - 2.77x slower master_version with false: 1969824.9 i/s - 2.85x slower ``` Benchmark code: ```ruby begin require "bundler/inline" rescue LoadError => e $stderr.puts "Bundler version 1.10 or later is required. Please update your Bundler" raise e end gemfile(true) do source "https://rubygems.org" gem "benchmark-ips" gem "rails" end def allocate_count GC.disable before = ObjectSpace.count_objects yield after = ObjectSpace.count_objects after.each { |k,v| after[k] = v - before[k] } after[:T_HASH] -= 1 # probe effect - we created the before hash. GC.enable result = after.reject { |k,v| v == 0 } GC.start result end def master_version(key) Array({}.delete(:default)).compact end def fast_version(key) if key Array({}.delete(:default)).compact else [] end end def test puts "master_version with false" puts allocate_count { 1000.times { master_version(false) } } puts "master_version with true" puts allocate_count { 1000.times { master_version(true) } } puts "fast_version with false" puts allocate_count { 1000.times { fast_version(false) } } puts "fast_version with true" puts allocate_count { 1000.times { fast_version(true) } } Benchmark.ips do |x| x.report("master_version with false") { master_version(false) } x.report("master_version with true") { master_version(true) } x.report("fast_version with false") { fast_version(false) } x.report("fast_version with true") { fast_version(true) } x.compare! end end test ```
* | | | | | | | Ruby 2.6 warning: passing splat keyword arguments as a single Hashutilum2018-04-171-2/+7
| |/ / / / / / |/| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Before: ``` $ ruby -v ruby 2.6.0dev (2018-04-04 trunk 63085) [x86_64-linux] $ bundle exec rake test:template ... /rails/actionview/lib/action_view/digestor.rb:76: warning: passing splat keyword arguments as a single Hash to `find_all' ```
* | | | | | | ActionController -> Action Controller [ci skip]Xavier Noria2018-04-171-4/+5
| | | | | | | | | | | | | | | | | | | | | | | | | | | | Really just an excuse to trigger edge docs generation
* | | | | | | Inclusive Language in Documentation Examples [ci skip]Cassidy Kobewka2018-04-151-2/+2
| |/ / / / / |/| | | | |
* | | | | | Fix rendering a differently-formatted partial after cachingGeorge Claghorn2018-04-131-2/+12
| | | | | |
* | | | | | couple of edits [ci skip]Xavier Noria2018-04-131-2/+2
| | | | | | | | | | | | | | | | | | | | | | | | Legit, but really an excuse to trigger the master hook in the docs server.
* | | | | | Fix `actionview/CHANGELOG.md`bogdanvlviv2018-04-071-2/+2
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | - Add missing dots at the end of sentences. - Wrap RecordTagHelper into `. - `RecordTagHelper` => `ActionView::Helpers::RecordTagHelper`. [ci skip]
* | | | | | Remove RecordTagHelperYoshiyuki Hirano2018-04-074-58/+4
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | * Since #18411, we started to inform about extracted gem (record_tag_helper) to developers who use `ActionView::Helpers::RecordTagHelper` 's methods. * Currently, it seems no problem that we don't have to support no longer.
* | | | | | Remove redundant type checkAndrew White2018-04-061-2/+1
| | | | | | | | | | | | | | | | | | | | | | | | All of Date, DateTime and Time respond to `iso8601`.
* | | | | | Use comment instead of desc in actionview's RakefileYoshiyuki Hirano2018-04-051-2/+2
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | * Seems the desc of Rake::TestTask.new is not displayed * Use comment instead of desc
* | | | | | Add :ujs desc to Rakefile in actionviewYoshiyuki Hirano2018-04-051-0/+1
| | | | | |
* | | | | | passing splat keyword arguments as a single Hashutilum2018-04-041-1/+1
| | | | | | | | | | | | | | | | | | | | | | | | Ruby 2.6.0 warns about this.
* | | | | | Use `:default` option in order to set default value of ↵bogdanvlviv2018-04-031-2/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | `finalize_compiled_template_methods` Since we introduced default option for `class_attribute` and `mattr_accessor` family of methods and changed all occurrences of setting default values by using of `:default` option I think it would be fine to use `:default` option in order to set default value of `finalize_compiled_template_methods` since it expresses itself very well. Related to #29294, #32418
* | | | | | Small doc fixesT.J. Schuck2018-04-021-1/+1
| | | | | | | | | | | | | | | | | | | | | | | | [ci skip]
* | | | | | Add `action_view.finalize_compiled_template_methods` config optionSimon Coffey2018-04-023-1/+23
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | ActionView::Template instances compile their source to methods on the ActionView::CompiledTemplates module. To prevent leaks in development mode, where templates can frequently change, a finalizer is added that undefines these methods[1] when the templates are garbage-collected. This is undesirable in the test environment, however, as templates don't change during the life of the test. Moreover, the cost of undefining a method is proportional to the number of descendants a class or module has, since the method cache must be cleared for all descendant classes. As ActionView::CompiledTemplates is mixed into every ActionView::TestCase (or in RSpec suites, every view spec example group), it can end up with a very large number of descendants, and undefining its methods can become very expensive. In large test suites, this results in a long delay at the end of the test suite as all template finalizers are run, only for the process to then exit. To avoid this unnecessary cost, this change adds a config option, `action_view.finalize_compiled_template_methods`, defaulting to true, and sets it to false in the test environment only. [1] https://github.com/rails/rails/blob/09b2348f7fc8d4e7191e70e06608c5909067e2aa/actionview/lib/action_view/template.rb#L118-L126
* | | | | | Merge pull request #32404 from mathieumahe/masterGuillermo Iguaran2018-04-023-1/+39
|\ \ \ \ \ \ | | | | | | | | | | | | | | Extract the confirm call in its own, overridable method in rails_ujs
| * | | | | | Extract the confirm call in its own, overridable method in rails_ujsMathieu2018-04-013-1/+39
| | |_|_|/ / | |/| | | |
* | | | | | Fix typo in rails-ujs HTML content testRaymond Zhou2018-04-011-1/+1
| | | | | | | | | | | | | | | | | | | | | | | | `</ps>` is not a valid closing tag for `<p>`.
* | | | | | Merge pull request #32406 from ↵Kasper Timm Hansen2018-04-014-23/+23
|\ \ \ \ \ \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | olivierlacan/actionview-helpers-docs-consistent-spacing Use consistent spacing in actionview helper docs
| * | | | | | Use consistent spacing in actionview helper docs [ci skip]Olivier Lacan2018-04-014-23/+23
| |/ / / / / | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | The spacing in these comments is fairly inconsistent. Array argument contents are often separated with a space from the array literal brackets but in several cases the Hash literal curly braces are tangent to their contents which makes the documentation harder to read in some cases.
* | | | | | Merge pull request #32287 from razh/fix-rails-ujs-html-contentKasper Timm Hansen2018-04-012-1/+12
|\ \ \ \ \ \ | |/ / / / / |/| | | | | Pass HTML responses as plain-text in rails-ujs
| * | | | | Pass HTML responses as plain-text in rails-ujsRaymond Zhou2018-03-192-1/+12
| |/ / / / | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Running HTML responses through `DOMParser#parseFromString` results in complete `HTMLDocument` instances with unnecessary surrounding tags. For example: new DOMParser().parseFromString('<p>hello</p>', 'text/html') Will output: <html> <head></head> <body> <p>hello</p> </body> </html> This is passed to the `ajax:success` handler as `event.detail[0]` (`data`), but cannot be used directly without first traversing the document. To resolve this, only XML content is passed through `parseFromString`, while HTML content is treated as plain-text. This matches the behavior of jquery-ujs, which relied on jQuery's response-type inference.
* | | | | Merge pull request #32305 from q-centrix/perf-improvement-translation-helperAndrew White2018-03-201-2/+5
|\ \ \ \ \ | | | | | | | | | | | | Memoize the result of gsubbing @virtual_path
| * | | | | Memoize the result of gsubbing @virtual_pathDillon Welch2018-03-201-2/+5
| |/ / / / | | | | | | | | | | | | | | | | | | | | | | | | | This gets called many times for each virtual_path, creating a new string each time that `translate` is called. We can memoize this so that it only happens once per virtual_path instead.
* | | | | Merge pull request #32302 from q-centrix/perf-improvement-tag-nameAndrew White2018-03-201-3/+3
|\ \ \ \ \ | | | | | | | | | | | | Interpolate '' instead of nil when multiple is false.
| * | | | | Interpolate '' instead of nil when multiple is false.Dillon Welch2018-03-201-3/+3
| |/ / / / | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | "my string #{nil}" results in an additional '' string allocation, I'm guessing because the nil has to be converted to a string. "my string #{'[]' if multiple}" results in "my string #{nil}" if multiple is false. Doing "my string #{''}" does not result in an extra string allocation. I moved the if multiple logic into a method so I only had to make the change once. ```ruby begin require "bundler/inline" rescue LoadError => e $stderr.puts "Bundler version 1.10 or later is required. Please update your Bundler" raise e end gemfile(true) do source "https://rubygems.org" gem "benchmark-ips" gem "rails" end def allocate_count GC.disable before = ObjectSpace.count_objects yield after = ObjectSpace.count_objects after.each { |k,v| after[k] = v - before[k] } after[:T_HASH] -= 1 # probe effect - we created the before hash. GC.enable result = after.reject { |k,v| v == 0 } GC.start result end @html_options = {} def master_version(multiple=nil) "hi#{"[]" if multiple}" end def fast_version(multiple=nil) str = multiple ? "[]" : '' "hi#{str}" end def test puts "master_version" puts allocate_count { 1000.times { master_version } } puts "master_version with arg" puts allocate_count { 1000.times { master_version(' there') } } puts "fast_version" puts allocate_count { 1000.times { fast_version } } puts "fast_version with arg" puts allocate_count { 1000.times { fast_version(' there') } } Benchmark.ips do |x| x.report("master_version") { master_version } x.report("master_version with arg") { master_version(' there') } x.report("fast_version") { fast_version } x.report("fast_version with arg") { fast_version(' there') } x.compare! end end test ``` results: ```ruby master_version {:FREE=>-1981, :T_STRING=>2052} master_version with arg {:FREE=>-1001, :T_STRING=>1000} fast_version {:FREE=>-1001, :T_STRING=>1000} fast_version with arg {:FREE=>-1001, :T_STRING=>1000} Warming up -------------------------------------- master_version 138.851k i/100ms master_version with arg 164.029k i/100ms fast_version 165.737k i/100ms fast_version with arg 167.016k i/100ms Calculating ------------------------------------- master_version 2.464M (±14.7%) i/s - 11.941M in 5.023307s master_version with arg 3.754M (± 8.5%) i/s - 18.699M in 5.021354s fast_version 3.449M (±11.7%) i/s - 17.071M in 5.033312s fast_version with arg 3.636M (± 6.9%) i/s - 18.205M in 5.034792s Comparison: master_version with arg: 3753896.1 i/s fast_version with arg: 3636094.5 i/s - same-ish: difference falls within error fast_version: 3448766.2 i/s - same-ish: difference falls within error master_version: 2463857.3 i/s - 1.52x slower ```
* / / / / Fix digesting templates with mixed formatsJavan Makhmali2018-03-203-4/+15
|/ / / /
* | | | Merge pull request #31250 from ↵Kasper Timm Hansen2018-03-151-0/+35
|\ \ \ \ | | | | | | | | | | | | | | | | | | | | lsylvester/only-preload-misses-on-multifetch-cache Only preload misses on multifetch cache
| * | | | Only preload misses on multifetch cacheLachlan Sylvester2018-03-061-0/+35
| | | | |
* | | | | Pass the skip_pipeline option in image_submit_tagAndrew White2018-03-141-1/+2
| | | | | | | | | | | | | | | | | | | | Fixes #32248.
* | | | | Remove changelog header for unreleased versionRafael Mendonça França2018-03-131-2/+0
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | We only add the header when releasing to avoid some conflicts. [ci skip]
* | | | | Fix CHANGELOGs [ci skip]bogdanvlviv2018-03-121-5/+5
|/ / / / | | | | | | | | | | | | | | | | | | | | | | | | | | | | - Add missing dots. - Remove reference to itself on GitHub. Usually, we add references to fixed issues only in a changelog. Follow up #32223
* | | | Merge pull request #32165 from bogdanvlviv/fix-occurrences-Fixnum-BignumRyuta Kamizono2018-03-051-3/+3
|\ \ \ \ | | | | | | | | | | Fix occurrences Fixnum|Bignum
| * | | | Fix occurrences Fixnum|Bignumbogdanvlviv2018-03-041-3/+3
| | | | | | | | | | | | | | | | | | | | Related to https://github.com/rails/rails/commit/d4eb0dc89ee6b476e2e10869dc282a96f956c6c7#r27830891
* | | | | Fix actionview tests executionbogdanvlviv2018-03-041-7/+8
|/ / / / | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | On my local environment execution of `cd actionview/ && bin/test` raises error: ``` (snip) rails/actionview/test/template/render_test.rb:6:in `<top (required)>': superclass mismatch for class TestController (TypeError) ``` In some test files `TestController` inherited from `ActionController::Base`, but in `test/actionpack/controller/render_test.rb` file `TestController` inherited from `ApplicationController`. This produces error `superclass mismatch for class TestController (TypeError)` Step to reproduce this on any environment: `cd actionview/ && bin/test test/template/streaming_render_test.rb test/actionpack/controller/render_test.rb`