| Commit message (Collapse) | Author | Age | Files | Lines |
| |
|
|
|
|
|
| |
In cases where the MatchData object is not used, this provides a speed-up:
https://github.com/JuanitoFatas/fast-ruby/#stringmatch-vs-stringmatch-vs-stringstart_withstringend_with-code-start-code-end
|
|
|
|
|
| |
Special form_with attributes `skip_default_ids` and `allow_method_names_outside_object`
attributes are leaking into html attributes of option select tag helpers.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
"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.`
|
|
|
|
| |
This basically reverts c4d1a4efeec6f0b5b58222993aa0bec85a19b6a8
|
|\
| |
| | |
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 makes sure that the labels are linked up with the fields.
Fixes #29014
|
|
|
|
|
|
| |
Forgot all about https://github.com/rails/rails/pull/28844/files#r113780934
cc @rafaelfranca
|
|
|
|
|
|
| |
Allows a custom object implementing Enumerable to be used as the choices
parameter for a select tag, which previously wasn't possible due to the
call to `empty?` on the choices (which isn't implemented on Enumerable).
|
|
|
|
| |
`allow_method_names_outside_object` attributes of select tag in `form_with`
|
|
|
|
| |
Actually, private methods cannot be called with `self.`, so it's not just redundant, it's a bad habit in Ruby
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
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.
|
| |
|
|
|
|
|
|
| |
All indentation was normalized by rubocop auto-correct at 80e66cc4d90bf8c15d1a5f6e3152e90147f00772.
But comments was still kept absolute position. This commit aligns
comments with method definitions for consistency.
|
|
|
|
|
|
|
|
| |
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.
|
| |
|
| |
|
|
|
|
|
|
|
|
|
|
|
| |
A change was made in the helper that renders the `datetime`,
being now by default `datetime-local` and creating
an alias of `datetime-local` for `datetime`, `datetime` tag and
it passes to be an abstract class for all other tags that inherit from him.
As a new specification of the HTML 5 the text field type `datetime`
will no longer exist and will pass a `datetime-local`.
Ref: https://html.spec.whatwg.org/multipage/forms.html#local-date-and-time-state-(type=datetime-local)
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
The reason we are reverting this commit is because it created breaking
changes for file upload gems. For more information see discussion here:
https://github.com/rails/rails/issues/17947#issuecomment-225154294
This reverts commit c455817804e4df64c46c17a0cdec0e5a1ca5ba2e, reversing
changes made to 8b3cd74b8a09ef85a43d7631bb062a9ec7f57227.
Conflicts:
actionview/CHANGELOG.md
actionview/lib/action_view/helpers/form_helper.rb
|
| |
|
|
|
|
|
|
| |
the radios
Fixes #22773
|
|
|
|
|
|
|
| |
According to the W3 spec[1] the value should use a 1-based index
and not a 0-based index for the week number.
[1]: http://www.w3.org/TR/html-markup/datatypes.html#form.data.week
|
| |
|
|
|
|
|
| |
This will avoid a error be raised when the only input on the form is the
`collection_radio_buttons`.
|
|
|
|
|
|
|
|
|
|
| |
`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')`
|
|\
| |
| | |
Remove some code duplication in ActionView tags code
|
| | |
|
|/
|
|
|
|
| |
This removes the following warning:
/GitHub/rails/actionview/lib/action_view/helpers/tags/translator.rb:19: warning: private attribute?
|
|
|
|
|
| |
Refactoring at #18647 broke using non active record objects in form_for. This patch
restores the original behaviour where we only compute i18 key when object.respond_to?(:to_model)
|
|
|
|
| |
call is too generic
|
| |
|
| |
|
|
|
|
| |
Thse methods are used only inside this class
|
| |
|
| |
|