| Commit message (Collapse) | Author | Age | Files | Lines |
... | |
| | | | |
|
| | | | |
|
| | | | |
|
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | | |
We don't need to have a special subscribe method for objects. The
regular `subscribe` method is more expensive than a specialized method,
but `subscribe` should not be called frequently. If that turns out to
be a hotspot, we can introduce a specialized method. :)
|
| | | | |
|
| | | |
| | | |
| | | |
| | | |
| | | |
| | | | |
Fanout notifier can send event objects to subscribers now. Also moved
`end` lower in the `finish!` method to guarantee that CPU time is
shorter than real time.
|
|/ / / |
|
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | | |
* Use process clock instead of Time.now
This fixes any issues with the system clock changing and also eliminates
2 object allocations per event.
* Add start! and finish! methods to the event object so we can record
more information
* Adds cpu time, idle time, and allocation count for a particular event.
Co-authored-by: Aaron Patterson <aaron.patterson@gmail.com>
|
|\ \ \
| | | |
| | | | |
Turn on performance based cops
|
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | | |
Use attr_reader/attr_writer instead of methods
method is 12% slower
Use flat_map over map.flatten(1)
flatten is 66% slower
Use hash[]= instead of hash.merge! with single arguments
merge! is 166% slower
See https://github.com/rails/rails/pull/32337 for more conversation
|
| | | |
| | | |
| | | | |
explicit mapping for enum accepts a Hash not an Array, plus the example is using `.keys` which also exists on hash
|
|\ \ \ \
| |/ / /
|/| | |
| | | |
| | | | |
albertoalmagro/albertoalmagro/prefer-rails-command-over-bin-rails
Prefer rails command over bin/rails
|
| | | |
| | | |
| | | |
| | | | |
Substitutes 'in via' for 'by running'
|
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | | |
As discussed in #33203 rails command already looks for, and runs,
bin/rails if it is present.
We were mixing recommendations within guides and USAGE guidelines,
in some files we recommended using rails, in others bin/rails and
in some cases we even had both options mixed together.
|
| |/ /
|/| |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | | |
- There was an issue inside controller tests where order params were not respected, the reason
was because we were calling `Hash#to_query` which sorts the results lexicographically.
1e4e1b62 fixed that issue by not using `to_query` but instead a utility function provided by rack.
- However with the fix came another issue where it's now no longer possible to do this
```
post :foo, params: { user: User.first }
# Prior to the patch the controller will receive { "user" => "1" }
# Whereas now you get { "user": "#<User: ...>" }
```
The fix in this PR is to modify `Hash#to_query` to sort only when it
doesn't contain an array structure that looks something like "bar[]"
Ref https://github.com/rails/rails/pull/33341#issuecomment-404039396
|
|/ / |
|
| | |
|
|\ \
| | |
| | | |
Use class_eval or instance_eval when triggering lazy load hooks
|
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | | |
- When lazy load hooks were triggered we were using
`Object.instance_eval` which evaluates the block in the context of
the class being passed. Most of the time that class was a
`Class`. If one wants to define a instance method on the class then
it wasn't possible.
```ruby
class A; end;
A.instance_eval do
def foo
puts 'bar'
end
end
A.new.foo #> NoMethodError: undefined method `foo`
A.foo #> bar
```
- This PR checks what object is passed when triggering the hooks and
either call `class_eval` or `instance_eval`. My rational and assumptions being
that if an instance of a class is passed, then the blocks needs to
evaluate in the context of that instance (i.e. defining a method
should only define it on that instance).
On the other hand, if a Class or Module is passed when triggering
hooks, then defining a method should define it on the class itself
- #32776 Pushed me to introduce this change
|
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | | |
Firstly, increment and decrement shouldn't care about the particulars of
key expiry. They should only know that they have to pass that responsibility
on to somewhere else.
Secondly, it moves the key normalization back inside the instrumentation like
it was originally. I think that matches the original design intention or at
the very least it lets users catch haywire key truncation.
Thirdly, it moves the changelog entry to the top of the file, where new entries
go. I couldn't understand what the entry was saying so I tried to rewrite it.
|
| | | |
|
| | | |
|
|/ /
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
When multiplying or dividing a duration by a scalar, it's tempting to
operate directly on the duration's value in seconds and recompute the
parts from the result. However this loses information, as there are
multiple combinations of parts that map to any given number of seconds
(e.g. `2.weeks` or `336.hours`). This is especially problematic when
dealing with durations on the scale of months or years, as converting an
exact number of seconds to one of those intervals and then using the
resulting duration to modify a date will give the wrong result.
|
|\ \
| | |
| | |
| | | |
Improve some DateAndTime calculations
|
| | | |
|
|/ /
| |
| |
| |
| |
| |
| |
| |
| | |
DeepCover revealed that most of these `wday != 0 ? wday - 1 : 6`
were not entirely covered, i.e. the case of `wday == 0` was not tested:
https://deep-cover.github.io/rails-cover/activesupport/activesupport/lib/active_support/core_ext/date_and_time/calculations.rb.html#L351
There's actually no valid reason to consider Sunday a special case,
so this commit simply reajusts the values used for calculations.
|
|\ \
| | |
| | | |
Add/Remove `require`
|
| | |
| | |
| | |
| | |
| | |
| | |
| | | |
`activesupport/test/logger_test.rb` requires `tmpdir`.
`activesupport/test/multibyte_test_helpers.rb` requires
`filutils`, `open-uri`, and `tmpdir`.
|
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | | |
- `activesupport/multibyte_normalization_conformance_test.rb`
`fileutils`, `tmpdir`, and `open-uri` are unused since
c245ca30f248367e07d5d831195b12c93a1e3137,
c245ca30f248367e07d5d831195b12c93a1e3137, and
7d7c2d13ba896dd8b58fe91d2fe0c4fc588069ca in accordance.
- `activesupport/test/multibyte_conformance_test.rb`
`tmpdir`, and `open-uri` are unused since
c245ca30f248367e07d5d831195b12c93a1e3137, and
7d7c2d13ba896dd8b58fe91d2fe0c4fc588069ca in accordance.
Remove using of `fileutils` since
c245ca30f248367e07d5d831195b12c93a1e3137.
- `activesupport/test/multibyte_grapheme_break_conformance_test.rb`
`fileutils`, `tmpdir`, and `open-uri` are unused since
c245ca30f248367e07d5d831195b12c93a1e3137,
c245ca30f248367e07d5d831195b12c93a1e3137, and
7d7c2d13ba896dd8b58fe91d2fe0c4fc588069ca in accordance.
|
|\ \ \
| | | |
| | | | |
Add `ActiveSupport::CompareWithRange` to API docs
|
| |/ /
| | |
| | |
| | |
| | |
| | |
| | |
| | | |
Since it is documented in the guides
http://edgeguides.rubyonrails.org/active_support_core_extensions.html#include-questionmark-and-cover-questionmark
we can add it to API docs http://edgeapi.rubyonrails.org too.
[ci skip]
|
|/ /
| |
| |
| | |
It includes via `require "abstract_unit"`.
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
internal API [ci skip]
`:nodoc:` is specified, but unfortunately, it is exposed in the API doc.
http://edgeapi.rubyonrails.org/classes/Enumerable.html#method-i-_original_sum_with_required_identity
If the method of the `alias` destination is public, the specification of
`:nodoc:` does not seem to work.
|
| | |
|
|\ \
| | |
| | | |
Align Time.zone.at method signature with that of Time::at
|
| | |
| | |
| | |
| | | |
For parity with Ruby's Time::at
|
|/ /
| |
| |
| | |
This is unnecessary since #22269.
|
| | |
|
|\ \
| | |
| | | |
Clearer error message in assert_changes
|
| | |
| | |
| | |
| | | |
When `to:` is passed to `assert_changes`, it now prints the well-known `"Expected: x\n Actual: y"` message.
Before, the message only contained the actual value.
|
|\ \ \
| | | |
| | | | |
Document require_dependency [ci skip]
|
| | | | |
|
| | | | |
|
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | | |
ruby/ruby@989e07c features switching `Range#===` to use internal `r_cover_p`
instead of rubyland `include?`. This breaks expected behavior of
`ActiveSupport::CoreExt::Range` documented since at least 8b67a02.
This patch adds overrides on `Range#cover?` and `Range#===` and places all
three in a single module, `CompareWithRange`.
*Requiring core_ext/range/include_range now causes a deprecation warnning*
|
| | | | |
|
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | | |
In the app I'm working on I've wished that index_by had a buddy that would
assign the hash value instead of the key multiple times.
Enter index_with. Useful when building a hash from a static list of
symbols. Before you'd do:
```ruby
POST_ATTRIBUTES.map { |attr_name| [ attr_name, public_send(attr_name) ] }.to_h
```
But now that's a little clearer and faster with:
````ruby
POST_ATTRIBUTES.index_with { |attr_name| public_send(attr_name) }
```
It's also useful when you have an enumerable that should be converted to a hash,
but you don't want to muddle the code up with the overhead that it takes to create
that hash. So before, that's:
```ruby
WEEKDAYS.each_with_object(Hash.new) do |day, intervals|
intervals[day] = [ Interval.all_day ]
end
```
And now it's just:
```ruby
WEEKDAYS.index_with([ Interval.all_day ])
```
It's also nice to quickly get a hash with either nil, [], or {} as the value.
|
| | | |
| | | |
| | | |
| | | | |
Fixes #32928.
|
|/ / /
| | |
| | |
| | | |
Follow up of #32605.
|
|/ /
| |
| |
| | |
Follow up of #32034.
|
| |
| |
| |
| |
| |
| |
| |
| | |
See #29632 for details. In short, it's possible to enter `LoadError#is_missing?` when `LoadError#path` returns `nil`, leading to `path.sub` throwing an none-to-helpful `NoMethodError`.
This tiniest of patch inserts `#to_s` before the `sub` call to make sure it succeeds. Affected surface area should be just as tiny since something has already gone wrong to get us into `#is_missing?` and the current behavior when `#path` returns `nil` seems clearly not intended.
[Gannon McGibbon + Neil Souza]
|