| Commit message (Collapse) | Author | Age | Files | Lines |
|
|
| |
`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
|
|\ \ \
| | | |
| | | |
| | | | |
safe_constantize - Added Object scoped missing test cases
|
| | | | |
|
|/ / / |
|
| | | |
|
| | | |
|
|\ \ \
| | | |
| | | | |
[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.
`
|
| | | |
|
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | | |
user passed `options[:delimited_regex]` if available. Changed `DELIMITED_REGEX` to `DEFAULT)DELIMITED_REGEX` to signify what it means.
- Added tests for number to delimited and number to currency in both actionview and activesupport.
Changes
Changes
|
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | | |
When the autoload_paths start to grows, this methods is quite a hotspot
>> ActiveSupport::Dependencies.autoload_paths.size
=> 49
>> Benchmark.ips { |x| x.report('baseline') { ActiveSupport::Dependencies.loadable_constants_for_path(File.expand_path('app/models/shop')) }}
Calculating -------------------------------------
baseline 90.000 i/100ms
-------------------------------------------------
baseline 1.073k (±20.2%) i/s - 4.950k
After the patch
Calculating -------------------------------------
patched 883.000 i/100ms
-------------------------------------------------
patched 11.050k (±19.7%) i/s - 50.331k
|
|\ \ \
| | | |
| | | | |
Removed duplicate require 'minitest/mock'
|
| | | |
| | | |
| | | |
| | | | |
method_call_assertions
|
|/ / / |
|
|\ \ \
| | | |
| | | | |
Initial implementation of ActiveJob AsyncAdapter.
|
| | | | |
|
|\ \ \ \
| |/ / /
|/| | | |
Added docs for TimeWithZone [ci skip]
|
| | | | |
|
| | | |
| | | |
| | | |
| | | |
| | | | |
We have `caller_locations`, so we don't need to parse the strings in the
callstack.
|
| | | | |
|
| | | |
| | | |
| | | | |
`:nail_care:`
|
|\ \ \ \
| | | | |
| | | | |
| | | | |
| | | | | |
Conflicts:
guides/source/security.md
|
| |\ \ \ \
| | | | | |
| | | | | | |
File renaming should be the last operation of an atomic write
|
| | | | | | |
|
| |\ \ \ \ \
| | | | | | |
| | | | | | | |
Correct cache store superclass in comment [ci skip]
|
| | | |/ / /
| | |/| | | |
|
| |\ \ \ \ \
| | |/ / / /
| |/| | | | |
Cleaned up generators tests using internal assertion helper
|
| | |/ / / |
|
| |/ / /
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | | |
The perf gain is relatively minor but consistent:
```
Calculating -------------------------------------
0.zero? 137.091k i/100ms
1.zero? 137.350k i/100ms
0 == 0 142.207k i/100ms
1 == 0 144.724k i/100ms
-------------------------------------------------
0.zero? 8.893M (± 6.5%) i/s - 44.280M
1.zero? 8.751M (± 6.4%) i/s - 43.677M
0 == 0 10.033M (± 7.0%) i/s - 49.915M
1 == 0 9.814M (± 8.0%) i/s - 48.772M
```
And try! is quite a big hotspot for us so every little gain is appreciable.
|
| | | | |
|
| |\ \ \
| | | | |
| | | | | |
Add method_source dependency to activesupport
|
| | | | | |
|
| |\ \ \ \
| | | | | |
| | | | | | |
Added helper methods to stub any instance
|
| | | | | | |
|
| |\ \ \ \ \
| | | | | | |
| | | | | | | |
Assert that the `:prefix` option of `number_to_human_size` is deprecated
|
| | | | | | | |
|
| |\ \ \ \ \ \
| | |/ / / / /
| |/| | | | | |
[ci skip] Documentation: Switch around a common phrase for readability
|
| | | |/ / /
| | |/| | | |
|