Commit Graph

1886 Commits

Author SHA1 Message Date
Ryuta Kamizono
8f6c85f036 Merge pull request #32190 from liwii/use_year_names
Add `use_year_names` option to date_select tag
2018-06-21 17:01:35 +09:00
Koki Ryu
8f46a23d37 Add year_format option to date_select tag. This option makes it possible to customize year
names. Lambda should be passed to use this option. Example:

    date_select('user_birthday', '', start_year: 1998, end_year: 2000, year_format: ->year { "Heisei #{year - 1988}" })

The HTML produced:

    <select id="user_birthday__1i" name="user_birthday[(1i)]">
    <option value="1998">Heisei 10</option>
    <option value="1999">Heisei 11</option>
    <option value="2000">Heisei 12</option>
    </select>
    /* The rest is omitted */
2018-06-10 21:07:59 +09:00
yuuji.yaginuma
36390b6bdc Remove unnecessary with_default_enforce_utf8 method
Because the same method is defined in `FormWithTest` of the parent class.
fe9547b6fb/actionview/test/template/form_helper/form_with_test.rb (L19..L26)
2018-05-28 11:08:09 +09:00
yuuji.yaginuma
2f76256127 Fix RDoc formatting: + doesn't work with space [ci skip]
Follow up of #32958.
2018-05-23 08:12:20 +09:00
Corey Farwell
0077462be0
Indicate true in a doc comment is code-like. 2018-05-22 17:24:33 -04:00
Ryuta Kamizono
1dc17e7b2e Fix CustomCops/AssertNot to allow it to have failure message
Follow up of #32605.
2018-05-13 11:32:47 +09:00
Tyler Hunt
c6e1afdea4
Remove reference to old :text rendering option
[ci skip]
2018-05-11 14:19:29 -04:00
T.J. Schuck
a471ddf7c7 Remove leftover requires
* Concurrent::Map usage was removed from this file in 3239ed48d28f3c0baf4445e6c279107e892b7cab

* Monitor usage was removed in f233598d2da773c2024cbe62a199ddc70d9fd7a1
2018-05-07 17:20:37 -04:00
printercu
2d50374be8 Use usual method definition instead of extracting args from array
Follows #32612
2018-05-03 12:47:36 +03:00
Max Melentiev
20b4794ff7 Don't allocate unnecessary array in translation helper 2018-04-28 10:42:19 +03:00
Rafael França
ce58a64f19
Merge pull request #30647 from droptheplot/render-partials-string-locals
Allow usage of strings as locals for partial renderer
2018-04-27 19:17:36 -04:00
Ryuta Kamizono
0f9fc2b1e6 Address Style/StringLiterals offence
Caused at 9276ea89d2b0be9fdd1ad6590857f8d45a38c267.
2018-04-27 04:15:29 +09:00
Akira Matsuda
7d2400ab61 Don't try to destoy the given string via method argument
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
2018-04-27 03:25:07 +09:00
Akira Matsuda
9276ea89d2 Reduce String allocations when building Action View tags
This method is called against each tag option for each tag,
and creates an extra garbage String per each call
2018-04-27 02:54:53 +09:00
George Claghorn
ef5902a2f1
Merge pull request #32471 from janko-m/use-image_processing-gem
Use ImageProcessing gem for ActiveStorage variants
2018-04-23 16:01:16 -05:00
Janko Marohnić
eef0bd0c0a
Recommend using :resize_to_fit after all 2018-04-23 21:04:35 +02:00
Rafael França
cde7c30781
Merge pull request #31881 from yewton/rails-ujs-with-yarn-autoclean
Update rails-ujs readme
2018-04-23 12:20:15 -04:00
yuuji.yaginuma
1694b02909 Make JS views rendered work with content security policy
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.
2018-04-20 15:41:56 +09:00
Rafael França
3812ef8b66
Merge pull request #32574 from DmytroVasin/rails-ujs-stoppable-events
Rails-ujs: Info about stoppable events
2018-04-19 23:37:01 -04:00
Rafael França
fca08b8167
Merge pull request #32636 from yhirano55/improve_line_tasks
Improve redundancy in line tasks
2018-04-19 15:36:23 -04:00
Yoshiyuki Hirano
6aaeb8ef10 Improve redundancy in line tasks
* Remove needless concat from actionpack/Rakefile
* Remove neesless File.join from actionview/Rakefile
2018-04-19 23:45:28 +09:00
Daniel Colson
a1ac18671a Replace assert ! with assert_not
This autocorrects the violations after adding a custom cop in
3305c78dcd.
2018-04-19 08:11:33 -04:00
Andrew White
185fce1597
Merge pull request #32607 from yaroslav/feature/nonce-for-javascript_include_tag
Add the `nonce: true` option for `javascript_include_tag` helper.
2018-04-18 18:49:27 +01:00
Guillermo Iguaran
7bcb04c73d
Merge pull request #32326 from q-centrix/perf-improvement-translation-helper-default-array
Only create an array with default options if we have default options
2018-04-18 12:21:05 -05:00
utilum
8201646327 Ruby 2.6 warning: passing splat keyword arguments as a single Hash
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'
```
2018-04-17 22:07:26 +02:00
Yaroslav Markin
47013a7126 Add the nonce: true option for javascript_include_tag helper. 2018-04-17 22:50:33 +03:00
Xavier Noria
4824b4a8a6 ActionController -> Action Controller [ci skip]
Really just an excuse to trigger edge docs generation
2018-04-17 12:14:10 +02:00
Cassidy Kobewka
2aa8e0a56f
Inclusive Language in Documentation Examples [ci skip] 2018-04-15 12:34:30 -04:00
Dmytro Vasin
e3fcd96dc4 Fix stoppable events in tests and docs. 2018-04-14 19:44:14 +03:00
George Claghorn
4f99a21864
Fix rendering a differently-formatted partial after caching 2018-04-13 14:43:12 -04:00
Xavier Noria
d654677973 couple of edits [ci skip]
Legit, but really an excuse to trigger the master hook in the docs server.
2018-04-13 16:39:51 +02:00
bogdanvlviv
f0bde0167c
Fix actionview/CHANGELOG.md
- Add missing dots at the end of sentences.
- Wrap RecordTagHelper into `.
- `RecordTagHelper` => `ActionView::Helpers::RecordTagHelper`.

[ci skip]
2018-04-07 11:28:26 +03:00
Yoshiyuki Hirano
5c5ddd69b1 Remove RecordTagHelper
* 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.
2018-04-07 09:28:01 +09:00
Andrew White
457312f54f
Remove redundant type check
All of Date, DateTime and Time respond to `iso8601`.
2018-04-06 11:50:04 +01:00
Yoshiyuki Hirano
a680de702b Use comment instead of desc in actionview's Rakefile
* Seems the desc of Rake::TestTask.new is not displayed
* Use comment instead of desc
2018-04-05 09:22:24 +09:00
Yoshiyuki Hirano
ab2e597240 Add :ujs desc to Rakefile in actionview 2018-04-05 09:22:23 +09:00
utilum
73e9b854d8 passing splat keyword arguments as a single Hash
Ruby 2.6.0 warns about this.
2018-04-04 11:05:14 +02:00
bogdanvlviv
e6f3882ce9
Use :default option in order to set default value of 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
2018-04-03 16:40:23 +03:00
T.J. Schuck
0ef8221910 Small doc fixes
[ci skip]
2018-04-02 19:55:08 -04:00
Simon Coffey
eede8d8130 Add action_view.finalize_compiled_template_methods config option
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] 09b2348f7f/actionview/lib/action_view/template.rb (L118-L126)
2018-04-02 20:50:33 +01:00
Guillermo Iguaran
91f4e335b5
Merge pull request #32404 from mathieumahe/master
Extract the confirm call in its own, overridable method in rails_ujs
2018-04-02 10:50:10 -05:00
Raymond Zhou
e06b672050 Fix typo in rails-ujs HTML content test
`</ps>` is not a valid closing tag for `<p>`.
2018-04-01 16:21:22 -04:00
Kasper Timm Hansen
6b7a93d963
Merge pull request #32406 from olivierlacan/actionview-helpers-docs-consistent-spacing
Use consistent spacing in actionview helper docs
2018-04-01 17:40:27 +02:00
Olivier Lacan
a07562599e Use consistent spacing in actionview helper docs [ci skip]
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.
2018-04-01 17:37:12 +02:00
Kasper Timm Hansen
4b54d2a2a2
Merge pull request #32287 from razh/fix-rails-ujs-html-content
Pass HTML responses as plain-text in rails-ujs
2018-04-01 16:49:51 +02:00
Mathieu
e9aa7ecdee Extract the confirm call in its own, overridable method in rails_ujs 2018-04-01 19:15:36 +07:00
Dillon Welch
385260590f Only create an array with default options if we have default options
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
```
2018-03-22 22:43:52 -07:00
Andrew White
09656debe6
Merge pull request #32305 from q-centrix/perf-improvement-translation-helper
Memoize the result of gsubbing @virtual_path
2018-03-20 15:42:31 +00:00
Dillon Welch
05eaa07627 Memoize the result of gsubbing @virtual_path
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.
2018-03-20 07:26:14 -07:00
Andrew White
c7cbc2e3a0
Merge pull request #32302 from q-centrix/perf-improvement-tag-name
Interpolate '' instead of nil when multiple is false.
2018-03-20 14:17:35 +00:00