activesupport 6.0.3.4 → 6.1.0.rc1
Sign up to get free protection for your applications and to get access to all the features.
Potentially problematic release.
This version of activesupport might be problematic. Click here for more details.
- checksums.yaml +4 -4
- data/CHANGELOG.md +339 -474
- data/MIT-LICENSE +1 -1
- data/lib/active_support.rb +13 -1
- data/lib/active_support/array_inquirer.rb +4 -2
- data/lib/active_support/backtrace_cleaner.rb +3 -3
- data/lib/active_support/benchmarkable.rb +1 -1
- data/lib/active_support/cache.rb +80 -39
- data/lib/active_support/cache/file_store.rb +4 -3
- data/lib/active_support/cache/mem_cache_store.rb +21 -14
- data/lib/active_support/cache/memory_store.rb +38 -26
- data/lib/active_support/cache/redis_cache_store.rb +27 -27
- data/lib/active_support/cache/strategy/local_cache.rb +14 -5
- data/lib/active_support/callbacks.rb +65 -56
- data/lib/active_support/concern.rb +46 -2
- data/lib/active_support/configurable.rb +3 -3
- data/lib/active_support/configuration_file.rb +46 -0
- data/lib/active_support/core_ext/benchmark.rb +2 -2
- data/lib/active_support/core_ext/class/attribute.rb +34 -44
- data/lib/active_support/core_ext/class/subclasses.rb +17 -38
- data/lib/active_support/core_ext/date/conversions.rb +2 -1
- data/lib/active_support/core_ext/date_and_time/calculations.rb +13 -0
- data/lib/active_support/core_ext/date_and_time/compatibility.rb +15 -0
- data/lib/active_support/core_ext/enumerable.rb +76 -4
- data/lib/active_support/core_ext/hash/conversions.rb +2 -2
- data/lib/active_support/core_ext/hash/deep_transform_values.rb +1 -1
- data/lib/active_support/core_ext/hash/except.rb +1 -1
- data/lib/active_support/core_ext/hash/keys.rb +1 -1
- data/lib/active_support/core_ext/hash/slice.rb +3 -2
- data/lib/active_support/core_ext/load_error.rb +1 -1
- data/lib/active_support/core_ext/marshal.rb +2 -0
- data/lib/active_support/core_ext/module/attr_internal.rb +2 -2
- data/lib/active_support/core_ext/module/attribute_accessors.rb +23 -29
- data/lib/active_support/core_ext/module/attribute_accessors_per_thread.rb +8 -4
- data/lib/active_support/core_ext/module/concerning.rb +8 -2
- data/lib/active_support/core_ext/module/delegation.rb +38 -28
- data/lib/active_support/core_ext/module/introspection.rb +1 -25
- data/lib/active_support/core_ext/name_error.rb +29 -2
- data/lib/active_support/core_ext/numeric/conversions.rb +22 -18
- data/lib/active_support/core_ext/object/deep_dup.rb +1 -1
- data/lib/active_support/core_ext/object/json.rb +6 -2
- data/lib/active_support/core_ext/object/try.rb +2 -2
- data/lib/active_support/core_ext/range/compare_range.rb +9 -3
- data/lib/active_support/core_ext/range/include_time_with_zone.rb +8 -3
- data/lib/active_support/core_ext/string/access.rb +5 -24
- data/lib/active_support/core_ext/string/inflections.rb +38 -4
- data/lib/active_support/core_ext/string/inquiry.rb +1 -0
- data/lib/active_support/core_ext/string/multibyte.rb +2 -2
- data/lib/active_support/core_ext/string/output_safety.rb +2 -3
- data/lib/active_support/core_ext/string/starts_ends_with.rb +2 -2
- data/lib/active_support/core_ext/symbol.rb +3 -0
- data/lib/active_support/core_ext/symbol/starts_ends_with.rb +14 -0
- data/lib/active_support/core_ext/time/calculations.rb +19 -1
- data/lib/active_support/core_ext/time/conversions.rb +1 -0
- data/lib/active_support/core_ext/uri.rb +5 -1
- data/lib/active_support/current_attributes.rb +7 -2
- data/lib/active_support/current_attributes/test_helper.rb +13 -0
- data/lib/active_support/dependencies.rb +37 -18
- data/lib/active_support/deprecation.rb +6 -1
- data/lib/active_support/deprecation/behaviors.rb +15 -2
- data/lib/active_support/deprecation/disallowed.rb +56 -0
- data/lib/active_support/deprecation/instance_delegator.rb +0 -1
- data/lib/active_support/deprecation/method_wrappers.rb +3 -2
- data/lib/active_support/deprecation/proxy_wrappers.rb +3 -3
- data/lib/active_support/deprecation/reporting.rb +50 -7
- data/lib/active_support/descendants_tracker.rb +6 -2
- data/lib/active_support/duration.rb +71 -22
- data/lib/active_support/duration/iso8601_serializer.rb +15 -9
- data/lib/active_support/encrypted_file.rb +19 -2
- data/lib/active_support/environment_inquirer.rb +20 -0
- data/lib/active_support/evented_file_update_checker.rb +69 -133
- data/lib/active_support/fork_tracker.rb +58 -0
- data/lib/active_support/gem_version.rb +3 -3
- data/lib/active_support/hash_with_indifferent_access.rb +35 -22
- data/lib/active_support/i18n_railtie.rb +14 -19
- data/lib/active_support/inflector/inflections.rb +1 -2
- data/lib/active_support/inflector/methods.rb +35 -31
- data/lib/active_support/inflector/transliterate.rb +4 -4
- data/lib/active_support/json/decoding.rb +4 -4
- data/lib/active_support/json/encoding.rb +5 -1
- data/lib/active_support/key_generator.rb +1 -1
- data/lib/active_support/locale/en.yml +7 -3
- data/lib/active_support/log_subscriber.rb +8 -0
- data/lib/active_support/logger.rb +1 -1
- data/lib/active_support/logger_silence.rb +2 -26
- data/lib/active_support/logger_thread_safe_level.rb +34 -12
- data/lib/active_support/message_encryptor.rb +4 -7
- data/lib/active_support/message_verifier.rb +5 -5
- data/lib/active_support/messages/metadata.rb +9 -1
- data/lib/active_support/messages/rotation_configuration.rb +2 -1
- data/lib/active_support/messages/rotator.rb +6 -5
- data/lib/active_support/multibyte/chars.rb +4 -42
- data/lib/active_support/multibyte/unicode.rb +9 -83
- data/lib/active_support/notifications.rb +31 -4
- data/lib/active_support/notifications/fanout.rb +23 -8
- data/lib/active_support/notifications/instrumenter.rb +6 -15
- data/lib/active_support/number_helper.rb +29 -14
- data/lib/active_support/number_helper/number_converter.rb +1 -1
- data/lib/active_support/number_helper/number_to_currency_converter.rb +3 -7
- data/lib/active_support/number_helper/number_to_human_converter.rb +1 -1
- data/lib/active_support/number_helper/number_to_human_size_converter.rb +1 -1
- data/lib/active_support/number_helper/number_to_rounded_converter.rb +3 -3
- data/lib/active_support/number_helper/rounding_helper.rb +12 -28
- data/lib/active_support/option_merger.rb +3 -2
- data/lib/active_support/ordered_options.rb +8 -2
- data/lib/active_support/parameter_filter.rb +15 -10
- data/lib/active_support/per_thread_registry.rb +1 -1
- data/lib/active_support/rails.rb +1 -4
- data/lib/active_support/railtie.rb +23 -1
- data/lib/active_support/secure_compare_rotator.rb +51 -0
- data/lib/active_support/security_utils.rb +19 -12
- data/lib/active_support/string_inquirer.rb +4 -2
- data/lib/active_support/subscriber.rb +12 -7
- data/lib/active_support/tagged_logging.rb +29 -4
- data/lib/active_support/testing/assertions.rb +18 -11
- data/lib/active_support/testing/parallelization.rb +12 -95
- data/lib/active_support/testing/parallelization/server.rb +78 -0
- data/lib/active_support/testing/parallelization/worker.rb +100 -0
- data/lib/active_support/testing/time_helpers.rb +40 -3
- data/lib/active_support/time_with_zone.rb +66 -42
- data/lib/active_support/values/time_zone.rb +20 -10
- data/lib/active_support/xml_mini/rexml.rb +8 -1
- metadata +38 -40
- data/lib/active_support/core_ext/array/prepend_and_append.rb +0 -5
- data/lib/active_support/core_ext/hash/compact.rb +0 -5
- data/lib/active_support/core_ext/hash/transform_values.rb +0 -5
- data/lib/active_support/core_ext/module/reachable.rb +0 -6
- data/lib/active_support/core_ext/numeric/inquiry.rb +0 -5
- data/lib/active_support/core_ext/range/include_range.rb +0 -9
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 7e3b1535797c76aeec9ce935c778ef87ef0607bf156916734c1b9ad789f4666d
|
4
|
+
data.tar.gz: aaa132d9325b4dcefabe7e4b379a8709cc7cfcdbca7e0a663b63d75e213353c5
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 400e5ad4e88a2c8a82c1514b5c5ac9c30edd0e4fed6b22348ec11ab408db5478dad0dfdc1711e3f70b1a98343071583de1d4ad98cdce1bd7860008c229676d8a
|
7
|
+
data.tar.gz: 2481dadc58812a57876a1d2ed559adeaaba012d144a8e2f7f3076cb51ad7ec2da63224f334d7fdfac8e3dd00fab2c6b8bff8f25efd3622f67a6bcb2f9cd9c674
|
data/CHANGELOG.md
CHANGED
@@ -1,681 +1,546 @@
|
|
1
|
-
## Rails 6.0.
|
1
|
+
## Rails 6.1.0.rc1 (November 02, 2020) ##
|
2
2
|
|
3
|
-
*
|
3
|
+
* Calling `iso8601` on negative durations retains the negative sign on individual
|
4
|
+
digits instead of prepending it.
|
4
5
|
|
6
|
+
This change is required so we can interoperate with PostgreSQL, which prefers
|
7
|
+
negative signs for each component.
|
5
8
|
|
6
|
-
|
7
|
-
|
8
|
-
* No changes.
|
9
|
-
|
10
|
-
|
11
|
-
## Rails 6.0.3.2 (June 17, 2020) ##
|
12
|
-
|
13
|
-
* No changes.
|
14
|
-
|
15
|
-
|
16
|
-
## Rails 6.0.3.1 (May 18, 2020) ##
|
17
|
-
|
18
|
-
* [CVE-2020-8165] Deprecate Marshal.load on raw cache read in RedisCacheStore
|
19
|
-
|
20
|
-
* [CVE-2020-8165] Avoid Marshal.load on raw cache value in MemCacheStore
|
21
|
-
|
22
|
-
## Rails 6.0.3 (May 06, 2020) ##
|
23
|
-
|
24
|
-
* `Array#to_sentence` no longer returns a frozen string.
|
9
|
+
Compatibility with other iso8601 parsers which support leading negatives as well
|
10
|
+
as negatives per component is still retained.
|
25
11
|
|
26
12
|
Before:
|
27
13
|
|
28
|
-
|
29
|
-
# =>
|
14
|
+
(-1.year - 1.day).iso8601
|
15
|
+
# => "-P1Y1D"
|
30
16
|
|
31
17
|
After:
|
32
18
|
|
33
|
-
|
34
|
-
# =>
|
19
|
+
(-1.year - 1.day).iso8601
|
20
|
+
# => "P-1Y-1D"
|
35
21
|
|
36
|
-
*
|
37
|
-
|
38
|
-
* Update `ActiveSupport::Messages::Metadata#fresh?` to work for cookies with expiry set when
|
39
|
-
`ActiveSupport.parse_json_times = true`.
|
40
|
-
|
41
|
-
*Christian Gregg*
|
42
|
-
|
43
|
-
|
44
|
-
## Rails 6.0.2.2 (March 19, 2020) ##
|
45
|
-
|
46
|
-
* No changes.
|
22
|
+
*Vipul A M*
|
47
23
|
|
24
|
+
* Remove deprecated `ActiveSupport::Notifications::Instrumenter#end=`.
|
48
25
|
|
49
|
-
|
50
|
-
|
51
|
-
* No changes.
|
52
|
-
|
53
|
-
|
54
|
-
## Rails 6.0.2 (December 13, 2019) ##
|
55
|
-
|
56
|
-
* Eager load translations during initialization.
|
26
|
+
*Rafael Mendonça França*
|
57
27
|
|
58
|
-
|
28
|
+
* Deprecate `ActiveSupport::Multibyte::Unicode.default_normalization_form`.
|
59
29
|
|
60
|
-
*
|
30
|
+
*Rafael Mendonça França*
|
61
31
|
|
62
|
-
|
32
|
+
* Remove deprecated `ActiveSupport::Multibyte::Unicode.pack_graphemes`,
|
33
|
+
`ActiveSupport::Multibyte::Unicode.unpack_graphemes`,
|
34
|
+
`ActiveSupport::Multibyte::Unicode.normalize`,
|
35
|
+
`ActiveSupport::Multibyte::Unicode.downcase`,
|
36
|
+
`ActiveSupport::Multibyte::Unicode.upcase` and `ActiveSupport::Multibyte::Unicode.swapcase`.
|
63
37
|
|
38
|
+
*Rafael Mendonça França*
|
64
39
|
|
65
|
-
|
40
|
+
* Remove deprecated `ActiveSupport::Multibyte::Chars#consumes?` and `ActiveSupport::Multibyte::Chars#normalize`.
|
66
41
|
|
67
|
-
*
|
42
|
+
*Rafael Mendonça França*
|
68
43
|
|
69
|
-
|
44
|
+
* Remove deprecated file `active_support/core_ext/range/include_range`.
|
70
45
|
|
71
|
-
*
|
72
|
-
of clients reached" error.
|
46
|
+
*Rafael Mendonça França*
|
73
47
|
|
74
|
-
|
48
|
+
* Remove deprecated file `active_support/core_ext/hash/transform_values`.
|
75
49
|
|
76
|
-
*
|
77
|
-
unexpectedly change the cached value.
|
50
|
+
*Rafael Mendonça França*
|
78
51
|
|
79
|
-
|
52
|
+
* Remove deprecated file `active_support/core_ext/hash/compact`.
|
80
53
|
|
81
|
-
*
|
54
|
+
*Rafael Mendonça França*
|
82
55
|
|
83
|
-
|
84
|
-
# config/initializers/zeitwerk.rb
|
85
|
-
Rails.autoloaders.each do |autoloader|
|
86
|
-
autoloader.inflector.inflect(
|
87
|
-
"html_parser" => "HTMLParser",
|
88
|
-
"ssl_error" => "SSLError"
|
89
|
-
)
|
90
|
-
end
|
91
|
-
```
|
56
|
+
* Remove deprecated file `active_support/core_ext/array/prepend_and_append`.
|
92
57
|
|
93
|
-
|
58
|
+
*Rafael Mendonça França*
|
94
59
|
|
95
|
-
|
60
|
+
* Remove deprecated file `active_support/core_ext/numeric/inquiry`.
|
96
61
|
|
97
|
-
*
|
62
|
+
*Rafael Mendonça França*
|
98
63
|
|
99
|
-
*
|
100
|
-
and endless range targets.
|
64
|
+
* Remove deprecated file `active_support/core_ext/module/reachable`.
|
101
65
|
|
102
|
-
*
|
66
|
+
*Rafael Mendonça França*
|
103
67
|
|
104
|
-
*
|
68
|
+
* Remove deprecated `Module#parent_name`, `Module#parent` and `Module#parents`.
|
105
69
|
|
106
|
-
*
|
70
|
+
*Rafael Mendonça França*
|
107
71
|
|
72
|
+
* Remove deprecated `ActiveSupport::LoggerThreadSafeLevel#after_initialize`.
|
108
73
|
|
109
|
-
|
74
|
+
*Rafael Mendonça França*
|
110
75
|
|
111
|
-
*
|
112
|
-
better backwards compatibility.
|
76
|
+
* Remove deprecated `LoggerSilence` constant.
|
113
77
|
|
114
|
-
*
|
78
|
+
*Rafael Mendonça França*
|
115
79
|
|
116
|
-
*
|
117
|
-
to `to_path` for better backwards compatibility.
|
80
|
+
* Remove deprecated fallback to `I18n.default_local` when `config.i18n.fallbacks` is empty.
|
118
81
|
|
119
|
-
*
|
82
|
+
*Rafael Mendonça França*
|
120
83
|
|
121
|
-
*
|
84
|
+
* Remove entries from local cache on `RedisCacheStore#delete_matched`
|
122
85
|
|
123
|
-
|
124
|
-
to make log level local to Ruby Fibers in addition to Threads.
|
86
|
+
Fixes #38627
|
125
87
|
|
126
|
-
|
88
|
+
*ojab*
|
127
89
|
|
128
|
-
|
129
|
-
|
130
|
-
p "Main is debug? #{logger.debug?}"
|
90
|
+
* Speed up `ActiveSupport::SecurityUtils.fixed_length_secure_compare` by using
|
91
|
+
`OpenSSL.fixed_length_secure_compare`, if available.
|
131
92
|
|
132
|
-
|
133
|
-
logger.local_level = 0
|
134
|
-
p "Thread is debug? #{logger.debug?}"
|
135
|
-
}.resume
|
93
|
+
*Nate Matykiewicz*
|
136
94
|
|
137
|
-
|
95
|
+
* `ActiveSupport::Cache::MemCacheStore` now checks `ENV["MEMCACHE_SERVERS"]` before falling back to `"localhost:11211"` if configured without any addresses.
|
138
96
|
|
139
|
-
|
140
|
-
|
141
|
-
Main is debug? false
|
142
|
-
Thread is debug? true
|
143
|
-
Main is debug? true
|
97
|
+
```ruby
|
98
|
+
config.cache_store = :mem_cache_store
|
144
99
|
|
145
|
-
|
100
|
+
# is now equivalent to
|
146
101
|
|
147
|
-
|
148
|
-
Thread is debug? true
|
149
|
-
Main is debug? false
|
102
|
+
config.cache_store = :mem_cache_store, ENV["MEMCACHE_SERVERS"] || "localhost:11211"
|
150
103
|
|
151
|
-
|
104
|
+
# instead of
|
152
105
|
|
153
|
-
|
154
|
-
|
155
|
-
variables when calling `Marshal.dump(object)`, should the delegation target of
|
156
|
-
`object` be a method which would otherwise add them. Fixes #36522.
|
106
|
+
config.cache_store = :mem_cache_store, "localhost:11211" # ignores ENV["MEMCACHE_SERVERS"]
|
107
|
+
```
|
157
108
|
|
158
|
-
*
|
109
|
+
*Sam Bostock*
|
159
110
|
|
111
|
+
* `ActiveSupport::Subscriber#attach_to` now accepts an `inherit_all:` argument. When set to true,
|
112
|
+
it allows a subscriber to receive events for methods defined in the subscriber's ancestor class(es).
|
160
113
|
|
161
|
-
|
114
|
+
```ruby
|
115
|
+
class ActionControllerSubscriber < ActiveSupport::Subscriber
|
116
|
+
attach_to :action_controller
|
162
117
|
|
163
|
-
|
164
|
-
|
165
|
-
|
166
|
-
with `gsub` and `strip`.
|
118
|
+
def start_processing(event)
|
119
|
+
info "Processing by #{event.payload[:controller]}##{event.payload[:action]} as #{format}"
|
120
|
+
end
|
167
121
|
|
168
|
-
|
122
|
+
def redirect_to(event)
|
123
|
+
info { "Redirected to #{event.payload[:location]}" }
|
124
|
+
end
|
125
|
+
end
|
169
126
|
|
170
|
-
|
171
|
-
|
172
|
-
|
173
|
-
# => false
|
127
|
+
# We detach ActionControllerSubscriber from the :action_controller namespace so that our CustomActionControllerSubscriber
|
128
|
+
# can provide its own instrumentation for certain events in the namespace
|
129
|
+
ActionControllerSubscriber.detach_from(:action_controller)
|
174
130
|
|
175
|
-
|
131
|
+
class CustomActionControllerSubscriber < ActionControllerSubscriber
|
132
|
+
attach_to :action_controller, inherit_all: true
|
176
133
|
|
177
|
-
|
178
|
-
|
179
|
-
|
180
|
-
# => false
|
134
|
+
def start_processing(event)
|
135
|
+
info "A custom response to start_processing events"
|
136
|
+
end
|
181
137
|
|
182
|
-
|
138
|
+
# => CustomActionControllerSubscriber will process events for "start_processing.action_controller" notifications
|
139
|
+
# using its own #start_processing implementation, while retaining ActionControllerSubscriber's instrumentation
|
140
|
+
# for "redirect_to.action_controller" notifications
|
141
|
+
end
|
142
|
+
```
|
183
143
|
|
144
|
+
*Adrianna Chang*
|
184
145
|
|
185
|
-
|
146
|
+
* Allow the digest class used to generate non-sensitive digests to be configured with `config.active_support.hash_digest_class`.
|
186
147
|
|
187
|
-
|
148
|
+
`config.active_support.use_sha1_digests` is deprecated in favour of `config.active_support.hash_digest_class = ::Digest::SHA1`.
|
188
149
|
|
189
|
-
|
190
|
-
can help you save time if you have a clear action for the resolution of
|
191
|
-
common development errors.
|
150
|
+
*Dirkjan Bussink*
|
192
151
|
|
193
|
-
|
194
|
-
are found, a middleware raises an error. With actionable errors, you can
|
195
|
-
run the migrations right from the error page. Other examples include Rails
|
196
|
-
plugins that need to run a rake task to setup themselves. They can now
|
197
|
-
raise actionable errors to run the setup straight from the error pages.
|
152
|
+
* Fix bug to make memcached write_entry expire correctly with unless_exist
|
198
153
|
|
199
|
-
|
154
|
+
*Jye Lee*
|
200
155
|
|
201
|
-
|
202
|
-
class PendingMigrationError < MigrationError #:nodoc:
|
203
|
-
include ActiveSupport::ActionableError
|
156
|
+
* Add `ActiveSupport::Duration` conversion methods
|
204
157
|
|
205
|
-
|
206
|
-
ActiveRecord::Tasks::DatabaseTasks.migrate
|
207
|
-
end
|
208
|
-
end
|
209
|
-
```
|
158
|
+
`in_seconds`, `in_minutes`, `in_hours`, `in_days`, `in_weeks`, `in_months`, and `in_years` return the respective duration covered.
|
210
159
|
|
211
|
-
|
212
|
-
module and invoke the `action` class macro to define the action. An action
|
213
|
-
needs a name and a procedure to execute. The name is shown as the name of a
|
214
|
-
button on the error pages. Once clicked, it will invoke the given
|
215
|
-
procedure.
|
160
|
+
*Jason York*
|
216
161
|
|
217
|
-
|
162
|
+
* Fixed issue in `ActiveSupport::Cache::RedisCacheStore` not passing options
|
163
|
+
to `read_multi` causing `fetch_multi` to not work properly
|
218
164
|
|
219
|
-
*
|
165
|
+
*Rajesh Sharma*
|
220
166
|
|
221
|
-
|
167
|
+
* Fixed issue in `ActiveSupport::Cache::MemCacheStore` which caused duplicate compression,
|
168
|
+
and caused the provided `compression_threshold` to not be respected.
|
222
169
|
|
223
|
-
|
170
|
+
*Max Gurewitz*
|
224
171
|
|
225
|
-
|
172
|
+
* Prevent `RedisCacheStore` and `MemCacheStore` from performing compression
|
173
|
+
when reading entries written with `raw: true`.
|
226
174
|
|
227
|
-
|
175
|
+
*Max Gurewitz*
|
228
176
|
|
229
|
-
|
177
|
+
* `URI.parser` is deprecated and will be removed in Rails 6.2. Use
|
178
|
+
`URI::DEFAULT_PARSER` instead.
|
230
179
|
|
231
|
-
*
|
232
|
-
plugin to work.
|
180
|
+
*Jean Boussier*
|
233
181
|
|
234
|
-
|
182
|
+
* `require_dependency` has been documented to be _obsolete_ in `:zeitwerk`
|
183
|
+
mode. The method is not deprecated as such (yet), but applications are
|
184
|
+
encouraged to not use it.
|
235
185
|
|
236
|
-
|
237
|
-
|
238
|
-
|
239
|
-
troubleshooting is done by logging. With this design trade-off we are able
|
240
|
-
to use even less memory in all environments.
|
186
|
+
In `:zeitwerk` mode, semantics match Ruby's and you do not need to be
|
187
|
+
defensive with load order. Just refer to classes and modules normally. If
|
188
|
+
the constant name is dynamic, camelize if needed, and constantize.
|
241
189
|
|
242
190
|
*Xavier Noria*
|
243
191
|
|
244
|
-
*
|
245
|
-
and hence uses less memory when `config.cache_classes` is `true`, a standard
|
246
|
-
setup in production.
|
192
|
+
* Add 3rd person aliases of `Symbol#start_with?` and `Symbol#end_with?`.
|
247
193
|
|
248
|
-
|
194
|
+
```ruby
|
195
|
+
:foo.starts_with?("f") # => true
|
196
|
+
:foo.ends_with?("o") # => true
|
197
|
+
```
|
249
198
|
|
250
|
-
*
|
251
|
-
if present in their respective `config.eager_load_paths`.
|
199
|
+
*Ryuta Kamizono*
|
252
200
|
|
253
|
-
|
254
|
-
not to `config.eager_load_paths`. In that configuration, for example, files
|
255
|
-
in the `lib` directory should not be eager loaded.
|
201
|
+
* Add override of unary plus for `ActiveSupport::Duration`.
|
256
202
|
|
257
|
-
|
258
|
-
|
259
|
-
* Fix bug in Range comparisons when comparing to an excluded-end Range
|
203
|
+
`+ 1.second` is now identical to `+1.second` to prevent errors
|
204
|
+
where a seemingly innocent change of formatting leads to a change in the code behavior.
|
260
205
|
|
261
206
|
Before:
|
262
|
-
|
263
|
-
|
207
|
+
```ruby
|
208
|
+
+1.second.class
|
209
|
+
# => ActiveSupport::Duration
|
210
|
+
(+ 1.second).class
|
211
|
+
# => Integer
|
212
|
+
```
|
264
213
|
|
265
214
|
After:
|
215
|
+
```ruby
|
216
|
+
+1.second.class
|
217
|
+
# => ActiveSupport::Duration
|
218
|
+
(+ 1.second).class
|
219
|
+
# => ActiveSupport::Duration
|
220
|
+
```
|
266
221
|
|
267
|
-
|
268
|
-
|
269
|
-
With the same change for `Range#include?` and `Range#===`.
|
270
|
-
|
271
|
-
*Owen Stephens*
|
272
|
-
|
273
|
-
* Use weak references in descendants tracker to allow anonymous subclasses to
|
274
|
-
be garbage collected.
|
275
|
-
|
276
|
-
*Edgars Beigarts*
|
277
|
-
|
278
|
-
* Update `ActiveSupport::Notifications::Instrumenter#instrument` to make
|
279
|
-
passing a block optional. This will let users use
|
280
|
-
`ActiveSupport::Notifications` messaging features outside of
|
281
|
-
instrumentation.
|
222
|
+
Fixes #39079.
|
282
223
|
|
283
|
-
*
|
224
|
+
*Roman Kushnir*
|
284
225
|
|
285
|
-
*
|
226
|
+
* Add subsec to `ActiveSupport::TimeWithZone#inspect`.
|
286
227
|
|
287
228
|
Before:
|
288
229
|
|
289
|
-
Time.
|
290
|
-
|
291
|
-
|
292
|
-
|
293
|
-
Time.
|
294
|
-
|
295
|
-
Note that this doesn't affect `DateTime#advance` as that doesn't use a proleptic calendar.
|
296
|
-
|
297
|
-
*Andrew White*
|
298
|
-
|
299
|
-
* In Zeitwerk mode, engines are now managed by the `main` autoloader. Engines may reference application constants, if the application is reloaded and we do not reload engines, they won't use the reloaded application code.
|
300
|
-
|
301
|
-
*Xavier Noria*
|
302
|
-
|
303
|
-
* Add support for supplying `locale` to `transliterate` and `parameterize`.
|
304
|
-
|
305
|
-
I18n.backend.store_translations(:de, i18n: { transliterate: { rule: { "ü" => "ue" } } })
|
306
|
-
|
307
|
-
ActiveSupport::Inflector.transliterate("ü", locale: :de) # => "ue"
|
308
|
-
"Fünf autos".parameterize(locale: :de) # => "fuenf-autos"
|
309
|
-
ActiveSupport::Inflector.parameterize("Fünf autos", locale: :de) # => "fuenf-autos"
|
310
|
-
|
311
|
-
*Kaan Ozkan*, *Sharang Dashputre*
|
312
|
-
|
313
|
-
* Allow `Array#excluding` and `Enumerable#excluding` to deal with a passed array gracefully.
|
314
|
-
|
315
|
-
[ 1, 2, 3, 4, 5 ].excluding([4, 5]) # => [ 1, 2, 3 ]
|
316
|
-
|
317
|
-
*DHH*
|
318
|
-
|
319
|
-
* Renamed `Array#without` and `Enumerable#without` to `Array#excluding` and `Enumerable#excluding`, to create parity with
|
320
|
-
`Array#including` and `Enumerable#including`. Retained the old names as aliases.
|
321
|
-
|
322
|
-
*DHH*
|
323
|
-
|
324
|
-
* Added `Array#including` and `Enumerable#including` to conveniently enlarge a collection with more members using a method rather than an operator:
|
325
|
-
|
326
|
-
[ 1, 2, 3 ].including(4, 5) # => [ 1, 2, 3, 4, 5 ]
|
327
|
-
post.authors.including(Current.person) # => All the authors plus the current person!
|
328
|
-
|
329
|
-
*DHH*
|
330
|
-
|
331
|
-
|
332
|
-
## Rails 6.0.0.beta3 (March 11, 2019) ##
|
333
|
-
|
334
|
-
* No changes.
|
335
|
-
|
230
|
+
Time.at(1498099140).in_time_zone.inspect
|
231
|
+
# => "Thu, 22 Jun 2017 02:39:00 UTC +00:00"
|
232
|
+
Time.at(1498099140, 123456780, :nsec).in_time_zone.inspect
|
233
|
+
# => "Thu, 22 Jun 2017 02:39:00 UTC +00:00"
|
234
|
+
Time.at(1498099140 + Rational("1/3")).in_time_zone.inspect
|
235
|
+
# => "Thu, 22 Jun 2017 02:39:00 UTC +00:00"
|
336
236
|
|
337
|
-
|
338
|
-
|
339
|
-
* New autoloading based on [Zeitwerk](https://github.com/fxn/zeitwerk).
|
340
|
-
|
341
|
-
*Xavier Noria*
|
342
|
-
|
343
|
-
* Revise `ActiveSupport::Notifications.unsubscribe` to correctly handle Regex or other multiple-pattern subscribers.
|
344
|
-
|
345
|
-
*Zach Kemp*
|
346
|
-
|
347
|
-
* Add `before_reset` callback to `CurrentAttributes` and define `after_reset` as an alias of `resets` for symmetry.
|
348
|
-
|
349
|
-
*Rosa Gutierrez*
|
350
|
-
|
351
|
-
* Remove the `` Kernel#` `` override that suppresses ENOENT and accidentally returns nil on Unix systems.
|
352
|
-
|
353
|
-
*Akinori Musha*
|
354
|
-
|
355
|
-
* Add `ActiveSupport::HashWithIndifferentAccess#assoc`.
|
356
|
-
|
357
|
-
`assoc` can now be called with either a string or a symbol.
|
358
|
-
|
359
|
-
*Stefan Schüßler*
|
237
|
+
After:
|
360
238
|
|
361
|
-
|
239
|
+
Time.at(1498099140).in_time_zone.inspect
|
240
|
+
# => "Thu, 22 Jun 2017 02:39:00.000000000 UTC +00:00"
|
241
|
+
Time.at(1498099140, 123456780, :nsec).in_time_zone.inspect
|
242
|
+
# => "Thu, 22 Jun 2017 02:39:00.123456780 UTC +00:00"
|
243
|
+
Time.at(1498099140 + Rational("1/3")).in_time_zone.inspect
|
244
|
+
# => "Thu, 22 Jun 2017 02:39:00.333333333 UTC +00:00"
|
362
245
|
|
363
|
-
*
|
246
|
+
*akinomaeni*
|
364
247
|
|
248
|
+
* Calling `ActiveSupport::TaggedLogging#tagged` without a block now returns a tagged logger.
|
365
249
|
|
366
|
-
|
250
|
+
```ruby
|
251
|
+
logger.tagged("BCX").info("Funky time!") # => [BCX] Funky time!
|
252
|
+
```
|
367
253
|
|
368
|
-
*
|
254
|
+
*Eugene Kenny*
|
369
255
|
|
370
|
-
|
256
|
+
* Align `Range#cover?` extension behavior with Ruby behavior for backwards ranges.
|
371
257
|
|
372
|
-
|
258
|
+
`(1..10).cover?(5..3)` now returns `false`, as it does in plain Ruby.
|
373
259
|
|
374
|
-
|
260
|
+
Also update `#include?` and `#===` behavior to match.
|
375
261
|
|
376
|
-
*
|
262
|
+
*Michael Groeneman*
|
377
263
|
|
378
|
-
|
264
|
+
* Update to TZInfo v2.0.0.
|
379
265
|
|
380
|
-
|
266
|
+
This changes the output of `ActiveSupport::TimeZone.utc_to_local`, but
|
267
|
+
can be controlled with the
|
268
|
+
`ActiveSupport.utc_to_local_returns_utc_offset_times` config.
|
381
269
|
|
382
|
-
|
270
|
+
New Rails 6.1 apps have it enabled by default, existing apps can upgrade
|
271
|
+
via the config in config/initializers/new_framework_defaults_6_1.rb
|
383
272
|
|
384
|
-
|
273
|
+
See the `utc_to_local_returns_utc_offset_times` documentation for details.
|
385
274
|
|
386
|
-
*
|
275
|
+
*Phil Ross*, *Jared Beck*
|
387
276
|
|
388
|
-
|
277
|
+
* Add Date and Time `#yesterday?` and `#tomorrow?` alongside `#today?`.
|
389
278
|
|
390
|
-
|
391
|
-
would not act as alias for `#symbolize_keys`.
|
279
|
+
Aliased to `#prev_day?` and `#next_day?` to match the existing `#prev/next_day` methods.
|
392
280
|
|
393
|
-
*
|
281
|
+
*Jatin Dhankhar*
|
394
282
|
|
395
|
-
*
|
283
|
+
* Add `Enumerable#pick` to complement `ActiveRecord::Relation#pick`.
|
396
284
|
|
397
|
-
*
|
285
|
+
*Eugene Kenny*
|
398
286
|
|
399
|
-
*
|
400
|
-
in favor of `array.flatten.pack("U*")` and `string.scan(/\X/).map(&:codepoints)`, respectively.
|
287
|
+
* [Breaking change] `ActiveSupport::Callbacks#halted_callback_hook` now receive a 2nd argument:
|
401
288
|
|
402
|
-
|
289
|
+
`ActiveSupport::Callbacks#halted_callback_hook` now receive the name of the callback
|
290
|
+
being halted as second argument.
|
291
|
+
This change will allow you to differentiate which callbacks halted the chain
|
292
|
+
and act accordingly.
|
403
293
|
|
404
|
-
|
294
|
+
```ruby
|
295
|
+
class Book < ApplicationRecord
|
296
|
+
before_save { throw(:abort) }
|
297
|
+
before_create { throw(:abort) }
|
405
298
|
|
406
|
-
|
299
|
+
def halted_callback_hook(filter, callback_name)
|
300
|
+
Rails.logger.info("Book couldn't be #{callback_name}d")
|
301
|
+
end
|
407
302
|
|
408
|
-
|
409
|
-
|
410
|
-
|
411
|
-
time += 0.51.seconds
|
303
|
+
Book.create # => "Book couldn't be created"
|
304
|
+
book.save # => "Book couldn't be saved"
|
305
|
+
end
|
412
306
|
```
|
413
|
-
Will now correctly add 0.51 second and not 1 full second.
|
414
307
|
|
415
308
|
*Edouard Chin*
|
416
309
|
|
417
|
-
*
|
418
|
-
in favor of `String#unicode_normalize`
|
419
|
-
|
420
|
-
*Francesco Rodríguez*
|
421
|
-
|
422
|
-
* Deprecate `ActiveSupport::Multibyte::Unicode#downcase/upcase/swapcase` in favor of
|
423
|
-
`String#downcase/upcase/swapcase`.
|
424
|
-
|
425
|
-
*Francesco Rodríguez*
|
426
|
-
|
427
|
-
* Add `ActiveSupport::ParameterFilter`.
|
428
|
-
|
429
|
-
*Yoshiyuki Kinjo*
|
430
|
-
|
431
|
-
* Rename `Module#parent`, `Module#parents`, and `Module#parent_name` to
|
432
|
-
`module_parent`, `module_parents`, and `module_parent_name`.
|
433
|
-
|
434
|
-
*Gannon McGibbon*
|
435
|
-
|
436
|
-
* Deprecate the use of `LoggerSilence` in favor of `ActiveSupport::LoggerSilence`
|
437
|
-
|
438
|
-
*Edouard Chin*
|
310
|
+
* Support `prepend` with `ActiveSupport::Concern`.
|
439
311
|
|
440
|
-
|
312
|
+
Allows a module with `extend ActiveSupport::Concern` to be prepended.
|
441
313
|
|
442
|
-
|
314
|
+
module Imposter
|
315
|
+
extend ActiveSupport::Concern
|
443
316
|
|
444
|
-
|
445
|
-
|
446
|
-
|
447
|
-
|
448
|
-
|
449
|
-
* Treat `#delete_prefix`, `#delete_suffix` and `#unicode_normalize` results as non-`html_safe`.
|
450
|
-
Ensure safety of arguments for `#insert`, `#[]=` and `#replace` calls on `html_safe` Strings.
|
451
|
-
|
452
|
-
*Janosch Müller*
|
453
|
-
|
454
|
-
* Changed `ActiveSupport::TaggedLogging.new` to return a new logger instance instead
|
455
|
-
of mutating the one received as parameter.
|
456
|
-
|
457
|
-
*Thierry Joyal*
|
458
|
-
|
459
|
-
* Define `unfreeze_time` as an alias of `travel_back` in `ActiveSupport::Testing::TimeHelpers`.
|
317
|
+
# Same as `included`, except only run when prepended.
|
318
|
+
prepended do
|
319
|
+
end
|
320
|
+
end
|
460
321
|
|
461
|
-
|
322
|
+
class Person
|
323
|
+
prepend Imposter
|
324
|
+
end
|
462
325
|
|
463
|
-
|
326
|
+
Class methods are prepended to the base class, concerning is also
|
327
|
+
updated: `concerning :Imposter, prepend: true do`.
|
464
328
|
|
465
|
-
*
|
329
|
+
*Jason Karns*, *Elia Schito*
|
466
330
|
|
467
|
-
|
468
|
-
|
331
|
+
* Deprecate using `Range#include?` method to check the inclusion of a value
|
332
|
+
in a date time range. It is recommended to use `Range#cover?` method
|
333
|
+
instead of `Range#include?` to check the inclusion of a value
|
334
|
+
in a date time range.
|
469
335
|
|
470
|
-
|
336
|
+
*Vishal Telangre*
|
471
337
|
|
472
|
-
|
338
|
+
* Support added for a `round_mode` parameter, in all number helpers. (See: `BigDecimal::mode`.)
|
473
339
|
|
474
|
-
|
340
|
+
```ruby
|
341
|
+
number_to_currency(1234567890.50, precision: 0, round_mode: :half_down) # => "$1,234,567,890"
|
342
|
+
number_to_percentage(302.24398923423, precision: 5, round_mode: :down) # => "302.24398%"
|
343
|
+
number_to_rounded(389.32314, precision: 0, round_mode: :ceil) # => "390"
|
344
|
+
number_to_human_size(483989, precision: 2, round_mode: :up) # => "480 KB"
|
345
|
+
number_to_human(489939, precision: 2, round_mode: :floor) # => "480 Thousand"
|
475
346
|
|
476
|
-
|
477
|
-
|
347
|
+
485000.to_s(:human, precision: 2, round_mode: :half_even) # => "480 Thousand"
|
348
|
+
```
|
478
349
|
|
479
|
-
*
|
350
|
+
*Tom Lord*
|
480
351
|
|
481
|
-
*
|
352
|
+
* `Array#to_sentence` no longer returns a frozen string.
|
482
353
|
|
483
|
-
|
484
|
-
If no block is given, an Enumerator is returned instead.
|
354
|
+
Before:
|
485
355
|
|
486
|
-
|
487
|
-
|
488
|
-
numbers # => [0, 2, 4, 6, 8]
|
356
|
+
['one', 'two'].to_sentence.frozen?
|
357
|
+
# => true
|
489
358
|
|
490
|
-
|
359
|
+
After:
|
491
360
|
|
492
|
-
|
361
|
+
['one', 'two'].to_sentence.frozen?
|
362
|
+
# => false
|
493
363
|
|
494
|
-
|
495
|
-
cache.exist?('bar') # => false
|
364
|
+
*Nicolas Dular*
|
496
365
|
|
497
|
-
|
366
|
+
* When an instance of `ActiveSupport::Duration` is converted to an `iso8601` duration string, if `weeks` are mixed with `date` parts, the `week` part will be converted to days.
|
367
|
+
This keeps the parser and serializer on the same page.
|
498
368
|
|
499
|
-
|
500
|
-
|
501
|
-
|
369
|
+
```ruby
|
370
|
+
duration = ActiveSupport::Duration.build(1000000)
|
371
|
+
# 1 week, 4 days, 13 hours, 46 minutes, and 40.0 seconds
|
502
372
|
|
503
|
-
|
504
|
-
|
505
|
-
end
|
373
|
+
duration_iso = duration.iso8601
|
374
|
+
# P11DT13H46M40S
|
506
375
|
|
507
|
-
|
508
|
-
|
509
|
-
end
|
376
|
+
ActiveSupport::Duration.parse(duration_iso)
|
377
|
+
# 11 days, 13 hours, 46 minutes, and 40 seconds
|
510
378
|
|
511
|
-
|
379
|
+
duration = ActiveSupport::Duration.build(604800)
|
380
|
+
# 1 week
|
512
381
|
|
513
|
-
|
514
|
-
|
515
|
-
end users are no longer required to make their own:
|
382
|
+
duration_iso = duration.iso8601
|
383
|
+
# P1W
|
516
384
|
|
517
|
-
|
518
|
-
|
519
|
-
|
385
|
+
ActiveSupport::Duration.parse(duration_iso)
|
386
|
+
# 1 week
|
387
|
+
```
|
520
388
|
|
521
|
-
|
522
|
-
sleep 1
|
523
|
-
end
|
389
|
+
*Abhishek Sarkar*
|
524
390
|
|
525
|
-
|
526
|
-
p @event.cpu_time # => 0.256
|
527
|
-
p @event.idle_time # => 1003.2399
|
391
|
+
* Add block support to `ActiveSupport::Testing::TimeHelpers#travel_back`.
|
528
392
|
|
529
|
-
|
393
|
+
*Tim Masliuchenko*
|
530
394
|
|
531
|
-
|
395
|
+
* Update `ActiveSupport::Messages::Metadata#fresh?` to work for cookies with expiry set when
|
396
|
+
`ActiveSupport.parse_json_times = true`.
|
532
397
|
|
533
|
-
*
|
398
|
+
*Christian Gregg*
|
534
399
|
|
535
|
-
|
400
|
+
* Support symbolic links for `content_path` in `ActiveSupport::EncryptedFile`.
|
536
401
|
|
537
|
-
*
|
402
|
+
*Takumi Shotoku*
|
538
403
|
|
539
|
-
|
404
|
+
* Improve `Range#===`, `Range#include?`, and `Range#cover?` to work with beginless (startless)
|
405
|
+
and endless range targets.
|
540
406
|
|
541
|
-
|
407
|
+
*Allen Hsu*, *Andrew Hodgkinson*
|
542
408
|
|
543
|
-
|
409
|
+
* Don't use `Process#clock_gettime(CLOCK_THREAD_CPUTIME_ID)` on Solaris.
|
544
410
|
|
545
|
-
*
|
411
|
+
*Iain Beeston*
|
546
412
|
|
547
|
-
*
|
413
|
+
* Prevent `ActiveSupport::Duration.build(value)` from creating instances of
|
414
|
+
`ActiveSupport::Duration` unless `value` is of type `Numeric`.
|
548
415
|
|
549
|
-
|
550
|
-
`
|
551
|
-
|
416
|
+
Addresses the errant set of behaviours described in #37012 where
|
417
|
+
`ActiveSupport::Duration` comparisons would fail confusingly
|
418
|
+
or return unexpected results when comparing durations built from instances of `String`.
|
552
419
|
|
553
|
-
|
554
|
-
*Use `require "active_support/core_ext/range/compare_range"` instead.*
|
420
|
+
Before:
|
555
421
|
|
556
|
-
|
422
|
+
small_duration_from_string = ActiveSupport::Duration.build('9')
|
423
|
+
large_duration_from_string = ActiveSupport::Duration.build('100000000000000')
|
424
|
+
small_duration_from_int = ActiveSupport::Duration.build(9)
|
557
425
|
|
558
|
-
|
426
|
+
large_duration_from_string > small_duration_from_string
|
427
|
+
# => false
|
559
428
|
|
560
|
-
|
561
|
-
|
429
|
+
small_duration_from_string == small_duration_from_int
|
430
|
+
# => false
|
562
431
|
|
563
|
-
|
564
|
-
# =>
|
432
|
+
small_duration_from_int < large_duration_from_string
|
433
|
+
# => ArgumentError (comparison of ActiveSupport::Duration::Scalar with ActiveSupport::Duration failed)
|
565
434
|
|
566
|
-
|
567
|
-
# =>
|
435
|
+
large_duration_from_string > small_duration_from_int
|
436
|
+
# => ArgumentError (comparison of String with ActiveSupport::Duration failed)
|
568
437
|
|
569
|
-
|
438
|
+
After:
|
570
439
|
|
571
|
-
|
440
|
+
small_duration_from_string = ActiveSupport::Duration.build('9')
|
441
|
+
# => TypeError (can't build an ActiveSupport::Duration from a String)
|
572
442
|
|
573
|
-
*
|
574
|
-
any timezone defined in `ActiveSupport::TimeZone::MAPPING` is missing.
|
443
|
+
*Alexei Emam*
|
575
444
|
|
576
|
-
|
445
|
+
* Add `ActiveSupport::Cache::Store#delete_multi` method to delete multiple keys from the cache store.
|
577
446
|
|
578
|
-
*
|
579
|
-
(Switches from evaled Lua to a batched SCAN + DEL loop.)
|
447
|
+
*Peter Zhu*
|
580
448
|
|
581
|
-
|
449
|
+
* Support multiple arguments in `HashWithIndifferentAccess` for `merge` and `update` methods, to
|
450
|
+
follow Ruby 2.6 addition.
|
582
451
|
|
583
|
-
*
|
584
|
-
size when compression is enabled (which is true by default). This patch
|
585
|
-
does not attempt to repair existing data: please manually flush the cache
|
586
|
-
to clear out the problematic entries.
|
452
|
+
*Wojciech Wnętrzak*
|
587
453
|
|
588
|
-
|
454
|
+
* Allow initializing `thread_mattr_*` attributes via `:default` option.
|
589
455
|
|
590
|
-
|
456
|
+
class Scraper
|
457
|
+
thread_mattr_reader :client, default: Api::Client.new
|
458
|
+
end
|
591
459
|
|
592
|
-
|
593
|
-
URI.unescape("%E3%83%90") # => "バ"
|
594
|
-
URI.unescape("\xe3\x83\x90%E3%83%90") # => Encoding::CompatibilityError
|
460
|
+
*Guilherme Mansur*
|
595
461
|
|
596
|
-
|
462
|
+
* Add `compact_blank` for those times when you want to remove #blank? values from
|
463
|
+
an Enumerable (also `compact_blank!` on Hash, Array, ActionController::Parameters).
|
597
464
|
|
598
|
-
*
|
599
|
-
`Time`, and `TimeWithZone`.
|
465
|
+
*Dana Sherson*
|
600
466
|
|
601
|
-
|
467
|
+
* Make ActiveSupport::Logger Fiber-safe.
|
602
468
|
|
603
|
-
|
604
|
-
|
469
|
+
Use `Fiber.current.__id__` in `ActiveSupport::Logger#local_level=` in order
|
470
|
+
to make log level local to Ruby Fibers in addition to Threads.
|
605
471
|
|
606
|
-
|
472
|
+
Example:
|
607
473
|
|
608
|
-
|
609
|
-
|
610
|
-
|
611
|
-
nth: {
|
612
|
-
ordinals: lambda do |_key, number:, **_options|
|
613
|
-
if number.to_i.abs == 1
|
614
|
-
'er'
|
615
|
-
else
|
616
|
-
'e'
|
617
|
-
end
|
618
|
-
end,
|
474
|
+
logger = ActiveSupport::Logger.new(STDOUT)
|
475
|
+
logger.level = 1
|
476
|
+
puts "Main is debug? #{logger.debug?}"
|
619
477
|
|
620
|
-
|
621
|
-
|
622
|
-
|
623
|
-
|
624
|
-
}
|
625
|
-
}
|
626
|
-
}
|
478
|
+
Fiber.new {
|
479
|
+
logger.local_level = 0
|
480
|
+
puts "Thread is debug? #{logger.debug?}"
|
481
|
+
}.resume
|
627
482
|
|
483
|
+
puts "Main is debug? #{logger.debug?}"
|
628
484
|
|
629
|
-
|
485
|
+
Before:
|
630
486
|
|
631
|
-
|
632
|
-
|
487
|
+
Main is debug? false
|
488
|
+
Thread is debug? true
|
489
|
+
Main is debug? true
|
633
490
|
|
634
|
-
|
635
|
-
has_one :profile
|
636
|
-
delegate :date_of_birth, to: :profile, private: true
|
491
|
+
After:
|
637
492
|
|
638
|
-
|
639
|
-
|
640
|
-
|
641
|
-
end
|
493
|
+
Main is debug? false
|
494
|
+
Thread is debug? true
|
495
|
+
Main is debug? false
|
642
496
|
|
643
|
-
|
644
|
-
# User.new.date_of_birth
|
645
|
-
# => NoMethodError: private method `date_of_birth' called for #<User:0x00000008221340>
|
497
|
+
Fixes #36752.
|
646
498
|
|
647
|
-
*
|
499
|
+
*Alexander Varnin*
|
648
500
|
|
649
|
-
* `
|
650
|
-
|
501
|
+
* Allow the `on_rotation` proc used when decrypting/verifying a message to be
|
502
|
+
passed at the constructor level.
|
651
503
|
|
652
|
-
|
504
|
+
Before:
|
653
505
|
|
654
|
-
|
506
|
+
crypt = ActiveSupport::MessageEncryptor.new('long_secret')
|
507
|
+
crypt.decrypt_and_verify(encrypted_message, on_rotation: proc { ... })
|
508
|
+
crypt.decrypt_and_verify(another_encrypted_message, on_rotation: proc { ... })
|
655
509
|
|
656
|
-
|
510
|
+
After:
|
657
511
|
|
658
|
-
|
512
|
+
crypt = ActiveSupport::MessageEncryptor.new('long_secret', on_rotation: proc { ... })
|
513
|
+
crypt.decrypt_and_verify(encrypted_message)
|
514
|
+
crypt.decrypt_and_verify(another_encrypted_message)
|
659
515
|
|
660
|
-
|
516
|
+
*Edouard Chin*
|
661
517
|
|
662
|
-
|
663
|
-
|
664
|
-
|
518
|
+
* `delegate_missing_to` would raise a `DelegationError` if the object
|
519
|
+
delegated to was `nil`. Now the `allow_nil` option has been added to enable
|
520
|
+
the user to specify they want `nil` returned in this case.
|
665
521
|
|
666
|
-
|
522
|
+
*Matthew Tanous*
|
667
523
|
|
668
|
-
|
524
|
+
* `truncate` would return the original string if it was too short to be truncated
|
525
|
+
and a frozen string if it were long enough to be truncated. Now truncate will
|
526
|
+
consistently return an unfrozen string regardless. This behavior is consistent
|
527
|
+
with `gsub` and `strip`.
|
669
528
|
|
670
|
-
|
529
|
+
Before:
|
671
530
|
|
672
|
-
|
531
|
+
'foobar'.truncate(5).frozen?
|
532
|
+
# => true
|
533
|
+
'foobar'.truncate(6).frozen?
|
534
|
+
# => false
|
673
535
|
|
674
|
-
|
536
|
+
After:
|
675
537
|
|
676
|
-
|
538
|
+
'foobar'.truncate(5).frozen?
|
539
|
+
# => false
|
540
|
+
'foobar'.truncate(6).frozen?
|
541
|
+
# => false
|
677
542
|
|
678
|
-
*
|
543
|
+
*Jordan Thomas*
|
679
544
|
|
680
545
|
|
681
|
-
Please check [
|
546
|
+
Please check [6-0-stable](https://github.com/rails/rails/blob/6-0-stable/activesupport/CHANGELOG.md) for previous changes.
|