| Commit message (Collapse) | Author | Age | Files | Lines |
... | |
| | | |
| | | |
| | | |
| | | | |
`ruby -ractive_support/core_ext/range/conversions.rb -ep` dies with uninitialized constant ActiveSupport
|
| | | | |
|
| | | |
| | | |
| | | |
| | | | |
a5b0c60714e1e8d8c182af830a26e1c7c884271d
|
| | | |
| | | |
| | | |
| | | | |
in favor of `array.flatten.pack("U*")` and `string.scan(/\X/).map(&:codepoints)`, respectively.
|
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | | |
Use \X meta character directly to get grapheme clusters.
Thanks to @mtsmfm for the tip:
https://github.com/rails/rails/pull/34123#issuecomment-429028878
r? @jeremy
|
|\ \ \ \
| | | | |
| | | | | |
Extend doc for ActiveSupport::Cache#fetch_multi
|
| | | | | |
|
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | | |
In favor of String#is_utf8?.
I think this method was made for internal use only, and its usage was removed here: https://github.com/rails/rails/pull/8261/files#diff-ce956ebe93786930e40f18db1da5fd46L39.
|
| |_|/ /
|/| | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | | |
- Adding a Float as a duration to a datetime would result in the Float
being rounded. Doing something like would have no effect because the
0.45 seconds would be rounded to 0 second.
```ruby
time = DateTime.parse("2018-1-1")
time += 0.45.seconds
```
This behavior was intentionally added a very long time ago, the
reason was because Ruby 1.8 was using `Integer#gcd` in the
constructor of Rational which didn't accept a float value.
That's no longer the case and doing `Rational(0.45, 86400)` would
now perfectly work fine.
- Fixes #34008
|
| | | | |
|
| | | | |
|
| | | |
| | | |
| | | |
| | | | |
Use String methods directly instead.
|
|\ \ \ \
| |_|_|/
|/| | | |
clarify role of unique_id in ActiveSupport::Notifications [ci skip]
|
| | | | |
|
| | | |
| | | |
| | | |
| | | | |
ActiveSupport::ParameterFilter
|
|/ / / |
|
|\ \ \
| | | |
| | | | |
23% faster Nil#try
|
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | | |
is passed:
```ruby
class FooNew
def try(method_name = nil, *args)
nil
end
end
class FooOld
def try(*args)
nil
end
end
require 'benchmark/ips'
foo_new = FooNew.new
foo_old = FooOld.new
Benchmark.ips do |x|
x.report("new") { foo_new.try(:anything) }
x.report("old") { foo_old.try(:anything) }
x.compare!
end
# Warming up --------------------------------------
# new 250.633k i/100ms
# old 232.322k i/100ms
# Calculating -------------------------------------
# new 6.476M (± 4.8%) i/s - 32.332M in 5.005777s
# old 5.258M (± 3.2%) i/s - 26.485M in 5.042589s
# Comparison:
# new: 6476002.5 i/s
# old: 5257912.5 i/s - 1.23x slower
```
It's worth noting that checking for nil separately as in https://github.com/rails/rails/pull/34067 seems to be MUCH faster. It might be worth it to apply a blanket `&.` to every internal `try` call.
|
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | | |
encrypted files (#34014)
* Fix reading comment only encrypted files
When a encrypted file contains only comments then reading that files raises an error:
NoMethodError: undefined method `deep_symbolize_keys' for false:FalseClass
activesupport/lib/active_support/encrypted_configuration.rb:33:in `config'
test/encrypted_configuration_test.rb:52:in `block in <class:EncryptedConfigurationTest>'
This happens because the previous implementation returned a `{}` fallback for blank YAML strings. But it did not handle YAML strings that are present but still do not contain any _usefull_ YAML - like the file created by `Rails::Generators::EncryptedFileGenerator` which looks like this:
# aws:
# access_key_id: 123
# secret_access_key: 345
* Fix coding style violation
* Add backwardscompatible with Psych versions that were shipped with Ruby <2.5
* Do not rely on railties for Active Support test
* Simplify error handling
* Improve test naming
* Simplify file creation in test
|
|\ \ \ \
| | | | |
| | | | | |
Decrease memory allocations in cache.rb
|
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | | |
The `merged_options` method is private and the output is never mutated.
Using this info we can get rid of the `dup` behavior. We can also
eliminate the `merge` call in the case where all the options being merged are the same.
Returned results are frozen as an extra layer of protection against
mutation.
Before
```
Total allocated: 741749 bytes (6642 objects)
```
After
```
Total allocated: 734039 bytes (6648 objects)
```
Diff
```
(741749 - 734039) / 741749.0 => ~ 1.0 %
```
If you don't feel comfortable modifying this method, we could rename it
and only use it internally.
|
|\ \ \ \ \
| | | | | |
| | | | | | |
Fix the LoggerSilence to work as described:
|
| | |_|/ /
| |/| | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | | |
- Following the Rails guide which state that a logger needs to include
the `ActiveSupport::LoggerSilence` as well as
`ActiveSupport::LoggerThreadSafe` modules isn't enough and won't
work.
Here is a test cases with 3 tests that all fails
https://gist.github.com/Edouard-chin/4a72930c2b1eafbbd72a80c66f102010
The problems are the following:
1) The logger needs to call `after_initialize` in order to setup
some instance variables.
2) The silence doesn't actually work because the bare ruby Logger
`add` method checks for the instance variable `@logger`. We need to
override the `add` (like we used to in the ActiveSupport::Logger
class).
3) Calling `debug?` `info?` etc... doesn't work as the bare ruby
methods will check for the instance variable. Again we need to
override this methods (like we used to in the ActiveSupport::Logger
class)
The LoggerSilence won't work without LoggerThreadSafe, but the later
is not public API, the user shouldn't have to include it so I
modified to include it automatically.
Same for the `after_initialize` method. I find unuintitive to have
to call it directly. I modified to instance the variables when the
module get included.
|
|/ / / /
| | | |
| | | |
| | | | |
the document has been disappeared since the method became private at c2bfe6cbc8cab9caeab418472a1e12a3ed3e75e2
|
|\ \ \ \
| | | | |
| | | | |
| | | | | |
Prefix Module#parent, Module#parents, and Module#parent_name with module
|
| | | | | |
|
| | | | | |
|
|/ / / /
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | | |
- I found this weird that the LoggerSilence wasn't using the
`ActiveSupport` namespace (AFAIK all other classes have it).
This PR deprecate the use of `LoggerSilence` for
`ActiveSupport::LoggerSilence` instead.
|
|\ \ \ \
| |_|_|/
|/| | | |
Add deprecation warning when String#first and String#last receive neg…
|
| | | |
| | | |
| | | |
| | | |
| | | |
| | | | |
integers
[Gannon McGibbon + Eric Turner]
|
|\ \ \ \
| | | | |
| | | | | |
Add `Style/RedundantFreeze` to remove redudant `.freeze`
|
| |/ / /
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | | |
Since Rails 6.0 will support Ruby 2.4.1 or higher
`# frozen_string_literal: true` magic comment is enough to make string object frozen.
This magic comment is enabled by `Style/FrozenStringLiteralComment` cop.
* Exclude these files not to auto correct false positive `Regexp#freeze`
- 'actionpack/lib/action_dispatch/journey/router/utils.rb'
- 'activerecord/lib/active_record/connection_adapters/sqlite3_adapter.rb'
It has been fixed by https://github.com/rubocop-hq/rubocop/pull/6333
Once the newer version of RuboCop released and available at Code Climate these exclude entries should be removed.
* Replace `String#freeze` with `String#-@` manually if explicit frozen string objects are required
- 'actionpack/test/controller/test_case_test.rb'
- 'activemodel/test/cases/type/string_test.rb'
- 'activesupport/lib/active_support/core_ext/string/strip.rb'
- 'activesupport/test/core_ext/string_ext_test.rb'
- 'railties/test/generators/actions_test.rb'
|
|/ / / |
|
| | | |
|
| | |
| | |
| | |
| | | |
- LoggerThreadSafeLevel does nowaday since 2518bda97cbbcb33dc9a92e70d5b01c09e64d12d
|
| |/
|/|
| |
| |
| |
| |
| |
| |
| |
| | |
* Handle more unsafe String methods
* Fix codeclimate issue
* Revert stylistic change
[Janosch Müller + Rafael Mendonça França]
|
| | |
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
In Ruby 2.3 or later, `String#+@` is available and `+@` is faster than `dup`.
```ruby
# frozen_string_literal: true
require "bundler/inline"
gemfile(true) do
source "https://rubygems.org"
gem "benchmark-ips"
end
Benchmark.ips do |x|
x.report('+@') { +"" }
x.report('dup') { "".dup }
x.compare!
end
```
```
$ ruby -v benchmark.rb
ruby 2.5.1p57 (2018-03-29 revision 63029) [x86_64-linux]
Warming up --------------------------------------
+@ 282.289k i/100ms
dup 187.638k i/100ms
Calculating -------------------------------------
+@ 6.775M (± 3.6%) i/s - 33.875M in 5.006253s
dup 3.320M (± 2.2%) i/s - 16.700M in 5.032125s
Comparison:
+@: 6775299.3 i/s
dup: 3320400.7 i/s - 2.04x slower
```
|
| |
| |
| |
| |
| | |
- Moving the `supports_cache_versioning?` check to a class method.
- Shorten the method doc.
- Expand on the error message.
|
|/
|
|
|
|
|
|
|
|
|
|
|
|
| |
does not support it
If you are using the "in cache versioning" also known as "recyclable cache keys" the cache store must be aware of this scheme, otherwise you will generate cache entries that never invalidate.
This PR adds a check to the initialization process to ensure that if recyclable cache keys are being used via
```
config.active_record.cache_versioning = true
```
Then the cache store needs to show that it supports this versioning scheme. Cache stores can let Rails know that they support this scheme by adding a method `supports_in_cache_versioning?` and returning true.
|
|\
| |
| | |
Improve API document on Object#blank?
|
| | |
|
| |
| |
| |
| |
| | |
* Introduce `falsey` to represent both `nil` and `false`.
* Keep consistent order between abstract description and examples.
|
| | |
|
|\ \
| | |
| | |
| | | |
TaggedLogging to return a new logger instance
|
| | | |
|
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | | |
The name of the minitest library is spelled that way: regular font, and
lowercase. Lowercase is used even at the beginning of sentences, see
http://docs.seattlerb.org/minitest/
I double-checked this with @zenspider too (thanks!).
|
| | |
| | |
| | |
| | |
| | | |
Followup to a recently merged PR, too minor and detailed to require a
modification to the contributed patch.
|
| | | |
|
| | |
| | |
| | |
| | | |
Closes #32885.
|