activesupport 6.1.4.2 → 7.0.2.3
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 +226 -462
- data/MIT-LICENSE +1 -1
- data/lib/active_support/actionable_error.rb +1 -1
- data/lib/active_support/array_inquirer.rb +0 -2
- data/lib/active_support/benchmarkable.rb +2 -2
- data/lib/active_support/cache/file_store.rb +15 -9
- data/lib/active_support/cache/mem_cache_store.rb +127 -32
- data/lib/active_support/cache/memory_store.rb +23 -15
- data/lib/active_support/cache/null_store.rb +10 -2
- data/lib/active_support/cache/redis_cache_store.rb +42 -67
- data/lib/active_support/cache/strategy/local_cache.rb +35 -61
- data/lib/active_support/cache.rb +189 -45
- data/lib/active_support/callbacks.rb +180 -81
- data/lib/active_support/code_generator.rb +65 -0
- data/lib/active_support/concern.rb +5 -5
- data/lib/active_support/concurrency/load_interlock_aware_monitor.rb +2 -4
- data/lib/active_support/concurrency/share_lock.rb +2 -2
- data/lib/active_support/configurable.rb +6 -3
- data/lib/active_support/configuration_file.rb +1 -1
- data/lib/active_support/core_ext/array/access.rb +1 -5
- data/lib/active_support/core_ext/array/conversions.rb +13 -11
- data/lib/active_support/core_ext/array/deprecated_conversions.rb +25 -0
- data/lib/active_support/core_ext/array/grouping.rb +6 -6
- data/lib/active_support/core_ext/array.rb +1 -0
- data/lib/active_support/core_ext/big_decimal/conversions.rb +1 -1
- data/lib/active_support/core_ext/class/subclasses.rb +25 -17
- data/lib/active_support/core_ext/date/blank.rb +1 -1
- data/lib/active_support/core_ext/date/calculations.rb +4 -4
- data/lib/active_support/core_ext/date/conversions.rb +11 -11
- data/lib/active_support/core_ext/date/deprecated_conversions.rb +26 -0
- data/lib/active_support/core_ext/date.rb +1 -0
- data/lib/active_support/core_ext/date_and_time/compatibility.rb +1 -1
- data/lib/active_support/core_ext/date_time/blank.rb +1 -1
- data/lib/active_support/core_ext/date_time/conversions.rb +13 -13
- data/lib/active_support/core_ext/date_time/deprecated_conversions.rb +22 -0
- data/lib/active_support/core_ext/date_time.rb +1 -0
- data/lib/active_support/core_ext/digest/uuid.rb +39 -13
- data/lib/active_support/core_ext/enumerable.rb +78 -26
- data/lib/active_support/core_ext/file/atomic.rb +3 -1
- data/lib/active_support/core_ext/hash/keys.rb +1 -1
- data/lib/active_support/core_ext/kernel/reporting.rb +4 -4
- data/lib/active_support/core_ext/module/attribute_accessors.rb +2 -0
- data/lib/active_support/core_ext/module/attribute_accessors_per_thread.rb +19 -10
- data/lib/active_support/core_ext/module/delegation.rb +2 -8
- data/lib/active_support/core_ext/name_error.rb +2 -8
- data/lib/active_support/core_ext/numeric/conversions.rb +79 -76
- data/lib/active_support/core_ext/numeric/deprecated_conversions.rb +60 -0
- data/lib/active_support/core_ext/numeric.rb +1 -0
- data/lib/active_support/core_ext/object/acts_like.rb +29 -5
- data/lib/active_support/core_ext/object/blank.rb +2 -2
- data/lib/active_support/core_ext/object/deep_dup.rb +1 -1
- data/lib/active_support/core_ext/object/duplicable.rb +11 -0
- data/lib/active_support/core_ext/object/json.rb +29 -24
- data/lib/active_support/core_ext/object/to_query.rb +2 -2
- data/lib/active_support/core_ext/object/try.rb +20 -20
- data/lib/active_support/core_ext/object/with_options.rb +20 -1
- data/lib/active_support/core_ext/pathname/existence.rb +21 -0
- data/lib/active_support/core_ext/pathname.rb +3 -0
- data/lib/active_support/core_ext/range/compare_range.rb +0 -25
- data/lib/active_support/core_ext/range/conversions.rb +8 -8
- data/lib/active_support/core_ext/range/deprecated_conversions.rb +26 -0
- data/lib/active_support/core_ext/range/each.rb +1 -1
- data/lib/active_support/core_ext/range/include_time_with_zone.rb +4 -25
- data/lib/active_support/core_ext/range.rb +1 -1
- data/lib/active_support/core_ext/string/filters.rb +1 -1
- data/lib/active_support/core_ext/string/inflections.rb +1 -1
- data/lib/active_support/core_ext/string/output_safety.rb +60 -36
- data/lib/active_support/core_ext/symbol/starts_ends_with.rb +0 -8
- data/lib/active_support/core_ext/time/calculations.rb +7 -6
- data/lib/active_support/core_ext/time/conversions.rb +13 -12
- data/lib/active_support/core_ext/time/deprecated_conversions.rb +22 -0
- data/lib/active_support/core_ext/time/zones.rb +4 -19
- data/lib/active_support/core_ext/time.rb +1 -0
- data/lib/active_support/core_ext/uri.rb +3 -27
- data/lib/active_support/core_ext.rb +1 -0
- data/lib/active_support/current_attributes.rb +31 -14
- data/lib/active_support/dependencies/interlock.rb +10 -18
- data/lib/active_support/dependencies/require_dependency.rb +28 -0
- data/lib/active_support/dependencies.rb +58 -788
- data/lib/active_support/deprecation/behaviors.rb +4 -1
- data/lib/active_support/deprecation/method_wrappers.rb +3 -3
- data/lib/active_support/deprecation/proxy_wrappers.rb +1 -1
- data/lib/active_support/deprecation.rb +1 -1
- data/lib/active_support/descendants_tracker.rb +174 -68
- data/lib/active_support/digest.rb +5 -3
- data/lib/active_support/duration/iso8601_parser.rb +3 -3
- data/lib/active_support/duration/iso8601_serializer.rb +9 -1
- data/lib/active_support/duration.rb +81 -51
- data/lib/active_support/encrypted_configuration.rb +13 -2
- data/lib/active_support/encrypted_file.rb +1 -1
- data/lib/active_support/environment_inquirer.rb +1 -1
- data/lib/active_support/error_reporter.rb +117 -0
- data/lib/active_support/evented_file_update_checker.rb +1 -1
- data/lib/active_support/execution_context/test_helper.rb +13 -0
- data/lib/active_support/execution_context.rb +53 -0
- data/lib/active_support/execution_wrapper.rb +43 -21
- data/lib/active_support/executor/test_helper.rb +7 -0
- data/lib/active_support/fork_tracker.rb +19 -12
- data/lib/active_support/gem_version.rb +4 -4
- data/lib/active_support/hash_with_indifferent_access.rb +3 -1
- data/lib/active_support/html_safe_translation.rb +43 -0
- data/lib/active_support/i18n.rb +1 -0
- data/lib/active_support/i18n_railtie.rb +1 -1
- data/lib/active_support/inflector/inflections.rb +23 -7
- data/lib/active_support/inflector/methods.rb +24 -48
- data/lib/active_support/isolated_execution_state.rb +64 -0
- data/lib/active_support/json/encoding.rb +3 -3
- data/lib/active_support/key_generator.rb +18 -1
- data/lib/active_support/locale/en.yml +1 -1
- data/lib/active_support/log_subscriber.rb +13 -3
- data/lib/active_support/logger_thread_safe_level.rb +4 -13
- data/lib/active_support/message_encryptor.rb +8 -3
- data/lib/active_support/message_verifier.rb +46 -14
- data/lib/active_support/messages/metadata.rb +2 -2
- data/lib/active_support/multibyte/chars.rb +10 -11
- data/lib/active_support/multibyte/unicode.rb +0 -12
- data/lib/active_support/multibyte.rb +1 -1
- data/lib/active_support/notifications/fanout.rb +91 -65
- data/lib/active_support/notifications/instrumenter.rb +32 -15
- data/lib/active_support/notifications.rb +15 -21
- data/lib/active_support/number_helper/number_converter.rb +1 -3
- data/lib/active_support/number_helper/number_to_currency_converter.rb +11 -6
- data/lib/active_support/number_helper/number_to_delimited_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_phone_converter.rb +1 -1
- data/lib/active_support/number_helper/rounding_helper.rb +1 -5
- data/lib/active_support/number_helper.rb +0 -2
- data/lib/active_support/option_merger.rb +8 -16
- data/lib/active_support/ordered_hash.rb +1 -1
- data/lib/active_support/parameter_filter.rb +5 -0
- data/lib/active_support/per_thread_registry.rb +5 -0
- data/lib/active_support/railtie.rb +69 -19
- data/lib/active_support/reloader.rb +1 -1
- data/lib/active_support/rescuable.rb +2 -2
- data/lib/active_support/ruby_features.rb +7 -0
- data/lib/active_support/secure_compare_rotator.rb +1 -1
- data/lib/active_support/string_inquirer.rb +0 -2
- data/lib/active_support/subscriber.rb +7 -18
- data/lib/active_support/tagged_logging.rb +2 -2
- data/lib/active_support/test_case.rb +9 -21
- data/lib/active_support/testing/assertions.rb +35 -5
- data/lib/active_support/testing/deprecation.rb +52 -1
- data/lib/active_support/testing/isolation.rb +2 -2
- data/lib/active_support/testing/method_call_assertions.rb +5 -5
- data/lib/active_support/testing/parallelization/server.rb +4 -0
- data/lib/active_support/testing/parallelization/worker.rb +3 -0
- data/lib/active_support/testing/parallelization.rb +4 -0
- data/lib/active_support/testing/parallelize_executor.rb +76 -0
- data/lib/active_support/testing/stream.rb +3 -5
- data/lib/active_support/testing/tagged_logging.rb +1 -1
- data/lib/active_support/testing/time_helpers.rb +13 -2
- data/lib/active_support/time_with_zone.rb +54 -13
- data/lib/active_support/values/time_zone.rb +30 -9
- data/lib/active_support/xml_mini/jdom.rb +1 -1
- data/lib/active_support/xml_mini/libxml.rb +5 -5
- data/lib/active_support/xml_mini/libxmlsax.rb +1 -1
- data/lib/active_support/xml_mini/nokogiri.rb +4 -4
- data/lib/active_support/xml_mini/nokogirisax.rb +1 -1
- data/lib/active_support/xml_mini/rexml.rb +1 -1
- data/lib/active_support/xml_mini.rb +5 -4
- data/lib/active_support.rb +17 -1
- metadata +26 -23
- data/lib/active_support/core_ext/marshal.rb +0 -26
- data/lib/active_support/dependencies/zeitwerk_integration.rb +0 -117
@@ -130,7 +130,7 @@ class Numeric
|
|
130
130
|
end
|
131
131
|
end
|
132
132
|
|
133
|
-
module ActiveSupport
|
133
|
+
module ActiveSupport # :nodoc:
|
134
134
|
class SafeBuffer < String
|
135
135
|
UNSAFE_STRING_METHODS = %w(
|
136
136
|
capitalize chomp chop delete delete_prefix delete_suffix
|
@@ -184,27 +184,30 @@ module ActiveSupport #:nodoc:
|
|
184
184
|
end
|
185
185
|
|
186
186
|
def concat(value)
|
187
|
-
|
187
|
+
unless value.nil?
|
188
|
+
super(implicit_html_escape_interpolated_argument(value))
|
189
|
+
end
|
190
|
+
self
|
188
191
|
end
|
189
192
|
alias << concat
|
190
193
|
|
191
194
|
def insert(index, value)
|
192
|
-
super(index,
|
195
|
+
super(index, implicit_html_escape_interpolated_argument(value))
|
193
196
|
end
|
194
197
|
|
195
198
|
def prepend(value)
|
196
|
-
super(
|
199
|
+
super(implicit_html_escape_interpolated_argument(value))
|
197
200
|
end
|
198
201
|
|
199
202
|
def replace(value)
|
200
|
-
super(
|
203
|
+
super(implicit_html_escape_interpolated_argument(value))
|
201
204
|
end
|
202
205
|
|
203
206
|
def []=(*args)
|
204
207
|
if args.length == 3
|
205
|
-
super(args[0], args[1],
|
208
|
+
super(args[0], args[1], implicit_html_escape_interpolated_argument(args[2]))
|
206
209
|
else
|
207
|
-
super(args[0],
|
210
|
+
super(args[0], implicit_html_escape_interpolated_argument(args[1]))
|
208
211
|
end
|
209
212
|
end
|
210
213
|
|
@@ -222,9 +225,9 @@ module ActiveSupport #:nodoc:
|
|
222
225
|
def %(args)
|
223
226
|
case args
|
224
227
|
when Hash
|
225
|
-
escaped_args = args.transform_values { |arg|
|
228
|
+
escaped_args = args.transform_values { |arg| explicit_html_escape_interpolated_argument(arg) }
|
226
229
|
else
|
227
|
-
escaped_args = Array(args).map { |arg|
|
230
|
+
escaped_args = Array(args).map { |arg| explicit_html_escape_interpolated_argument(arg) }
|
228
231
|
end
|
229
232
|
|
230
233
|
self.class.new(super(escaped_args))
|
@@ -262,39 +265,60 @@ module ActiveSupport #:nodoc:
|
|
262
265
|
end
|
263
266
|
|
264
267
|
UNSAFE_STRING_METHODS_WITH_BACKREF.each do |unsafe_method|
|
265
|
-
|
266
|
-
|
267
|
-
|
268
|
-
|
269
|
-
|
270
|
-
|
271
|
-
|
272
|
-
|
273
|
-
|
274
|
-
|
275
|
-
|
276
|
-
|
277
|
-
|
278
|
-
|
279
|
-
|
280
|
-
|
281
|
-
|
282
|
-
|
283
|
-
|
284
|
-
|
285
|
-
|
286
|
-
|
287
|
-
|
288
|
-
|
289
|
-
EOT
|
290
|
-
end
|
268
|
+
class_eval <<-EOT, __FILE__, __LINE__ + 1
|
269
|
+
def #{unsafe_method}(*args, &block) # def gsub(*args, &block)
|
270
|
+
if block # if block
|
271
|
+
to_str.#{unsafe_method}(*args) { |*params| # to_str.gsub(*args) { |*params|
|
272
|
+
set_block_back_references(block, $~) # set_block_back_references(block, $~)
|
273
|
+
block.call(*params) # block.call(*params)
|
274
|
+
} # }
|
275
|
+
else # else
|
276
|
+
to_str.#{unsafe_method}(*args) # to_str.gsub(*args)
|
277
|
+
end # end
|
278
|
+
end # end
|
279
|
+
|
280
|
+
def #{unsafe_method}!(*args, &block) # def gsub!(*args, &block)
|
281
|
+
@html_safe = false # @html_safe = false
|
282
|
+
if block # if block
|
283
|
+
super(*args) { |*params| # super(*args) { |*params|
|
284
|
+
set_block_back_references(block, $~) # set_block_back_references(block, $~)
|
285
|
+
block.call(*params) # block.call(*params)
|
286
|
+
} # }
|
287
|
+
else # else
|
288
|
+
super # super
|
289
|
+
end # end
|
290
|
+
end # end
|
291
|
+
EOT
|
291
292
|
end
|
292
293
|
|
293
294
|
private
|
294
|
-
def
|
295
|
+
def explicit_html_escape_interpolated_argument(arg)
|
295
296
|
(!html_safe? || arg.html_safe?) ? arg : CGI.escapeHTML(arg.to_s)
|
296
297
|
end
|
297
298
|
|
299
|
+
def implicit_html_escape_interpolated_argument(arg)
|
300
|
+
if !html_safe? || arg.html_safe?
|
301
|
+
arg
|
302
|
+
else
|
303
|
+
arg_string = begin
|
304
|
+
arg.to_str
|
305
|
+
rescue NoMethodError => error
|
306
|
+
if error.name == :to_str
|
307
|
+
str = arg.to_s
|
308
|
+
ActiveSupport::Deprecation.warn <<~MSG.squish
|
309
|
+
Implicit conversion of #{arg.class} into String by ActiveSupport::SafeBuffer
|
310
|
+
is deprecated and will be removed in Rails 7.1.
|
311
|
+
You must explicitly cast it to a String.
|
312
|
+
MSG
|
313
|
+
str
|
314
|
+
else
|
315
|
+
raise
|
316
|
+
end
|
317
|
+
end
|
318
|
+
CGI.escapeHTML(arg_string)
|
319
|
+
end
|
320
|
+
end
|
321
|
+
|
298
322
|
def set_block_back_references(block, match_data)
|
299
323
|
block.binding.eval("proc { |m| $~ = m }").call(match_data)
|
300
324
|
rescue ArgumentError
|
@@ -1,14 +1,6 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
3
|
class Symbol
|
4
|
-
def start_with?(*prefixes)
|
5
|
-
to_s.start_with?(*prefixes)
|
6
|
-
end unless method_defined?(:start_with?)
|
7
|
-
|
8
|
-
def end_with?(*suffixes)
|
9
|
-
to_s.end_with?(*suffixes)
|
10
|
-
end unless method_defined?(:end_with?)
|
11
|
-
|
12
4
|
alias :starts_with? :start_with?
|
13
5
|
alias :ends_with? :end_with?
|
14
6
|
end
|
@@ -42,8 +42,8 @@ class Time
|
|
42
42
|
|
43
43
|
# Layers additional behavior on Time.at so that ActiveSupport::TimeWithZone and DateTime
|
44
44
|
# instances can be used when called with a single argument
|
45
|
-
def at_with_coercion(*args)
|
46
|
-
return at_without_coercion(*args) if args.size != 1
|
45
|
+
def at_with_coercion(*args, **kwargs)
|
46
|
+
return at_without_coercion(*args, **kwargs) if args.size != 1 || !kwargs.empty?
|
47
47
|
|
48
48
|
# Time.at can be called with a time or numerical value
|
49
49
|
time_or_number = args.first
|
@@ -56,7 +56,6 @@ class Time
|
|
56
56
|
at_without_coercion(time_or_number)
|
57
57
|
end
|
58
58
|
end
|
59
|
-
ruby2_keywords(:at_with_coercion) if respond_to?(:ruby2_keywords, true)
|
60
59
|
alias_method :at_without_coercion, :at
|
61
60
|
alias_method :at, :at_with_coercion
|
62
61
|
|
@@ -160,6 +159,8 @@ class Time
|
|
160
159
|
::Time.new(new_year, new_month, new_day, new_hour, new_min, new_sec, new_offset)
|
161
160
|
elsif utc?
|
162
161
|
::Time.utc(new_year, new_month, new_day, new_hour, new_min, new_sec)
|
162
|
+
elsif zone&.respond_to?(:utc_to_local)
|
163
|
+
::Time.new(new_year, new_month, new_day, new_hour, new_min, new_sec, zone)
|
163
164
|
elsif zone
|
164
165
|
::Time.local(new_year, new_month, new_day, new_hour, new_min, new_sec)
|
165
166
|
else
|
@@ -276,7 +277,7 @@ class Time
|
|
276
277
|
end
|
277
278
|
alias :at_end_of_minute :end_of_minute
|
278
279
|
|
279
|
-
def plus_with_duration(other)
|
280
|
+
def plus_with_duration(other) # :nodoc:
|
280
281
|
if ActiveSupport::Duration === other
|
281
282
|
other.since(self)
|
282
283
|
else
|
@@ -286,7 +287,7 @@ class Time
|
|
286
287
|
alias_method :plus_without_duration, :+
|
287
288
|
alias_method :+, :plus_with_duration
|
288
289
|
|
289
|
-
def minus_with_duration(other)
|
290
|
+
def minus_with_duration(other) # :nodoc:
|
290
291
|
if ActiveSupport::Duration === other
|
291
292
|
other.until(self)
|
292
293
|
else
|
@@ -304,7 +305,7 @@ class Time
|
|
304
305
|
other.is_a?(DateTime) ? to_f - other.to_f : minus_without_coercion(other)
|
305
306
|
end
|
306
307
|
alias_method :minus_without_coercion, :-
|
307
|
-
alias_method :-, :minus_with_coercion
|
308
|
+
alias_method :-, :minus_with_coercion # rubocop:disable Lint/DuplicateMethods
|
308
309
|
|
309
310
|
# Layers additional behavior on Time#<=> so that DateTime and ActiveSupport::TimeWithZone instances
|
310
311
|
# can be chronologically compared with a Time
|
@@ -27,22 +27,22 @@ class Time
|
|
27
27
|
|
28
28
|
# Converts to a formatted string. See DATE_FORMATS for built-in formats.
|
29
29
|
#
|
30
|
-
# This method is aliased to <tt>
|
30
|
+
# This method is aliased to <tt>to_formatted_s</tt>.
|
31
31
|
#
|
32
32
|
# time = Time.now # => 2007-01-18 06:10:17 -06:00
|
33
33
|
#
|
34
|
+
# time.to_fs(:time) # => "06:10"
|
34
35
|
# time.to_formatted_s(:time) # => "06:10"
|
35
|
-
# time.to_s(:time) # => "06:10"
|
36
36
|
#
|
37
|
-
# time.
|
38
|
-
# time.
|
39
|
-
# time.
|
40
|
-
# time.
|
41
|
-
# time.
|
42
|
-
# time.
|
43
|
-
# time.
|
37
|
+
# time.to_fs(:db) # => "2007-01-18 06:10:17"
|
38
|
+
# time.to_fs(:number) # => "20070118061017"
|
39
|
+
# time.to_fs(:short) # => "18 Jan 06:10"
|
40
|
+
# time.to_fs(:long) # => "January 18, 2007 06:10"
|
41
|
+
# time.to_fs(:long_ordinal) # => "January 18th, 2007 06:10"
|
42
|
+
# time.to_fs(:rfc822) # => "Thu, 18 Jan 2007 06:10:17 -0600"
|
43
|
+
# time.to_fs(:iso8601) # => "2007-01-18T06:10:17-06:00"
|
44
44
|
#
|
45
|
-
# == Adding your own time formats to +
|
45
|
+
# == Adding your own time formats to +to_fs+
|
46
46
|
# You can add your own formats to the Time::DATE_FORMATS hash.
|
47
47
|
# Use the format name as the hash key and either a strftime string
|
48
48
|
# or Proc instance that takes a time argument as the value.
|
@@ -50,15 +50,16 @@ class Time
|
|
50
50
|
# # config/initializers/time_formats.rb
|
51
51
|
# Time::DATE_FORMATS[:month_and_year] = '%B %Y'
|
52
52
|
# Time::DATE_FORMATS[:short_ordinal] = ->(time) { time.strftime("%B #{time.day.ordinalize}") }
|
53
|
-
def
|
53
|
+
def to_fs(format = :default)
|
54
54
|
if formatter = DATE_FORMATS[format]
|
55
55
|
formatter.respond_to?(:call) ? formatter.call(self).to_s : strftime(formatter)
|
56
56
|
else
|
57
|
+
# Change to `to_s` when deprecation is gone. Also deprecate `to_default_s`.
|
57
58
|
to_default_s
|
58
59
|
end
|
59
60
|
end
|
61
|
+
alias_method :to_formatted_s, :to_fs
|
60
62
|
alias_method :to_default_s, :to_s
|
61
|
-
alias_method :to_s, :to_formatted_s
|
62
63
|
|
63
64
|
# Returns a formatted string of the offset from UTC, or an alternative
|
64
65
|
# string if the time zone is already UTC.
|
@@ -0,0 +1,22 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require "time"
|
4
|
+
|
5
|
+
class Time
|
6
|
+
NOT_SET = Object.new # :nodoc:
|
7
|
+
def to_s(format = NOT_SET) # :nodoc:
|
8
|
+
if formatter = DATE_FORMATS[format]
|
9
|
+
ActiveSupport::Deprecation.warn(
|
10
|
+
"Time#to_s(#{format.inspect}) is deprecated. Please use Time#to_fs(#{format.inspect}) instead."
|
11
|
+
)
|
12
|
+
formatter.respond_to?(:call) ? formatter.call(self).to_s : strftime(formatter)
|
13
|
+
elsif format == NOT_SET
|
14
|
+
to_default_s
|
15
|
+
else
|
16
|
+
ActiveSupport::Deprecation.warn(
|
17
|
+
"Time#to_s(#{format.inspect}) is deprecated. Please use Time#to_fs(#{format.inspect}) instead."
|
18
|
+
)
|
19
|
+
to_default_s
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
@@ -12,7 +12,7 @@ class Time
|
|
12
12
|
# Returns the TimeZone for the current request, if this has been set (via Time.zone=).
|
13
13
|
# If <tt>Time.zone</tt> has not been set for the current request, returns the TimeZone specified in <tt>config.time_zone</tt>.
|
14
14
|
def zone
|
15
|
-
|
15
|
+
::ActiveSupport::IsolatedExecutionState[:time_zone] || zone_default
|
16
16
|
end
|
17
17
|
|
18
18
|
# Sets <tt>Time.zone</tt> to a TimeZone object for the current request/thread.
|
@@ -39,7 +39,7 @@ class Time
|
|
39
39
|
# end
|
40
40
|
# end
|
41
41
|
def zone=(time_zone)
|
42
|
-
|
42
|
+
::ActiveSupport::IsolatedExecutionState[:time_zone] = find_zone!(time_zone)
|
43
43
|
end
|
44
44
|
|
45
45
|
# Allows override of <tt>Time.zone</tt> locally inside supplied block;
|
@@ -80,24 +80,9 @@ class Time
|
|
80
80
|
# Time.find_zone! false # => false
|
81
81
|
# Time.find_zone! "NOT-A-TIMEZONE" # => ArgumentError: Invalid Timezone: NOT-A-TIMEZONE
|
82
82
|
def find_zone!(time_zone)
|
83
|
-
|
84
|
-
time_zone
|
85
|
-
else
|
86
|
-
# Look up the timezone based on the identifier (unless we've been
|
87
|
-
# passed a TZInfo::Timezone)
|
88
|
-
unless time_zone.respond_to?(:period_for_local)
|
89
|
-
time_zone = ActiveSupport::TimeZone[time_zone] || TZInfo::Timezone.get(time_zone)
|
90
|
-
end
|
83
|
+
return time_zone unless time_zone
|
91
84
|
|
92
|
-
|
93
|
-
if time_zone.is_a?(ActiveSupport::TimeZone)
|
94
|
-
time_zone
|
95
|
-
else
|
96
|
-
ActiveSupport::TimeZone.create(time_zone.name, nil, time_zone)
|
97
|
-
end
|
98
|
-
end
|
99
|
-
rescue TZInfo::InvalidTimezoneIdentifier
|
100
|
-
raise ArgumentError, "Invalid Timezone: #{time_zone}"
|
85
|
+
ActiveSupport::TimeZone[time_zone] || raise(ArgumentError, "Invalid Timezone: #{time_zone}")
|
101
86
|
end
|
102
87
|
|
103
88
|
# Returns a TimeZone instance matching the time zone provided.
|
@@ -4,4 +4,5 @@ require "active_support/core_ext/time/acts_like"
|
|
4
4
|
require "active_support/core_ext/time/calculations"
|
5
5
|
require "active_support/core_ext/time/compatibility"
|
6
6
|
require "active_support/core_ext/time/conversions"
|
7
|
+
require "active_support/core_ext/time/deprecated_conversions" unless ENV["RAILS_DISABLE_DEPRECATED_TO_S_CONVERSION"]
|
7
8
|
require "active_support/core_ext/time/zones"
|
@@ -1,29 +1,5 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
require "active_support/core_ext/module/redefine_method"
|
7
|
-
URI::Parser.class_eval do
|
8
|
-
silence_redefinition_of_method :unescape
|
9
|
-
def unescape(str, escaped = /%[a-fA-F\d]{2}/)
|
10
|
-
# TODO: Are we actually sure that ASCII == UTF-8?
|
11
|
-
# YK: My initial experiments say yes, but let's be sure please
|
12
|
-
enc = str.encoding
|
13
|
-
enc = Encoding::UTF_8 if enc == Encoding::US_ASCII
|
14
|
-
str.dup.force_encoding(Encoding::ASCII_8BIT).gsub(escaped) { |match| [match[1, 2].hex].pack("C") }.force_encoding(enc)
|
15
|
-
end
|
16
|
-
end
|
17
|
-
end
|
18
|
-
|
19
|
-
module URI
|
20
|
-
class << self
|
21
|
-
def parser
|
22
|
-
ActiveSupport::Deprecation.warn(<<-MSG.squish)
|
23
|
-
URI.parser is deprecated and will be removed in Rails 6.2.
|
24
|
-
Use `URI::DEFAULT_PARSER` instead.
|
25
|
-
MSG
|
26
|
-
URI::DEFAULT_PARSER
|
27
|
-
end
|
28
|
-
end
|
29
|
-
end
|
3
|
+
ActiveSupport::Deprecation.warn(<<-MSG.squish)
|
4
|
+
`active_support/core_ext/uri` is deprecated and will be removed in Rails 7.1.
|
5
|
+
MSG
|
@@ -98,25 +98,37 @@ module ActiveSupport
|
|
98
98
|
|
99
99
|
# Declares one or more attributes that will be given both class and instance accessor methods.
|
100
100
|
def attribute(*names)
|
101
|
-
generated_attribute_methods
|
101
|
+
ActiveSupport::CodeGenerator.batch(generated_attribute_methods, __FILE__, __LINE__) do |owner|
|
102
102
|
names.each do |name|
|
103
|
-
|
104
|
-
|
103
|
+
owner.define_cached_method(name, namespace: :current_attributes) do |batch|
|
104
|
+
batch <<
|
105
|
+
"def #{name}" <<
|
106
|
+
"attributes[:#{name}]" <<
|
107
|
+
"end"
|
105
108
|
end
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
+
owner.define_cached_method("#{name}=", namespace: :current_attributes) do |batch|
|
110
|
+
batch <<
|
111
|
+
"def #{name}=(value)" <<
|
112
|
+
"attributes[:#{name}] = value" <<
|
113
|
+
"end"
|
109
114
|
end
|
110
115
|
end
|
111
116
|
end
|
112
117
|
|
113
|
-
|
114
|
-
|
115
|
-
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
|
118
|
+
ActiveSupport::CodeGenerator.batch(singleton_class, __FILE__, __LINE__) do |owner|
|
119
|
+
names.each do |name|
|
120
|
+
owner.define_cached_method(name, namespace: :current_attributes_delegation) do |batch|
|
121
|
+
batch <<
|
122
|
+
"def #{name}" <<
|
123
|
+
"instance.#{name}" <<
|
124
|
+
"end"
|
125
|
+
end
|
126
|
+
owner.define_cached_method("#{name}=", namespace: :current_attributes_delegation) do |batch|
|
127
|
+
batch <<
|
128
|
+
"def #{name}=(value)" <<
|
129
|
+
"instance.#{name} = value" <<
|
130
|
+
"end"
|
131
|
+
end
|
120
132
|
end
|
121
133
|
end
|
122
134
|
end
|
@@ -149,7 +161,7 @@ module ActiveSupport
|
|
149
161
|
end
|
150
162
|
|
151
163
|
def current_instances
|
152
|
-
|
164
|
+
IsolatedExecutionState[:current_attributes_instances] ||= {}
|
153
165
|
end
|
154
166
|
|
155
167
|
def current_instances_key
|
@@ -164,6 +176,11 @@ module ActiveSupport
|
|
164
176
|
|
165
177
|
send(name, *args, &block)
|
166
178
|
end
|
179
|
+
ruby2_keywords(:method_missing)
|
180
|
+
|
181
|
+
def respond_to_missing?(name, _)
|
182
|
+
super || instance.respond_to?(name)
|
183
|
+
end
|
167
184
|
end
|
168
185
|
|
169
186
|
attr_accessor :attributes
|
@@ -2,23 +2,19 @@
|
|
2
2
|
|
3
3
|
require "active_support/concurrency/share_lock"
|
4
4
|
|
5
|
-
module ActiveSupport
|
6
|
-
module Dependencies
|
5
|
+
module ActiveSupport # :nodoc:
|
6
|
+
module Dependencies # :nodoc:
|
7
7
|
class Interlock
|
8
8
|
def initialize # :nodoc:
|
9
9
|
@lock = ActiveSupport::Concurrency::ShareLock.new
|
10
10
|
end
|
11
11
|
|
12
|
-
def loading
|
13
|
-
@lock.exclusive(purpose: :load, compatible: [:load], after_compatible: [:load])
|
14
|
-
yield
|
15
|
-
end
|
12
|
+
def loading(&block)
|
13
|
+
@lock.exclusive(purpose: :load, compatible: [:load], after_compatible: [:load], &block)
|
16
14
|
end
|
17
15
|
|
18
|
-
def unloading
|
19
|
-
@lock.exclusive(purpose: :unload, compatible: [:load, :unload], after_compatible: [:load, :unload])
|
20
|
-
yield
|
21
|
-
end
|
16
|
+
def unloading(&block)
|
17
|
+
@lock.exclusive(purpose: :unload, compatible: [:load, :unload], after_compatible: [:load, :unload], &block)
|
22
18
|
end
|
23
19
|
|
24
20
|
def start_unloading
|
@@ -37,16 +33,12 @@ module ActiveSupport #:nodoc:
|
|
37
33
|
@lock.stop_sharing
|
38
34
|
end
|
39
35
|
|
40
|
-
def running
|
41
|
-
@lock.sharing
|
42
|
-
yield
|
43
|
-
end
|
36
|
+
def running(&block)
|
37
|
+
@lock.sharing(&block)
|
44
38
|
end
|
45
39
|
|
46
|
-
def permit_concurrent_loads
|
47
|
-
@lock.yield_shares(compatible: [:load])
|
48
|
-
yield
|
49
|
-
end
|
40
|
+
def permit_concurrent_loads(&block)
|
41
|
+
@lock.yield_shares(compatible: [:load], &block)
|
50
42
|
end
|
51
43
|
|
52
44
|
def raw_state(&block) # :nodoc:
|
@@ -0,0 +1,28 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module ActiveSupport::Dependencies::RequireDependency
|
4
|
+
# <b>Warning:</b> This method is obsolete. The semantics of the autoloader
|
5
|
+
# match Ruby's and you do not need to be defensive with load order anymore.
|
6
|
+
# Just refer to classes and modules normally.
|
7
|
+
#
|
8
|
+
# Engines that do not control the mode in which their parent application runs
|
9
|
+
# should call +require_dependency+ where needed in case the runtime mode is
|
10
|
+
# +:classic+.
|
11
|
+
def require_dependency(filename)
|
12
|
+
filename = filename.to_path if filename.respond_to?(:to_path)
|
13
|
+
|
14
|
+
unless filename.is_a?(String)
|
15
|
+
raise ArgumentError, "the file name must be either a String or implement #to_path -- you passed #{filename.inspect}"
|
16
|
+
end
|
17
|
+
|
18
|
+
if abspath = ActiveSupport::Dependencies.search_for_file(filename)
|
19
|
+
require abspath
|
20
|
+
else
|
21
|
+
require filename
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
# We could define require_dependency in Object directly, but a module makes
|
26
|
+
# the extension apparent if you list ancestors.
|
27
|
+
Object.prepend(self)
|
28
|
+
end
|