activesupport 7.2.1.1 → 8.0.0.rc1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +64 -201
- data/lib/active_support/backtrace_cleaner.rb +1 -1
- data/lib/active_support/benchmark.rb +21 -0
- data/lib/active_support/benchmarkable.rb +3 -2
- data/lib/active_support/broadcast_logger.rb +14 -14
- data/lib/active_support/cache/file_store.rb +12 -2
- data/lib/active_support/cache/memory_store.rb +6 -2
- data/lib/active_support/cache/redis_cache_store.rb +5 -2
- data/lib/active_support/cache.rb +16 -11
- data/lib/active_support/callbacks.rb +1 -2
- data/lib/active_support/class_attribute.rb +26 -0
- data/lib/active_support/code_generator.rb +9 -0
- data/lib/active_support/concurrency/share_lock.rb +0 -1
- data/lib/active_support/configuration_file.rb +15 -6
- data/lib/active_support/core_ext/benchmark.rb +6 -9
- data/lib/active_support/core_ext/class/attribute.rb +10 -19
- data/lib/active_support/core_ext/date/conversions.rb +2 -0
- data/lib/active_support/core_ext/date_and_time/compatibility.rb +2 -2
- data/lib/active_support/core_ext/enumerable.rb +8 -3
- data/lib/active_support/core_ext/hash/except.rb +0 -12
- data/lib/active_support/core_ext/module/attr_internal.rb +3 -4
- data/lib/active_support/core_ext/object/json.rb +15 -9
- data/lib/active_support/core_ext/thread/backtrace/location.rb +2 -7
- data/lib/active_support/core_ext/time/calculations.rb +14 -2
- data/lib/active_support/core_ext/time/conversions.rb +2 -0
- data/lib/active_support/current_attributes.rb +7 -3
- data/lib/active_support/delegation.rb +0 -2
- data/lib/active_support/dependencies.rb +0 -1
- data/lib/active_support/deprecation/reporting.rb +2 -21
- data/lib/active_support/deprecation.rb +1 -1
- data/lib/active_support/duration.rb +14 -10
- data/lib/active_support/encrypted_configuration.rb +20 -2
- data/lib/active_support/encrypted_file.rb +1 -1
- data/lib/active_support/error_reporter.rb +25 -1
- data/lib/active_support/evented_file_update_checker.rb +0 -1
- data/lib/active_support/gem_version.rb +4 -4
- data/lib/active_support/hash_with_indifferent_access.rb +16 -16
- data/lib/active_support/i18n_railtie.rb +19 -11
- data/lib/active_support/isolated_execution_state.rb +0 -2
- data/lib/active_support/json/encoding.rb +2 -2
- data/lib/active_support/notifications/fanout.rb +0 -1
- data/lib/active_support/number_helper.rb +22 -0
- data/lib/active_support/railtie.rb +4 -0
- data/lib/active_support/tagged_logging.rb +5 -0
- data/lib/active_support/testing/assertions.rb +79 -21
- data/lib/active_support/testing/isolation.rb +2 -2
- data/lib/active_support/testing/parallelization/server.rb +3 -0
- data/lib/active_support/testing/strict_warnings.rb +3 -0
- data/lib/active_support/testing/time_helpers.rb +2 -1
- data/lib/active_support/time_with_zone.rb +21 -12
- data/lib/active_support/values/time_zone.rb +17 -15
- data/lib/active_support.rb +10 -3
- metadata +36 -7
- data/lib/active_support/proxy_object.rb +0 -20
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: e51398b1109b9d7cbf736ee05a1bbae3b4239b163ffc32e6d72efff689a8681d
|
4
|
+
data.tar.gz: d9f79afec81e5609e14bd19b71f6be93f7fa5d55c31d2a063d67b300f8cbb118
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 0c39e8b68be9fa543af24098076abe8b52001c4955d12b5cb6ed943de52d28ffdf8a381abf8c7e7438af90590739f2bbab665a02245182d50174fbbad67e8949
|
7
|
+
data.tar.gz: 0bdac0fa92206843c4f58e7104463e53d1fe9775db8c6a732da02aff15663063c711f958cab388059be6f8b15a2c74a3f6912a42040b70b50d5d08323dd00a2b
|
data/CHANGELOG.md
CHANGED
@@ -1,263 +1,126 @@
|
|
1
|
-
## Rails
|
1
|
+
## Rails 8.0.0.rc1 (October 19, 2024) ##
|
2
2
|
|
3
|
-
*
|
4
|
-
|
5
|
-
|
6
|
-
## Rails 7.2.1 (August 22, 2024) ##
|
7
|
-
|
8
|
-
* No changes.
|
9
|
-
|
10
|
-
|
11
|
-
## Rails 7.2.0 (August 09, 2024) ##
|
12
|
-
|
13
|
-
* Fix `delegate_missing_to allow_nil: true` when called with implict self
|
14
|
-
|
15
|
-
```ruby
|
16
|
-
class Person
|
17
|
-
delegate_missing_to :address, allow_nil: true
|
18
|
-
|
19
|
-
def address
|
20
|
-
nil
|
21
|
-
end
|
22
|
-
|
23
|
-
def berliner?
|
24
|
-
city == "Berlin"
|
25
|
-
end
|
26
|
-
end
|
27
|
-
|
28
|
-
Person.new.city # => nil
|
29
|
-
Person.new.berliner? # undefined local variable or method `city' for an instance of Person (NameError)
|
30
|
-
```
|
31
|
-
|
32
|
-
*Jean Boussier*
|
33
|
-
|
34
|
-
* Add `logger` as a dependency since it is a bundled gem candidate for Ruby 3.5
|
35
|
-
|
36
|
-
*Earlopain*
|
37
|
-
|
38
|
-
* Define `Digest::UUID.nil_uuid`, which returns the so-called nil UUID.
|
39
|
-
|
40
|
-
*Xavier Noria*
|
41
|
-
|
42
|
-
* Support `duration` type in `ActiveSupport::XmlMini`.
|
43
|
-
|
44
|
-
*heka1024*
|
45
|
-
|
46
|
-
* Remove deprecated `ActiveSupport::Notifications::Event#children` and `ActiveSupport::Notifications::Event#parent_of?`.
|
47
|
-
|
48
|
-
*Rafael Mendonça França*
|
49
|
-
|
50
|
-
* Remove deprecated support to call the following methods without passing a deprecator:
|
51
|
-
|
52
|
-
- `deprecate`
|
53
|
-
- `deprecate_constant`
|
54
|
-
- `ActiveSupport::Deprecation::DeprecatedObjectProxy.new`
|
55
|
-
- `ActiveSupport::Deprecation::DeprecatedInstanceVariableProxy.new`
|
56
|
-
- `ActiveSupport::Deprecation::DeprecatedConstantProxy.new`
|
57
|
-
- `assert_deprecated`
|
58
|
-
- `assert_not_deprecated`
|
59
|
-
- `collect_deprecations`
|
60
|
-
|
61
|
-
*Rafael Mendonça França*
|
62
|
-
|
63
|
-
* Remove deprecated `ActiveSupport::Deprecation` delegation to instance.
|
64
|
-
|
65
|
-
*Rafael Mendonça França*
|
66
|
-
|
67
|
-
* Remove deprecated `SafeBuffer#clone_empty`.
|
68
|
-
|
69
|
-
*Rafael Mendonça França*
|
70
|
-
|
71
|
-
* Remove deprecated `#to_default_s` from `Array`, `Date`, `DateTime` and `Time`.
|
3
|
+
* Remove deprecated support to passing an array of strings to `ActiveSupport::Deprecation#warn`.
|
72
4
|
|
73
5
|
*Rafael Mendonça França*
|
74
6
|
|
75
|
-
* Remove deprecated support to
|
7
|
+
* Remove deprecated support to setting `attr_internal_naming_format` with a `@` prefix.
|
76
8
|
|
77
9
|
*Rafael Mendonça França*
|
78
10
|
|
79
|
-
* Remove deprecated `
|
11
|
+
* Remove deprecated `ActiveSupport::ProxyObject`.
|
80
12
|
|
81
13
|
*Rafael Mendonça França*
|
82
14
|
|
83
|
-
*
|
15
|
+
* Don't execute i18n watcher on boot. It shouldn't catch any file changes initially,
|
16
|
+
and unnecessarily slows down boot of applications with lots of translations.
|
84
17
|
|
85
|
-
*
|
18
|
+
*Gannon McGibbon*, *David Stosik*
|
86
19
|
|
87
|
-
*
|
20
|
+
* Fix `ActiveSupport::HashWithIndifferentAccess#stringify_keys` to stringify all keys not just symbols.
|
88
21
|
|
89
|
-
|
22
|
+
Previously:
|
90
23
|
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
* Remove deprecated constants `ActiveSupport::LogSubscriber::CLEAR` and `ActiveSupport::LogSubscriber::BOLD`.
|
96
|
-
|
97
|
-
*Rafael Mendonça França*
|
98
|
-
|
99
|
-
* Remove deprecated support for `config.active_support.cache_format_version = 6.1`.
|
100
|
-
|
101
|
-
*Rafael Mendonça França*
|
102
|
-
|
103
|
-
* Remove deprecated `:pool_size` and `:pool_timeout` options for the cache storage.
|
104
|
-
|
105
|
-
*Rafael Mendonça França*
|
106
|
-
|
107
|
-
* Warn on tests without assertions.
|
108
|
-
|
109
|
-
`ActiveSupport::TestCase` now warns when tests do not run any assertions.
|
110
|
-
This is helpful in detecting broken tests that do not perform intended assertions.
|
111
|
-
|
112
|
-
*fatkodima*
|
113
|
-
|
114
|
-
* Support `hexBinary` type in `ActiveSupport::XmlMini`.
|
115
|
-
|
116
|
-
*heka1024*
|
117
|
-
|
118
|
-
* Deprecate `ActiveSupport::ProxyObject` in favor of Ruby's built-in `BasicObject`.
|
119
|
-
|
120
|
-
*Earlopain*
|
121
|
-
|
122
|
-
* `stub_const` now accepts a `exists: false` parameter to allow stubbing missing constants.
|
123
|
-
|
124
|
-
*Jean Boussier*
|
125
|
-
|
126
|
-
* Make `ActiveSupport::BacktraceCleaner` copy filters and silencers on dup and clone.
|
127
|
-
|
128
|
-
Previously the copy would still share the internal silencers and filters array,
|
129
|
-
causing state to leak.
|
130
|
-
|
131
|
-
*Jean Boussier*
|
132
|
-
|
133
|
-
* Updating Astana with Western Kazakhstan TZInfo identifier.
|
134
|
-
|
135
|
-
*Damian Nelson*
|
24
|
+
```ruby
|
25
|
+
{ 1 => 2 }.with_indifferent_access.stringify_keys[1] # => 2
|
26
|
+
```
|
136
27
|
|
137
|
-
|
28
|
+
After this change:
|
138
29
|
|
139
30
|
```ruby
|
140
|
-
|
141
|
-
ActiveSupport::Logger.logger_outputs_to?(logger, '/var/log/rails.log')
|
31
|
+
{ 1 => 2 }.with_indifferent_access.stringify_keys["1"] # => 2
|
142
32
|
```
|
143
33
|
|
144
|
-
|
34
|
+
This change can be seen as a bug fix, but since it behaved like this for a very long time, we're deciding
|
35
|
+
to not backport the fix and to make the change in a major release.
|
145
36
|
|
146
|
-
*
|
147
|
-
`ActiveSupport::MessagePack` serializer.
|
37
|
+
*Jean Boussier*
|
148
38
|
|
149
|
-
|
150
|
-
still be read, and new payloads will be readable by older versions of Rails.
|
39
|
+
## Rails 8.0.0.beta1 (September 26, 2024) ##
|
151
40
|
|
152
|
-
|
41
|
+
* Include options when instrumenting `ActiveSupport::Cache::Store#delete` and `ActiveSupport::Cache::Store#delete_multi`.
|
153
42
|
|
154
|
-
*
|
43
|
+
*Adam Renberg Tamm*
|
155
44
|
|
156
|
-
|
157
|
-
class Current < ActiveSupport::CurrentAttributes
|
158
|
-
attribute :counter, default: 0
|
159
|
-
end
|
160
|
-
```
|
45
|
+
* Print test names when running `rails test -v` for parallel tests.
|
161
46
|
|
162
|
-
*
|
47
|
+
*John Hawthorn*, *Abeid Ahmed*
|
163
48
|
|
164
|
-
*
|
49
|
+
* Deprecate `Benchmark.ms` core extension.
|
165
50
|
|
166
|
-
|
167
|
-
client.with(timeout: 5_000) do |c|
|
168
|
-
c.get("/commits")
|
169
|
-
end
|
170
|
-
```
|
51
|
+
The `benchmark` gem will become bundled in Ruby 3.5
|
171
52
|
|
172
|
-
*
|
53
|
+
*Earlopain*
|
173
54
|
|
174
|
-
*
|
175
|
-
default number of workers when parallelizing tests.
|
55
|
+
* `ActiveSupport::TimeWithZone#inspect` now uses ISO 8601 style time like `Time#inspect`
|
176
56
|
|
177
|
-
*
|
57
|
+
*John Hawthorn*
|
178
58
|
|
179
|
-
*
|
59
|
+
* `ActiveSupport::ErrorReporter#report` now assigns a backtrace to unraised exceptions.
|
180
60
|
|
181
|
-
|
182
|
-
|
183
|
-
returning results in that remembered timezone. However, the expected
|
184
|
-
behavior is to return results in a system timezone.
|
61
|
+
Previously reporting an un-raised exception would result in an error report without
|
62
|
+
a backtrace. Now it automatically generates one.
|
185
63
|
|
186
|
-
*
|
64
|
+
*Jean Boussier*
|
187
65
|
|
188
|
-
* Add `
|
66
|
+
* Add `escape_html_entities` option to `ActiveSupport::JSON.encode`.
|
189
67
|
|
190
|
-
|
68
|
+
This allows for overriding the global configuration found at
|
69
|
+
`ActiveSupport.escape_html_entities_in_json` for specific calls to `to_json`.
|
191
70
|
|
71
|
+
This should be usable from controllers in the following manner:
|
192
72
|
```ruby
|
193
|
-
|
194
|
-
|
195
|
-
|
196
|
-
return false
|
73
|
+
class MyController < ApplicationController
|
74
|
+
def index
|
75
|
+
render json: { hello: "world" }, escape_html_entities: false
|
197
76
|
end
|
198
|
-
# ...
|
199
77
|
end
|
200
78
|
```
|
201
79
|
|
202
|
-
|
203
|
-
|
204
|
-
*Jean Boussier*
|
205
|
-
|
206
|
-
* Make the order of read_multi and write_multi notifications for `Cache::Store#fetch_multi` operations match the order they are executed in.
|
80
|
+
*Nigel Baillie*
|
207
81
|
|
208
|
-
|
82
|
+
* Raise when using key which can't respond to `#to_sym` in `EncryptedConfiguration`.
|
209
83
|
|
210
|
-
|
84
|
+
As is the case when trying to use an Integer or Float as a key, which is unsupported.
|
211
85
|
|
212
|
-
|
213
|
-
`nil` if there was an error talking to the cache backend, and `false` if the write failed
|
214
|
-
for another reason (e.g. the key already exists and `unless_exist: true` was passed).
|
86
|
+
*zzak*
|
215
87
|
|
216
|
-
|
88
|
+
* Deprecate addition and since between two `Time` and `ActiveSupport::TimeWithZone`.
|
217
89
|
|
218
|
-
|
90
|
+
Previously adding time instances together such as `10.days.ago + 10.days.ago` or `10.days.ago.since(10.days.ago)` produced a nonsensical future date. This behavior is deprecated and will be removed in Rails 8.1.
|
219
91
|
|
220
|
-
*
|
92
|
+
*Nick Schwaderer*
|
221
93
|
|
222
|
-
*
|
223
|
-
|
224
|
-
`assert_changes` error messages now display objects with `.inspect` to make it easier
|
225
|
-
to differentiate nil from empty strings, strings from symbols, etc.
|
226
|
-
`assert_no_changes` error messages now surface the actual value.
|
227
|
-
|
228
|
-
*pcreux*
|
229
|
-
|
230
|
-
* Fix `#to_fs(:human_size)` to correctly work with negative numbers.
|
231
|
-
|
232
|
-
*Earlopain*
|
94
|
+
* Support rfc2822 format for Time#to_fs & Date#to_fs.
|
233
95
|
|
234
|
-
*
|
96
|
+
*Akshay Birajdar*
|
235
97
|
|
236
|
-
|
98
|
+
* Optimize load time for `Railtie#initialize_i18n`. Filter `I18n.load_path`s passed to the file watcher to only those
|
99
|
+
under `Rails.root`. Previously the watcher would grab all available locales, including those in gems
|
100
|
+
which do not require a watcher because they won't change.
|
237
101
|
|
238
|
-
*
|
102
|
+
*Nick Schwaderer*
|
239
103
|
|
240
|
-
|
104
|
+
* Add a `filter` option to `in_order_of` to prioritize certain values in the sorting without filtering the results
|
105
|
+
by these values.
|
241
106
|
|
242
|
-
*
|
107
|
+
*Igor Depolli*
|
243
108
|
|
244
|
-
|
245
|
-
|
109
|
+
* Improve error message when using `assert_difference` or `assert_changes` with a
|
110
|
+
proc by printing the proc's source code (MRI only).
|
246
111
|
|
247
|
-
|
248
|
-
`SemanticLogger` instance.
|
112
|
+
*Richard Böhme*, *Jean Boussier*
|
249
113
|
|
250
|
-
|
114
|
+
* Add a new configuration value `:zone` for `ActiveSupport.to_time_preserves_timezone` and rename the previous `true` value to `:offset`. The new default value is `:zone`.
|
251
115
|
|
252
|
-
*
|
116
|
+
*Jason Kim*, *John Hawthorn*
|
253
117
|
|
254
|
-
|
118
|
+
* Align instrumentation `payload[:key]` in ActiveSupport::Cache to follow the same pattern, with namespaced and normalized keys.
|
255
119
|
|
256
|
-
*
|
120
|
+
*Frederik Erbs Spang Thomsen*
|
257
121
|
|
258
|
-
|
259
|
-
method from the `Hash` class, which was not able to access values using indifferent keys.
|
122
|
+
* Fix `travel_to` to set usec 0 when `with_usec` is `false` and the given argument String or DateTime.
|
260
123
|
|
261
|
-
*
|
124
|
+
*mopp*
|
262
125
|
|
263
|
-
Please check [7-
|
126
|
+
Please check [7-2-stable](https://github.com/rails/rails/blob/7-2-stable/activesupport/CHANGELOG.md) for previous changes.
|
@@ -18,7 +18,7 @@ module ActiveSupport
|
|
18
18
|
#
|
19
19
|
# bc = ActiveSupport::BacktraceCleaner.new
|
20
20
|
# root = "#{Rails.root}/"
|
21
|
-
# bc.add_filter { |line| line.
|
21
|
+
# bc.add_filter { |line| line.delete_prefix(root) } # strip the Rails.root prefix
|
22
22
|
# bc.add_silencer { |line| /puma|rubygems/.match?(line) } # skip any lines from puma or rubygems
|
23
23
|
# bc.clean(exception.backtrace) # perform the cleanup
|
24
24
|
#
|
@@ -0,0 +1,21 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module ActiveSupport
|
4
|
+
module Benchmark # :nodoc:
|
5
|
+
# Benchmark realtime in the specified time unit. By default,
|
6
|
+
# the returned unit is in seconds.
|
7
|
+
#
|
8
|
+
# ActiveSupport::Benchmark.realtime { sleep 0.1 }
|
9
|
+
# # => 0.10007
|
10
|
+
#
|
11
|
+
# ActiveSupport::Benchmark.realtime(:float_millisecond) { sleep 0.1 }
|
12
|
+
# # => 100.07
|
13
|
+
#
|
14
|
+
# `unit` can be any of the values accepted by Ruby's `Process.clock_gettime`.
|
15
|
+
def self.realtime(unit = :float_second, &block)
|
16
|
+
time_start = Process.clock_gettime(Process::CLOCK_MONOTONIC, unit)
|
17
|
+
yield
|
18
|
+
Process.clock_gettime(Process::CLOCK_MONOTONIC, unit) - time_start
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
@@ -1,6 +1,5 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
require "active_support/core_ext/benchmark"
|
4
3
|
require "active_support/core_ext/hash/keys"
|
5
4
|
|
6
5
|
module ActiveSupport
|
@@ -41,7 +40,9 @@ module ActiveSupport
|
|
41
40
|
options[:level] ||= :info
|
42
41
|
|
43
42
|
result = nil
|
44
|
-
ms = Benchmark.
|
43
|
+
ms = ActiveSupport::Benchmark.realtime(:float_millisecond) do
|
44
|
+
result = options[:silence] ? logger.silence(&block) : yield
|
45
|
+
end
|
45
46
|
logger.public_send(options[:level], "%s (%.1fms)" % [ message, ms ])
|
46
47
|
result
|
47
48
|
else
|
@@ -113,33 +113,33 @@ module ActiveSupport
|
|
113
113
|
dispatch { |logger| logger.<<(message) }
|
114
114
|
end
|
115
115
|
|
116
|
-
def add(
|
117
|
-
dispatch { |logger| logger.add(
|
116
|
+
def add(...)
|
117
|
+
dispatch { |logger| logger.add(...) }
|
118
118
|
end
|
119
119
|
alias_method :log, :add
|
120
120
|
|
121
|
-
def debug(
|
122
|
-
dispatch { |logger| logger.debug(
|
121
|
+
def debug(...)
|
122
|
+
dispatch { |logger| logger.debug(...) }
|
123
123
|
end
|
124
124
|
|
125
|
-
def info(
|
126
|
-
dispatch { |logger| logger.info(
|
125
|
+
def info(...)
|
126
|
+
dispatch { |logger| logger.info(...) }
|
127
127
|
end
|
128
128
|
|
129
|
-
def warn(
|
130
|
-
dispatch { |logger| logger.warn(
|
129
|
+
def warn(...)
|
130
|
+
dispatch { |logger| logger.warn(...) }
|
131
131
|
end
|
132
132
|
|
133
|
-
def error(
|
134
|
-
dispatch { |logger| logger.error(
|
133
|
+
def error(...)
|
134
|
+
dispatch { |logger| logger.error(...) }
|
135
135
|
end
|
136
136
|
|
137
|
-
def fatal(
|
138
|
-
dispatch { |logger| logger.fatal(
|
137
|
+
def fatal(...)
|
138
|
+
dispatch { |logger| logger.fatal(...) }
|
139
139
|
end
|
140
140
|
|
141
|
-
def unknown(
|
142
|
-
dispatch { |logger| logger.unknown(
|
141
|
+
def unknown(...)
|
142
|
+
dispatch { |logger| logger.unknown(...) }
|
143
143
|
end
|
144
144
|
|
145
145
|
def formatter=(formatter)
|
@@ -58,7 +58,12 @@ module ActiveSupport
|
|
58
58
|
# cache.increment("baz") # => 6
|
59
59
|
#
|
60
60
|
def increment(name, amount = 1, options = nil)
|
61
|
-
|
61
|
+
options = merged_options(options)
|
62
|
+
key = normalize_key(name, options)
|
63
|
+
|
64
|
+
instrument(:increment, key, amount: amount) do
|
65
|
+
modify_value(name, amount, options)
|
66
|
+
end
|
62
67
|
end
|
63
68
|
|
64
69
|
# Decrement a cached integer value. Returns the updated value.
|
@@ -73,7 +78,12 @@ module ActiveSupport
|
|
73
78
|
# cache.decrement("baz") # => 4
|
74
79
|
#
|
75
80
|
def decrement(name, amount = 1, options = nil)
|
76
|
-
|
81
|
+
options = merged_options(options)
|
82
|
+
key = normalize_key(name, options)
|
83
|
+
|
84
|
+
instrument(:decrement, key, amount: amount) do
|
85
|
+
modify_value(name, -amount, options)
|
86
|
+
end
|
77
87
|
end
|
78
88
|
|
79
89
|
def delete_matched(matcher, options = nil)
|
@@ -147,7 +147,9 @@ module ActiveSupport
|
|
147
147
|
# cache.increment("baz") # => 6
|
148
148
|
#
|
149
149
|
def increment(name, amount = 1, options = nil)
|
150
|
-
|
150
|
+
instrument(:increment, name, amount: amount) do
|
151
|
+
modify_value(name, amount, options)
|
152
|
+
end
|
151
153
|
end
|
152
154
|
|
153
155
|
# Decrement a cached integer value. Returns the updated value.
|
@@ -162,7 +164,9 @@ module ActiveSupport
|
|
162
164
|
# cache.decrement("baz") # => 4
|
163
165
|
#
|
164
166
|
def decrement(name, amount = 1, options = nil)
|
165
|
-
|
167
|
+
instrument(:decrement, name, amount: amount) do
|
168
|
+
modify_value(name, -amount, options)
|
169
|
+
end
|
166
170
|
end
|
167
171
|
|
168
172
|
# Deletes cache entries if the cache key matches a given pattern.
|
@@ -173,9 +173,12 @@ module ActiveSupport
|
|
173
173
|
return {} if names.empty?
|
174
174
|
|
175
175
|
options = names.extract_options!
|
176
|
-
|
176
|
+
options = merged_options(options)
|
177
|
+
keys = names.map { |name| normalize_key(name, options) }
|
178
|
+
|
179
|
+
instrument_multi(:read_multi, keys, options) do |payload|
|
177
180
|
read_multi_entries(names, **options).tap do |results|
|
178
|
-
payload[:hits] = results.keys
|
181
|
+
payload[:hits] = results.keys.map { |name| normalize_key(name, options) }
|
179
182
|
end
|
180
183
|
end
|
181
184
|
end
|
data/lib/active_support/cache.rb
CHANGED
@@ -538,10 +538,11 @@ module ActiveSupport
|
|
538
538
|
|
539
539
|
options = names.extract_options!
|
540
540
|
options = merged_options(options)
|
541
|
+
keys = names.map { |name| normalize_key(name, options) }
|
541
542
|
|
542
|
-
instrument_multi :read_multi,
|
543
|
+
instrument_multi :read_multi, keys, options do |payload|
|
543
544
|
read_multi_entries(names, **options, event: payload).tap do |results|
|
544
|
-
payload[:hits] = results.keys
|
545
|
+
payload[:hits] = results.keys.map { |name| normalize_key(name, options) }
|
545
546
|
end
|
546
547
|
end
|
547
548
|
end
|
@@ -551,8 +552,9 @@ module ActiveSupport
|
|
551
552
|
return hash if hash.empty?
|
552
553
|
|
553
554
|
options = merged_options(options)
|
555
|
+
normalized_hash = hash.transform_keys { |key| normalize_key(key, options) }
|
554
556
|
|
555
|
-
instrument_multi :write_multi,
|
557
|
+
instrument_multi :write_multi, normalized_hash, options do |payload|
|
556
558
|
entries = hash.each_with_object({}) do |(name, value), memo|
|
557
559
|
memo[normalize_key(name, options)] = Entry.new(value, **options.merge(version: normalize_version(name, options)))
|
558
560
|
end
|
@@ -596,9 +598,9 @@ module ActiveSupport
|
|
596
598
|
|
597
599
|
options = names.extract_options!
|
598
600
|
options = merged_options(options)
|
599
|
-
|
601
|
+
keys = names.map { |name| normalize_key(name, options) }
|
600
602
|
writes = {}
|
601
|
-
ordered = instrument_multi :read_multi,
|
603
|
+
ordered = instrument_multi :read_multi, keys, options do |payload|
|
602
604
|
if options[:force]
|
603
605
|
reads = {}
|
604
606
|
else
|
@@ -610,7 +612,7 @@ module ActiveSupport
|
|
610
612
|
end
|
611
613
|
writes.compact! if options[:skip_nil]
|
612
614
|
|
613
|
-
payload[:hits] = reads.keys
|
615
|
+
payload[:hits] = reads.keys.map { |name| normalize_key(name, options) }
|
614
616
|
payload[:super_operation] = :fetch_multi
|
615
617
|
|
616
618
|
ordered
|
@@ -675,7 +677,7 @@ module ActiveSupport
|
|
675
677
|
options = merged_options(options)
|
676
678
|
key = normalize_key(name, options)
|
677
679
|
|
678
|
-
instrument(:delete, key) do
|
680
|
+
instrument(:delete, key, options) do
|
679
681
|
delete_entry(key, **options)
|
680
682
|
end
|
681
683
|
end
|
@@ -690,7 +692,7 @@ module ActiveSupport
|
|
690
692
|
options = merged_options(options)
|
691
693
|
names.map! { |key| normalize_key(key, options) }
|
692
694
|
|
693
|
-
instrument_multi
|
695
|
+
instrument_multi(:delete_multi, names, options) do
|
694
696
|
delete_multi_entries(names, **options)
|
695
697
|
end
|
696
698
|
end
|
@@ -943,9 +945,12 @@ module ActiveSupport
|
|
943
945
|
#
|
944
946
|
# namespace_key 'foo', namespace: -> { 'cache' }
|
945
947
|
# # => 'cache:foo'
|
946
|
-
def namespace_key(key,
|
947
|
-
|
948
|
-
|
948
|
+
def namespace_key(key, call_options = nil)
|
949
|
+
namespace = if call_options&.key?(:namespace)
|
950
|
+
call_options[:namespace]
|
951
|
+
else
|
952
|
+
options[:namespace]
|
953
|
+
end
|
949
954
|
|
950
955
|
if namespace.respond_to?(:call)
|
951
956
|
namespace = namespace.call
|
@@ -6,7 +6,6 @@ require "active_support/core_ext/array/extract_options"
|
|
6
6
|
require "active_support/core_ext/class/attribute"
|
7
7
|
require "active_support/core_ext/string/filters"
|
8
8
|
require "active_support/core_ext/object/blank"
|
9
|
-
require "thread"
|
10
9
|
|
11
10
|
module ActiveSupport
|
12
11
|
# = Active Support \Callbacks
|
@@ -67,7 +66,7 @@ module ActiveSupport
|
|
67
66
|
|
68
67
|
included do
|
69
68
|
extend ActiveSupport::DescendantsTracker
|
70
|
-
class_attribute :__callbacks, instance_writer: false, default: {}
|
69
|
+
class_attribute :__callbacks, instance_writer: false, instance_predicate: false, default: {}
|
71
70
|
end
|
72
71
|
|
73
72
|
CALLBACK_FILTER_TYPES = [:before, :after, :around].freeze
|
@@ -0,0 +1,26 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module ActiveSupport
|
4
|
+
module ClassAttribute # :nodoc:
|
5
|
+
class << self
|
6
|
+
def redefine(owner, name, value)
|
7
|
+
if owner.singleton_class?
|
8
|
+
owner.redefine_method(name) { value }
|
9
|
+
owner.send(:public, name)
|
10
|
+
end
|
11
|
+
|
12
|
+
owner.redefine_singleton_method(name) { value }
|
13
|
+
owner.singleton_class.send(:public, name)
|
14
|
+
|
15
|
+
owner.redefine_singleton_method("#{name}=") do |new_value|
|
16
|
+
if owner.equal?(self)
|
17
|
+
value = new_value
|
18
|
+
else
|
19
|
+
::ActiveSupport::ClassAttribute.redefine(self, name, new_value)
|
20
|
+
end
|
21
|
+
end
|
22
|
+
owner.singleton_class.send(:public, "#{name}=")
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
@@ -55,6 +55,11 @@ module ActiveSupport
|
|
55
55
|
@path = path
|
56
56
|
@line = line
|
57
57
|
@namespaces = Hash.new { |h, k| h[k] = MethodSet.new(k) }
|
58
|
+
@sources = []
|
59
|
+
end
|
60
|
+
|
61
|
+
def class_eval
|
62
|
+
yield @sources
|
58
63
|
end
|
59
64
|
|
60
65
|
def define_cached_method(canonical_name, namespace:, as: nil, &block)
|
@@ -65,6 +70,10 @@ module ActiveSupport
|
|
65
70
|
@namespaces.each_value do |method_set|
|
66
71
|
method_set.apply(@owner, @path, @line - 1)
|
67
72
|
end
|
73
|
+
|
74
|
+
unless @sources.empty?
|
75
|
+
@owner.class_eval("# frozen_string_literal: true\n" + @sources.join(";"), @path, @line - 1)
|
76
|
+
end
|
68
77
|
end
|
69
78
|
end
|
70
79
|
end
|