| Commit message (Collapse) | Author | Age | Files | Lines |
|\
| |
| | |
Update docs for `formatted_offset`
|
| |
| |
| | |
Output of `formatted_offset` is depends on input so it’s not always in +HH:MM format. Possible outputs are “+5:30”, “+530” or provided alternate UTC string [ci skip]
|
|\ \
| | |
| | | |
Updated docs for transform_keys & transform_values
|
| | | |
|
| | | |
|
|/ /
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
We're calling this function on an empty hash as part of copying the
attribute set during dirty checking initialization. The new structure
caused a performance regression on loading records from the database.
This causes `User.all.to_a` to perform about 10% faster w/ 10k records.
Calculating -------------------------------------
User.all - master 9.000 i/100ms
User.all - sg-fix-ar-regression
8.000 i/100ms
-------------------------------------------------
User.all - master 81.236 (± 7.4%) i/s - 405.000
User.all - sg-fix-ar-regression
89.716 (± 7.8%) i/s - 448.000
|
|/ |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
With this we can perform new assertions on the returned value without having
to cache it with an outer variable or wrapping all subsequent assertions inside
the `assert_difference` block.
Before:
```
post = nil
assert_difference -> { Post.count }, 1 do
Post.create
end
assert_predicate post, :persisted?
```
Now:
```
post = assert_difference -> { Post.count } do
Post.create
end
assert_predicate post, :persisted?
```
|
| |
|
|
|
|
|
|
| |
Rails 4.2.3 AS::Callbacks will not halt chain if `false` is returned.
That is the behavior of specific callbacks like AR::Callbacks and
AM::Callbacks.
|
|\
| |
| | |
Added Examples in docs for internal behavior of Array#to_formatted_s [ci skip]
|
| | |
|
| |
| |
| | |
Here is correct output of `number_to_percentage(100, format: "%n %”)`
|
| |
| |
| |
| |
| |
| |
| | |
The concept of a blank date or time doesn't make sense so we can short
circuit the calls for `blank?` on these classes to gain small speed boost.
Fixes #21657
|
| | |
|
| |
| |
| |
| | |
Call to Object#try was removed with this pull request https://github.com/rails/rails/pull/21596
|
| | |
|
|\ \
| | |
| | | |
Replaced `ThreadSafe::Map` with successor `Concurrent::Map`.
|
| | |
| | |
| | |
| | |
| | |
| | |
| | | |
The thread_safe gem is being deprecated and all its code has been merged
into the concurrent-ruby gem. The new class, Concurrent::Map, is exactly
the same as its predecessor except for fixes to two bugs discovered
during the merge.
|
|\ \ \
| | | |
| | | | |
Correcting `NameError` error message in `mattr_reader` method. [ci skip]
|
| | |/
| |/|
| | |
| | |
| | |
| | | |
commit https://github.com/rails/rails/commit/7dfbd91b0780fbd6a1dd9bfbc176e10894871d2d, `NameError` includes attribute_name also in error message [ci skip]
|
| |/
|/| |
|
|/
|
|
| |
@rafaelfranca suggested in https://github.com/rails/rails/commit/f7c7bcd9c2a8b0e8c2840295d001d2d4dfd4cfae that code examples should display
the result after `# =>` and not after `#=>`.
|
|\
| |
| | |
Corrected `to_time` output in ActiveSupport Date Conversion docs [ci …
|
| |
| |
| |
| |
| | |
https://github.com/rails/rails/commit/48583f8bf74d1cefefea3cd6591bd546a9eaff6c, to_time returns times formatted as YYYY-MM-DD HH:MM:SS UTC [ci skip]
`to_time` method now returns in `YYYY-MM-DD HH:MM:SS UTC` format.
|
|\ \ |
|
| | |
| | |
| | |
| | | |
[ci skip]
|
| |/
|/| |
|
| |
| |
| | |
This was happened after this commit https://github.com/rails/rails/commit/2ebf47aea21ff8ac10681e53e78dd7a0e5c31c6e
|
|\ \
| | |
| | | |
Improve Docs of ActiveSupport::TimeZone [ci skip]
|
| | |
| | |
| | |
| | |
| | | |
`TimeZone` class is a part of `ActiveSupport` module. For Accessing `TimeZone` class, we need to call `ActiveSupport::TimeZone` instead of `TimeZone`.
individual `TimeZone` gives `NameError: uninitialized constant ‘TimeZone’ error
|
|\ \ \
| |/ /
|/| | |
Remove methods that are never invoked
|
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | | |
Fixes #21122 - does not change any current behavior; simply reflects
the fact that two conditions of the if/else statement are never reached.
The reason is #17227 which adds a default terminator to AS::Callbacks.
Therefore, even callback chains that do not define a terminator now
have a terminator, and `chain_config.key?(:terminator)` is always true.
Of course, if no terminator was defined, then we want this new default
terminator not to do anything special. What the terminator actually does
(or should do) is discussed in #21218 but the simple fact that a default
terminator exists makes this current PR valid.
*Note* that the conditional/simple methods have not been removed in
AS::Conditionals::Filter::After because of `:skip_after_callbacks_if_terminated`
which lets a user decide **not** to skip after callbacks even if the chain was
terminated.
|
| | |
| | |
| | | |
`DateTime.utc` is not a valid method. It gives `NoMethodError: undefined method `utc` for DateTime:Class`. As we know that we can calculate `utc` time from `Time` Class, but we can’t calculate `utc` time from `DateTime` Class.
|
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | | |
Saves about 6 MB, about 40% faster.
**strip_heredoc.rb**
```ruby
require "active_support/core_ext/object/try"
require "get_process_mem"
class String
def strip_heredoc
indent = scan(/^[ \t]*(?=\S)/).min.try(:size) || 0
gsub(/^[ \t]{#{indent}}/, '')
end
end
if ENV["MEASURE_MEMORY"] == "yes"
mem = GetProcessMem.new
GC.start
GC.disable
10000.times do
<<-MSG.strip_heredoc
xhr and xml_http_request methods are deprecated in favor of
`get :index, xhr: true` and `post :create, xhr: true`
MSG
end
before = mem.mb
after = mem.mb
GC.enable
puts "Before: #{before} MiB"
puts "After: #{after} MiB"
puts "Diff: #{after - before} MiB"
end
```
**patched_strip_heredoc.rb**
```ruby
require "active_support/core_ext/object/try"
require "get_process_mem"
class String
def patched_strip_heredoc
gsub(/^#{scan(/^[ \t]*(?=\S)/).min}/, "".freeze)
end
end
if ENV["MEASURE_MEMORY"] == "yes"
mem = GetProcessMem.new
GC.start
GC.disable
10000.times do
<<-MSG.patched_strip_heredoc
xhr and xml_http_request methods are deprecated in favor of
`get :index, xhr: true` and `post :create, xhr: true`
MSG
end
before = mem.mb
after = mem.mb
GC.enable
puts "Before: #{before} MiB"
puts "After: #{after} MiB"
puts "Diff: #{after - before} MiB"
end
```
**Before**
```
$ MEASURE_MEMORY=yes ruby strip_heredoc.rb
Before: 44.73828125 MiB
After: 44.7734375 MiB
Diff: 0.03515625 MiB
```
**After**
```
$ MEASURE_MEMORY=yes ruby patched_strip_heredoc.rb
Before: 37.9765625 MiB
After: 38.015625 MiB
Diff: 0.0390625 MiB
```
`44.7734375 - 38.015625 = 6.75`
=> **Saves about 6.75 MiB**
**benchmark.rb**
```ruby
require "benchmark/ips"
require_relative "./strip_heredoc"
require_relative "./patched_strip_heredoc"
def original
<<-MSG.strip_heredoc
xhr and xml_http_request methods are deprecated in favor of
`get :index, xhr: true` and `post :create, xhr: true`
MSG
end
def patched
<<-MSG.patched_strip_heredoc
xhr and xml_http_request methods are deprecated in favor of
`get :index, xhr: true` and `post :create, xhr: true`
MSG
end
Benchmark.ips do |x|
x.report("original") { original }
x.report(" patched") { patched }
x.compare!
end
```
```
$ ruby -v benchmark.rb
ruby 2.2.2p95 (2015-04-13 revision 50295) [x86_64-darwin14]
Calculating -------------------------------------
original 5.652k i/100ms
patched 6.477k i/100ms
-------------------------------------------------
original 54.076k (± 5.7%) i/s - 271.296k
patched 74.557k (± 6.2%) i/s - 375.666k
Comparison:
patched: 74557.0 i/s
original: 54076.4 i/s - 1.38x slower
```
=> **About 38% faster**
1. Clone rails project `git clone git@github.com:rails/rails.git`
2. Apply this patch to
`activesupport/lib/active_support/core_ext/string/strip.rb`
3. `cd activesupport`
4. run `rake`
5. And tests passed:
```
➜ activesupport $ rake
/Users/Juan/.rubies/ruby-2.2.2/bin/ruby -w -I"lib:test"
"/Users/Juan/.rubies/ruby-2.2.2/lib/ruby/2.2.0/rake/rake_test_loader.rb"
"test/**/*_test.rb"
........................................................................
........................................................................
........................................................................
........................................................................
........................................................................
........................................................................
........................................................................
........................................................................
........................................................................
........................................................................
........................................................................
........................................................................
........................................................................
........................................................................
........................................................................
........................................................................
........................................................................
........................................................................
........................................................................
........................................................................
........................................................................
........................................................................
........................................................................
........................................................................
........................................................................
........................................................................
........................................................................
........................................................................
........................................................................
........................................................................
........................................................................
........................................................................
........................................................................
........................................................................
........................................................................
........................................................................
........................................................................
........................................................................
........................................................................
........................................................................
........................................................................
........................................................................
........................................................................
........................................................................
......................................................................S.
SSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSS
Finished in 15.343004s, 214.2344 runs/s, 24902.4898 assertions/s.
3287 runs, 382079 assertions, 0 failures, 0 errors, 48 skips
You have skipped tests. Run with --verbose for details.
```
|
|\ \ \
| | | |
| | | | |
fix wrong method used in the TimeWithZone#inspect method docs [ci skip]
|
| |/ / |
|
|\ \ \
| | | |
| | | |
| | | | |
Fix and Improve sql logging coloration in `ActiveRecord::LogSubscriber`.
|
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | | |
- Improves coloring for statements like:
# Become WHITE
SELECT * FROM (
SELECT * FROM mytable FOR UPDATE
) ss WHERE col1 = 5;
LOCK TABLE table_name IN ACCESS EXCLUSIVE MODE;
# Becomes RED
ROLLBACK
- Reinstates the coloration of the `payload[:name]`.
Instead of simple alternating colors, adds meaning:
- `MAGENTA` for `"SQL"` or `blank?` payload names
- `CYAN` for Model Load/Exists
- Introduces specs for sql coloration.
- Introduces specs for payload name coloration.
GH#20885
|
| |/ /
|/| | |
|
| | | |
|
|\ \ \
| | | |
| | | | |
Add require to ensure Time#advance works without implicit required
|
| | | |
| | | |
| | | |
| | | | |
required
|
| | | | |
|
| | | | |
|
| | | | |
|
|\ \ \ \
| | | | |
| | | | | |
[ci skip] Add description about which object
|
| | |_|/
| |/| |
| | | |
| | | | |
`ActiveSupport::Notifications.subscribe` expects as second parameter.
|
|/ / /
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | | |
The problem existed where if your ArrayInquirer values were
strings but you checked them using any? with a symbol, it would
not find the value. Now it will correctly check whether both
the String form or the Symbol form are included in the Array.
`
|
| | | |
|