ActiveSupport::Concern is used all over Rails
This PR will only create 3 new objects as keys are never recreated and
are not subject to garbage collection.
The strings were being uniquely created and garbage collected. I don't
have any performance numbers but this should be better than all of the
GC.
It is possible under some environments to receive an Exception that is
not extended with Blamable (e.g. JRuby).
ActiveSupport::Dependencies::Loadable#load_dependency blindly call
blame_file! on the exception which throws it's own NoMethodError
exception and hides the original Exception.
This commit fixes#9521
- eval'ed to eval'd in accordance with https://github.com/rails/rails/pull/10889
- tried to improve statement about compiling Procs into methods using define_method
Time.at allows passing a single Time argument which is then converted
to an integer. The conversion code since 1.9.3r429 explicitly checks
for an instance of Time so we need to override it to allow DateTime
and ActiveSupport::TimeWithZone values.
Before this commit, #reject returned a HashWithIndifferentAccess,
whereas #select returned a Hash. Now #select also returns a
HashWithIndifferentAccess.
This reverts commit 8ce3c1e5dde9fb180813e4d89324db03da110b13, reversing
changes made to f93da579ce7f77dbd58b9a2165861aee265b8c93.
Reason: It slow down the running time.
require "diffbench"
load 'output_safety.rb'
N = 10000
b = ActiveSupport::SafeBuffer.new("hello world")
DiffBench.bm do
report "capitalize in safe buffer" do
N.times do
b.capitalize
end
end
end
> git checkout 069ea45; diffbench bench.rb;
diffbench bench.rb;diffbench
bench.rb;diffbench bench.rb;diffbench
bench.rb;diffbench bench.rb;diffbench
bench.rb;
Running benchmark with current working tree
Checkout HEAD^
Running benchmark with HEAD^
Checkout to previous HEAD again
user system total
real
----------------------------------capitalize
in safe buffer
After patch: 0.010000 0.000000 0.010000
( 0.009733)
Before patch: 0.010000 0.000000 0.010000
( 0.007702)
Improvement: -26%
Running benchmark with current working tree
Checkout HEAD^
Running benchmark with HEAD^
Checkout to previous HEAD again
user system total
real
----------------------------------capitalize
in safe buffer
After patch: 0.010000 0.000000 0.010000
( 0.009768)
Before patch: 0.010000 0.000000 0.010000
( 0.007896)
Improvement: -24%
Running benchmark with current working tree
Checkout HEAD^
Running benchmark with HEAD^
Checkout to previous HEAD again
user system total
real
----------------------------------capitalize
in safe buffer
After patch: 0.010000 0.000000 0.010000
( 0.009938)
Before patch: 0.010000 0.000000 0.010000
( 0.007768)
Improvement: -28%
Running benchmark with current working tree
Checkout HEAD^
Running benchmark with HEAD^
Checkout to previous HEAD again
user system total
real
----------------------------------capitalize
in safe buffer
After patch: 0.010000 0.000000 0.010000
( 0.010001)
Before patch: 0.010000 0.000000 0.010000
( 0.007873)
Improvement: -27%
Running benchmark with current working tree
Checkout HEAD^
Running benchmark with HEAD^
Checkout to previous HEAD again
user system total
real
----------------------------------capitalize
in safe buffer
After patch: 0.010000 0.000000 0.010000
( 0.009670)
Before patch: 0.010000 0.000000 0.010000
( 0.007800)
Improvement: -24%
Running benchmark with current working tree
Checkout HEAD^
Running benchmark with HEAD^
Checkout to previous HEAD again
user system total
real
----------------------------------capitalize
in safe buffer
After patch: 0.010000 0.000000 0.010000
( 0.009949)
Before patch: 0.010000 0.000000 0.010000
( 0.007752)
Improvement: -28%
* polymorphic: (41 commits)
fix shadowed variable warnings
polymorphic around callbacks
polymorphic after filter
rename terminal to halting, try to keep naming consistent
push the before filter lambdas to factory methods
polymorphic before callbacks
use a singleton end node
Revert "we never pass blocks, so remove this"
if there is nothing to compile, then do not bother compiling
Arrays are no longer supported
we never pass blocks, so remove this
raise an argument error if the filter arity is greater than 1
pass the actual filter, not a string
do not keep a reference to the chain in the callback objects
fix deprecation test
push merge code to the callback itself
dup the callback and set the chain
remove klass because it is not used
rename instance variables
push duplicates? logic to the instance
...
* master:
extract getting an setting callbacks to methods
call extracted method from callback manipulation methods
extract callback param munging
no reason to make these defaulted, we always pass values in
Conflicts:
activesupport/lib/active_support/callbacks.rb
* master: (61 commits)
add tests for reset_calbacks
Fixing build broken by this change
Extract variable out of loop
Updated comment to Rails 4
Fixes NoMethodError: `alias_method_chain` when requiring just active_support/core_ext
better error message when app name is not passed in `rails new`
Code cleanup for ActionDispatch::Flash#call
Fix typo: require -> requires
Add CHANGELOG entry for #10576
Merge pull request #10556 from Empact/deprecate-schema-statements-distinct
Some editorial changes on the documentation.
respond_to -> respond to in a message from AM::Lint
specify that dom_(id|class) are deprecated in controllers, views are fine
copy edits [ci skip]
Fix class and method name typos
Replace multi_json with json
ruby -> Ruby
Adding documentation to the automatic inverse_of finder.
Improve CHANGELOG entry [ci kip]
Call assume_migrated_upto_version on connection
...
Conflicts:
activesupport/lib/active_support/callbacks.rb
`active_support/inflections` already requires
`active_support/inflector/inflections`. There's no need to require it in
`active_support/inflector/methods`.
U+2028 and U+2029 are allowed inside strings in JSON (as all literal
Unicode characters) but JavaScript defines them as newline
seperators. Because no literal newlines are allowed in a string, this
causes a ParseError in the browser. We work around this issue by
replacing them with the escaped version. The resulting JSON is still
valid and can be parsed in the browser.
This commit has been coauthored with Viktor Kelemen @yikulju
The begin rescue block is specifically to catch LoadError while loading
i18n gem. Other core extensions, under active support, should be
required outside of the begin rescue block.
The previous implementation was quite slow. This leverages some of the
transcoding abilities built into Ruby 1.9 instead. It is roughly 96%
faster.
The roundtrip through UTF_8_MAC here is because ruby won't let you
transcode from UTF_8 to UTF_8. I chose the closest encoding I could
find as an intermediate.
+ Namespace changes, overhaul of runners.
+ Internal ivar name changes
- Removed a logger globally applied to tests that spew everywhere?!?
+ Override Minitest#__run to sort tests by name.
+ Reworked testing isolation to work with the new cleaner architecture.
- Removed a bunch of tests that just test minitest straight up. I think these changes were all merged to minitest 4 a long time ago.
- Minor report output differences.