| Commit message (Collapse) | Author | Age | Files | Lines |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
"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
```
|
| |
|
| |
|
|
|
|
|
|
|
|
|
|
| |
When `form_with` was introduced we disabled the automatic
generation of ids that was enabled in `form_for`. This usually
is not an good idea since labels don't work when the input
doesn't have an id and it made harder to test with Capybara.
You can still disable the automatic generation of ids setting
`config.action_view.form_with_generates_ids` to `false.`
|
|\
| |
| | |
Do not pass an instance variable to a private method
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
`ActionView::Helpers::Tags::Base` has `@object` and
all passed arguments for
* `#value`
* `#value_before_type_cast`
* `#value_came_from_user?`
are `@object`, so we do not need to pass arguments in this case.
|
| | |
|
|/ |
|
|
|
|
|
| |
This reverts commit 3420a14590c0e6915d8b6c242887f74adb4120f9, reversing
changes made to afb66a5a598ce4ac74ad84b125a5abf046dcf5aa.
|
| |
|
|
|
|
|
|
| |
Forgot all about https://github.com/rails/rails/pull/28844/files#r113780934
cc @rafaelfranca
|
|
|
|
| |
`allow_method_names_outside_object` attributes of select tag in `form_with`
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
When you ask to generate multiple nested inputs using:
field_for('comments[]', Comment.new) do |c|
c.text_field :body
Rails should generated the names like `post[comments][][body]`.
To make sure we don't have regression the fake models now use the same
implementation of `#to_param` as `ActiveRecord::Base`
Fixes #26942
|
|
|
|
|
|
|
|
| |
Has the handy effect of making the initial examples in the form_with
docs work too.
Had to do some finagling such that form_with's without a scope didn't
wrap their names in braces ala `[title]`.
|
|
|
|
|
|
|
|
|
|
|
| |
Continuing 67f81cc where we decided not to output ids
by default in the new form helpers.
Went with @dhh's suggestion of just requiring ids on
fields being labelled:
https://github.com/rails/rails/issues/25197#issuecomment-231797117
Seems okay enough.
|
| |
|
|
|
|
|
|
|
|
| |
Style/SpaceBeforeBlockBraces
Style/SpaceInsideBlockBraces
Style/SpaceInsideHashLiteralBraces
Fix all violations in the repository.
|
| |
|
| |
|
|
|
|
|
| |
The current code base is not uniform. After some discussion,
we have chosen to go with double quotes by default.
|
| |
|
|
|
|
|
|
|
|
|
|
| |
`Tags::Base#select_content_tag`.
Previously, passing a falsey value to `include_blank` would be ignored if the
field was required, and a blank line would still be inserted. The following will
now raise instead of quietly failing:
`select("post", "category", %w(a required field), { include_blank: false }, required: 'required')`
|
| |
|
|
|
|
|
|
| |
While we don't want to change the form input when validations fail,
blindly using `_before_type_cast` will cause the input to display the
wrong data for any type which does additional work on database values.
|
|
|
|
| |
This reverts commit 787e22bb491bd8c36db1e9734261c4ce02c5c5fd.
|
|
|
|
|
|
|
|
|
|
|
| |
We should never be ignoring valuable information that the types may need
to give us. The reason that it originally used `_before_type_cast` is
unclear, but appears to date back long enough that the reasons may not
be relevant today. There is only one test that asserts that it uses the
before type cast version, but it gives no context as to why and uses a
mock which does not simulate the real world.
Fixes #18523.
|
|
|
|
|
| |
* use public_send instead of send to avoid calling private
methods in form helpers
|
| |
|
|
|