activesupport 5.1.1 → 6.1.1
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 +5 -5
- data/CHANGELOG.md +360 -442
- data/MIT-LICENSE +1 -1
- data/README.rdoc +5 -4
- data/lib/active_support/actionable_error.rb +48 -0
- data/lib/active_support/all.rb +2 -0
- data/lib/active_support/array_inquirer.rb +6 -2
- data/lib/active_support/backtrace_cleaner.rb +31 -3
- data/lib/active_support/benchmarkable.rb +3 -1
- data/lib/active_support/builder.rb +2 -0
- data/lib/active_support/cache/file_store.rb +37 -36
- data/lib/active_support/cache/mem_cache_store.rb +65 -53
- data/lib/active_support/cache/memory_store.rb +61 -33
- data/lib/active_support/cache/null_store.rb +10 -3
- data/lib/active_support/cache/redis_cache_store.rb +493 -0
- data/lib/active_support/cache/strategy/local_cache.rb +68 -22
- data/lib/active_support/cache/strategy/local_cache_middleware.rb +2 -0
- data/lib/active_support/cache.rb +305 -127
- data/lib/active_support/callbacks.rb +106 -98
- data/lib/active_support/concern.rb +79 -6
- data/lib/active_support/concurrency/load_interlock_aware_monitor.rb +35 -0
- data/lib/active_support/concurrency/share_lock.rb +2 -1
- data/lib/active_support/configurable.rb +12 -14
- data/lib/active_support/configuration_file.rb +46 -0
- data/lib/active_support/core_ext/array/access.rb +21 -7
- data/lib/active_support/core_ext/array/conversions.rb +7 -5
- data/lib/active_support/core_ext/array/extract.rb +21 -0
- data/lib/active_support/core_ext/array/extract_options.rb +2 -0
- data/lib/active_support/core_ext/array/grouping.rb +2 -0
- data/lib/active_support/core_ext/array/inquiry.rb +2 -0
- data/lib/active_support/core_ext/array/wrap.rb +2 -0
- data/lib/active_support/core_ext/array.rb +3 -1
- data/lib/active_support/core_ext/benchmark.rb +4 -2
- data/lib/active_support/core_ext/big_decimal/conversions.rb +2 -0
- data/lib/active_support/core_ext/big_decimal.rb +2 -0
- data/lib/active_support/core_ext/class/attribute.rb +50 -47
- data/lib/active_support/core_ext/class/attribute_accessors.rb +2 -0
- data/lib/active_support/core_ext/class/subclasses.rb +18 -40
- data/lib/active_support/core_ext/class.rb +2 -0
- data/lib/active_support/core_ext/date/acts_like.rb +2 -0
- data/lib/active_support/core_ext/date/blank.rb +2 -0
- data/lib/active_support/core_ext/date/calculations.rb +8 -5
- data/lib/active_support/core_ext/date/conversions.rb +12 -10
- data/lib/active_support/core_ext/date/zones.rb +2 -0
- data/lib/active_support/core_ext/date.rb +2 -0
- data/lib/active_support/core_ext/date_and_time/calculations.rb +61 -37
- data/lib/active_support/core_ext/date_and_time/compatibility.rb +18 -1
- data/lib/active_support/core_ext/date_and_time/zones.rb +2 -1
- data/lib/active_support/core_ext/date_time/acts_like.rb +2 -0
- data/lib/active_support/core_ext/date_time/blank.rb +2 -0
- data/lib/active_support/core_ext/date_time/calculations.rb +3 -1
- data/lib/active_support/core_ext/date_time/compatibility.rb +7 -5
- data/lib/active_support/core_ext/date_time/conversions.rb +2 -1
- data/lib/active_support/core_ext/date_time.rb +2 -0
- data/lib/active_support/core_ext/digest/uuid.rb +3 -1
- data/lib/active_support/core_ext/digest.rb +3 -0
- data/lib/active_support/core_ext/enumerable.rb +174 -71
- data/lib/active_support/core_ext/file/atomic.rb +3 -1
- data/lib/active_support/core_ext/file.rb +2 -0
- data/lib/active_support/core_ext/hash/conversions.rb +7 -5
- data/lib/active_support/core_ext/hash/deep_merge.rb +8 -12
- data/lib/active_support/core_ext/hash/deep_transform_values.rb +46 -0
- data/lib/active_support/core_ext/hash/except.rb +4 -2
- data/lib/active_support/core_ext/hash/indifferent_access.rb +2 -0
- data/lib/active_support/core_ext/hash/keys.rb +3 -30
- data/lib/active_support/core_ext/hash/reverse_merge.rb +5 -2
- data/lib/active_support/core_ext/hash/slice.rb +8 -29
- data/lib/active_support/core_ext/hash.rb +3 -2
- data/lib/active_support/core_ext/integer/inflections.rb +2 -0
- data/lib/active_support/core_ext/integer/multiple.rb +3 -1
- data/lib/active_support/core_ext/integer/time.rb +7 -14
- data/lib/active_support/core_ext/integer.rb +2 -0
- data/lib/active_support/core_ext/kernel/concern.rb +2 -0
- data/lib/active_support/core_ext/kernel/reporting.rb +2 -0
- data/lib/active_support/core_ext/kernel/singleton_class.rb +2 -0
- data/lib/active_support/core_ext/kernel.rb +2 -1
- data/lib/active_support/core_ext/load_error.rb +3 -8
- data/lib/active_support/core_ext/marshal.rb +4 -0
- data/lib/active_support/core_ext/module/aliasing.rb +2 -0
- data/lib/active_support/core_ext/module/anonymous.rb +2 -0
- data/lib/active_support/core_ext/module/attr_internal.rb +4 -2
- data/lib/active_support/core_ext/module/attribute_accessors.rb +44 -56
- data/lib/active_support/core_ext/module/attribute_accessors_per_thread.rb +18 -18
- data/lib/active_support/core_ext/module/concerning.rb +15 -10
- data/lib/active_support/core_ext/module/delegation.rb +103 -58
- data/lib/active_support/core_ext/module/deprecation.rb +2 -0
- data/lib/active_support/core_ext/module/introspection.rb +18 -15
- data/lib/active_support/core_ext/module/redefine_method.rb +40 -0
- data/lib/active_support/core_ext/module/remove_method.rb +5 -23
- data/lib/active_support/core_ext/module.rb +3 -1
- data/lib/active_support/core_ext/name_error.rb +36 -2
- data/lib/active_support/core_ext/numeric/bytes.rb +2 -0
- data/lib/active_support/core_ext/numeric/conversions.rb +131 -129
- data/lib/active_support/core_ext/numeric/time.rb +7 -15
- data/lib/active_support/core_ext/numeric.rb +2 -1
- data/lib/active_support/core_ext/object/acts_like.rb +12 -1
- data/lib/active_support/core_ext/object/blank.rb +13 -3
- data/lib/active_support/core_ext/object/conversions.rb +2 -0
- data/lib/active_support/core_ext/object/deep_dup.rb +3 -1
- data/lib/active_support/core_ext/object/duplicable.rb +6 -101
- data/lib/active_support/core_ext/object/inclusion.rb +2 -0
- data/lib/active_support/core_ext/object/instance_variables.rb +2 -0
- data/lib/active_support/core_ext/object/json.rb +22 -2
- data/lib/active_support/core_ext/object/to_param.rb +2 -0
- data/lib/active_support/core_ext/object/to_query.rb +7 -2
- data/lib/active_support/core_ext/object/try.rb +19 -7
- data/lib/active_support/core_ext/object/with_options.rb +4 -2
- data/lib/active_support/core_ext/object.rb +2 -0
- data/lib/active_support/core_ext/range/compare_range.rb +82 -0
- data/lib/active_support/core_ext/range/conversions.rb +35 -25
- data/lib/active_support/core_ext/range/each.rb +5 -2
- data/lib/active_support/core_ext/range/include_time_with_zone.rb +28 -0
- data/lib/active_support/core_ext/range/overlaps.rb +2 -0
- data/lib/active_support/core_ext/range.rb +4 -1
- data/lib/active_support/core_ext/regexp.rb +10 -5
- data/lib/active_support/core_ext/securerandom.rb +25 -3
- data/lib/active_support/core_ext/string/access.rb +7 -16
- data/lib/active_support/core_ext/string/behavior.rb +2 -0
- data/lib/active_support/core_ext/string/conversions.rb +3 -0
- data/lib/active_support/core_ext/string/exclude.rb +2 -0
- data/lib/active_support/core_ext/string/filters.rb +44 -1
- data/lib/active_support/core_ext/string/indent.rb +2 -0
- data/lib/active_support/core_ext/string/inflections.rb +69 -16
- data/lib/active_support/core_ext/string/inquiry.rb +3 -0
- data/lib/active_support/core_ext/string/multibyte.rb +9 -4
- data/lib/active_support/core_ext/string/output_safety.rb +76 -20
- data/lib/active_support/core_ext/string/starts_ends_with.rb +4 -2
- data/lib/active_support/core_ext/string/strip.rb +5 -1
- data/lib/active_support/core_ext/string/zones.rb +2 -0
- data/lib/active_support/core_ext/string.rb +2 -0
- data/lib/active_support/core_ext/symbol/starts_ends_with.rb +14 -0
- data/lib/active_support/core_ext/symbol.rb +3 -0
- data/lib/active_support/core_ext/time/acts_like.rb +2 -0
- data/lib/active_support/core_ext/time/calculations.rb +73 -18
- data/lib/active_support/core_ext/time/compatibility.rb +4 -2
- data/lib/active_support/core_ext/time/conversions.rb +4 -0
- data/lib/active_support/core_ext/time/zones.rb +6 -4
- data/lib/active_support/core_ext/time.rb +2 -0
- data/lib/active_support/core_ext/uri.rb +11 -6
- data/lib/active_support/core_ext.rb +3 -1
- data/lib/active_support/current_attributes/test_helper.rb +13 -0
- data/lib/active_support/current_attributes.rb +208 -0
- data/lib/active_support/dependencies/autoload.rb +2 -0
- data/lib/active_support/dependencies/interlock.rb +2 -0
- data/lib/active_support/dependencies/zeitwerk_integration.rb +117 -0
- data/lib/active_support/dependencies.rb +135 -60
- data/lib/active_support/deprecation/behaviors.rb +43 -11
- data/lib/active_support/deprecation/constant_accessor.rb +4 -2
- data/lib/active_support/deprecation/disallowed.rb +56 -0
- data/lib/active_support/deprecation/instance_delegator.rb +2 -1
- data/lib/active_support/deprecation/method_wrappers.rb +30 -15
- data/lib/active_support/deprecation/proxy_wrappers.rb +32 -6
- data/lib/active_support/deprecation/reporting.rb +54 -9
- data/lib/active_support/deprecation.rb +9 -2
- data/lib/active_support/descendants_tracker.rb +61 -9
- data/lib/active_support/digest.rb +20 -0
- data/lib/active_support/duration/iso8601_parser.rb +6 -6
- data/lib/active_support/duration/iso8601_serializer.rb +20 -14
- data/lib/active_support/duration.rb +179 -41
- data/lib/active_support/encrypted_configuration.rb +45 -0
- data/lib/active_support/encrypted_file.rb +117 -0
- data/lib/active_support/environment_inquirer.rb +20 -0
- data/lib/active_support/evented_file_update_checker.rb +84 -117
- data/lib/active_support/execution_wrapper.rb +3 -0
- data/lib/active_support/executor.rb +2 -0
- data/lib/active_support/file_update_checker.rb +2 -1
- data/lib/active_support/fork_tracker.rb +62 -0
- data/lib/active_support/gem_version.rb +3 -1
- data/lib/active_support/gzip.rb +2 -0
- data/lib/active_support/hash_with_indifferent_access.rb +134 -37
- data/lib/active_support/i18n.rb +4 -1
- data/lib/active_support/i18n_railtie.rb +20 -11
- data/lib/active_support/inflections.rb +2 -0
- data/lib/active_support/inflector/inflections.rb +19 -8
- data/lib/active_support/inflector/methods.rb +87 -77
- data/lib/active_support/inflector/transliterate.rb +56 -18
- data/lib/active_support/inflector.rb +2 -0
- data/lib/active_support/json/decoding.rb +27 -26
- data/lib/active_support/json/encoding.rb +13 -3
- data/lib/active_support/json.rb +2 -0
- data/lib/active_support/key_generator.rb +3 -33
- data/lib/active_support/lazy_load_hooks.rb +33 -10
- data/lib/active_support/locale/en.rb +33 -0
- data/lib/active_support/locale/en.yml +7 -3
- data/lib/active_support/log_subscriber/test_helper.rb +2 -0
- data/lib/active_support/log_subscriber.rb +46 -13
- data/lib/active_support/logger.rb +4 -17
- data/lib/active_support/logger_silence.rb +13 -20
- data/lib/active_support/logger_thread_safe_level.rb +54 -7
- data/lib/active_support/message_encryptor.rb +101 -33
- data/lib/active_support/message_verifier.rb +85 -14
- data/lib/active_support/messages/metadata.rb +80 -0
- data/lib/active_support/messages/rotation_configuration.rb +23 -0
- data/lib/active_support/messages/rotator.rb +57 -0
- data/lib/active_support/multibyte/chars.rb +12 -68
- data/lib/active_support/multibyte/unicode.rb +17 -327
- data/lib/active_support/multibyte.rb +2 -0
- data/lib/active_support/notifications/fanout.rb +118 -16
- data/lib/active_support/notifications/instrumenter.rb +73 -9
- data/lib/active_support/notifications.rb +74 -8
- data/lib/active_support/number_helper/number_converter.rb +7 -6
- data/lib/active_support/number_helper/number_to_currency_converter.rb +6 -9
- data/lib/active_support/number_helper/number_to_delimited_converter.rb +5 -2
- data/lib/active_support/number_helper/number_to_human_converter.rb +8 -7
- data/lib/active_support/number_helper/number_to_human_size_converter.rb +6 -3
- data/lib/active_support/number_helper/number_to_percentage_converter.rb +5 -1
- data/lib/active_support/number_helper/number_to_phone_converter.rb +5 -2
- data/lib/active_support/number_helper/number_to_rounded_converter.rb +16 -53
- data/lib/active_support/number_helper/rounding_helper.rb +50 -0
- data/lib/active_support/number_helper.rb +41 -12
- data/lib/active_support/option_merger.rb +24 -3
- data/lib/active_support/ordered_hash.rb +3 -1
- data/lib/active_support/ordered_options.rb +17 -5
- data/lib/active_support/parameter_filter.rb +133 -0
- data/lib/active_support/per_thread_registry.rb +3 -1
- data/lib/active_support/proxy_object.rb +2 -0
- data/lib/active_support/rails.rb +3 -10
- data/lib/active_support/railtie.rb +60 -9
- data/lib/active_support/reloader.rb +11 -10
- data/lib/active_support/rescuable.rb +7 -6
- data/lib/active_support/secure_compare_rotator.rb +51 -0
- data/lib/active_support/security_utils.rb +26 -15
- data/lib/active_support/string_inquirer.rb +6 -3
- data/lib/active_support/subscriber.rb +74 -24
- data/lib/active_support/tagged_logging.rb +44 -8
- data/lib/active_support/test_case.rb +94 -2
- data/lib/active_support/testing/assertions.rb +58 -20
- data/lib/active_support/testing/autorun.rb +2 -4
- data/lib/active_support/testing/constant_lookup.rb +2 -0
- data/lib/active_support/testing/declarative.rb +2 -0
- data/lib/active_support/testing/deprecation.rb +2 -1
- data/lib/active_support/testing/file_fixtures.rb +4 -0
- data/lib/active_support/testing/isolation.rb +8 -4
- data/lib/active_support/testing/method_call_assertions.rb +30 -1
- 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/parallelization.rb +51 -0
- data/lib/active_support/testing/setup_and_teardown.rb +12 -7
- data/lib/active_support/testing/stream.rb +3 -2
- data/lib/active_support/testing/tagged_logging.rb +2 -0
- data/lib/active_support/testing/time_helpers.rb +78 -13
- data/lib/active_support/time.rb +2 -0
- data/lib/active_support/time_with_zone.rb +113 -41
- data/lib/active_support/values/time_zone.rb +55 -25
- data/lib/active_support/version.rb +2 -0
- data/lib/active_support/xml_mini/jdom.rb +5 -4
- data/lib/active_support/xml_mini/libxml.rb +4 -2
- data/lib/active_support/xml_mini/libxmlsax.rb +6 -4
- data/lib/active_support/xml_mini/nokogiri.rb +4 -2
- data/lib/active_support/xml_mini/nokogirisax.rb +5 -3
- data/lib/active_support/xml_mini/rexml.rb +12 -3
- data/lib/active_support/xml_mini.rb +5 -11
- data/lib/active_support.rb +18 -13
- metadata +81 -35
- data/lib/active_support/core_ext/array/prepend_and_append.rb +0 -7
- data/lib/active_support/core_ext/hash/compact.rb +0 -27
- data/lib/active_support/core_ext/hash/transform_values.rb +0 -30
- data/lib/active_support/core_ext/kernel/agnostics.rb +0 -11
- data/lib/active_support/core_ext/module/reachable.rb +0 -8
- data/lib/active_support/core_ext/numeric/inquiry.rb +0 -26
- data/lib/active_support/core_ext/range/include_range.rb +0 -23
- data/lib/active_support/values/unicode_tables.dat +0 -0
@@ -1,14 +1,14 @@
|
|
1
|
-
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
2
3
|
require "active_support/core_ext/array/extract_options"
|
4
|
+
require "active_support/core_ext/module/redefine_method"
|
3
5
|
|
4
6
|
module ActiveSupport
|
5
7
|
class Deprecation
|
6
8
|
module MethodWrapper
|
7
9
|
# Declare that a method has been deprecated.
|
8
10
|
#
|
9
|
-
#
|
10
|
-
# extend self
|
11
|
-
#
|
11
|
+
# class Fred
|
12
12
|
# def aaa; end
|
13
13
|
# def bbb; end
|
14
14
|
# def ccc; end
|
@@ -20,15 +20,15 @@ module ActiveSupport
|
|
20
20
|
# ActiveSupport::Deprecation.deprecate_methods(Fred, :aaa, bbb: :zzz, ccc: 'use Bar#ccc instead')
|
21
21
|
# # => Fred
|
22
22
|
#
|
23
|
-
# Fred.aaa
|
23
|
+
# Fred.new.aaa
|
24
24
|
# # DEPRECATION WARNING: aaa is deprecated and will be removed from Rails 5.1. (called from irb_binding at (irb):10)
|
25
25
|
# # => nil
|
26
26
|
#
|
27
|
-
# Fred.bbb
|
27
|
+
# Fred.new.bbb
|
28
28
|
# # DEPRECATION WARNING: bbb is deprecated and will be removed from Rails 5.1 (use zzz instead). (called from irb_binding at (irb):11)
|
29
29
|
# # => nil
|
30
30
|
#
|
31
|
-
# Fred.ccc
|
31
|
+
# Fred.new.ccc
|
32
32
|
# # DEPRECATION WARNING: ccc is deprecated and will be removed from Rails 5.1 (use Bar#ccc instead). (called from irb_binding at (irb):12)
|
33
33
|
# # => nil
|
34
34
|
#
|
@@ -37,7 +37,7 @@ module ActiveSupport
|
|
37
37
|
# ActiveSupport::Deprecation.deprecate_methods(Fred, ddd: :zzz, deprecator: custom_deprecator)
|
38
38
|
# # => [:ddd]
|
39
39
|
#
|
40
|
-
# Fred.ddd
|
40
|
+
# Fred.new.ddd
|
41
41
|
# DEPRECATION WARNING: ddd is deprecated and will be removed from MyGem next-release (use zzz instead). (called from irb_binding at (irb):15)
|
42
42
|
# # => nil
|
43
43
|
#
|
@@ -46,24 +46,39 @@ module ActiveSupport
|
|
46
46
|
# custom_deprecator.deprecate_methods(Fred, eee: :zzz)
|
47
47
|
# # => [:eee]
|
48
48
|
#
|
49
|
-
# Fred.eee
|
49
|
+
# Fred.new.eee
|
50
50
|
# DEPRECATION WARNING: eee is deprecated and will be removed from MyGem next-release (use zzz instead). (called from irb_binding at (irb):18)
|
51
51
|
# # => nil
|
52
52
|
def deprecate_methods(target_module, *method_names)
|
53
53
|
options = method_names.extract_options!
|
54
54
|
deprecator = options.delete(:deprecator) || self
|
55
55
|
method_names += options.keys
|
56
|
+
mod = nil
|
56
57
|
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
58
|
+
method_names.each do |method_name|
|
59
|
+
message = options[method_name]
|
60
|
+
if target_module.method_defined?(method_name) || target_module.private_method_defined?(method_name)
|
61
|
+
method = target_module.instance_method(method_name)
|
62
|
+
target_module.module_eval do
|
63
|
+
redefine_method(method_name) do |*args, &block|
|
64
|
+
deprecator.deprecation_warning(method_name, message)
|
65
|
+
method.bind(self).call(*args, &block)
|
66
|
+
end
|
67
|
+
ruby2_keywords(method_name) if respond_to?(:ruby2_keywords, true)
|
68
|
+
end
|
69
|
+
else
|
70
|
+
mod ||= Module.new
|
71
|
+
mod.module_eval do
|
72
|
+
define_method(method_name) do |*args, &block|
|
73
|
+
deprecator.deprecation_warning(method_name, message)
|
74
|
+
super(*args, &block)
|
75
|
+
end
|
76
|
+
ruby2_keywords(method_name) if respond_to?(:ruby2_keywords, true)
|
62
77
|
end
|
63
78
|
end
|
64
79
|
end
|
65
80
|
|
66
|
-
target_module.prepend(mod)
|
81
|
+
target_module.prepend(mod) if mod
|
67
82
|
end
|
68
83
|
end
|
69
84
|
end
|
@@ -1,5 +1,4 @@
|
|
1
|
-
|
2
|
-
require "active_support/core_ext/regexp"
|
1
|
+
# frozen_string_literal: true
|
3
2
|
|
4
3
|
module ActiveSupport
|
5
4
|
class Deprecation
|
@@ -112,7 +111,7 @@ module ActiveSupport
|
|
112
111
|
#
|
113
112
|
# PLANETS = %w(mercury venus earth mars jupiter saturn uranus neptune pluto)
|
114
113
|
#
|
115
|
-
# (In a later update, the original implementation of `PLANETS` has been removed.)
|
114
|
+
# # (In a later update, the original implementation of `PLANETS` has been removed.)
|
116
115
|
#
|
117
116
|
# PLANETS_POST_2006 = %w(mercury venus earth mars jupiter saturn uranus neptune)
|
118
117
|
# PLANETS = ActiveSupport::Deprecation::DeprecatedConstantProxy.new('PLANETS', 'PLANETS_POST_2006')
|
@@ -121,14 +120,35 @@ module ActiveSupport
|
|
121
120
|
# # => DEPRECATION WARNING: PLANETS is deprecated! Use PLANETS_POST_2006 instead.
|
122
121
|
# (Backtrace information…)
|
123
122
|
# ["Mercury", "Venus", "Earth", "Mars", "Jupiter", "Saturn", "Uranus", "Neptune"]
|
124
|
-
class DeprecatedConstantProxy <
|
123
|
+
class DeprecatedConstantProxy < Module
|
124
|
+
def self.new(*args, **options, &block)
|
125
|
+
object = args.first
|
126
|
+
|
127
|
+
return object unless object
|
128
|
+
super
|
129
|
+
end
|
130
|
+
|
125
131
|
def initialize(old_const, new_const, deprecator = ActiveSupport::Deprecation.instance, message: "#{old_const} is deprecated! Use #{new_const} instead.")
|
132
|
+
Kernel.require "active_support/inflector/methods"
|
133
|
+
|
126
134
|
@old_const = old_const
|
127
135
|
@new_const = new_const
|
128
136
|
@deprecator = deprecator
|
129
137
|
@message = message
|
130
138
|
end
|
131
139
|
|
140
|
+
instance_methods.each { |m| undef_method m unless /^__|^object_id$/.match?(m) }
|
141
|
+
|
142
|
+
# Don't give a deprecation warning on inspect since test/unit and error
|
143
|
+
# logs rely on it for diagnostics.
|
144
|
+
def inspect
|
145
|
+
target.inspect
|
146
|
+
end
|
147
|
+
|
148
|
+
# Don't give a deprecation warning on methods that IRB may invoke
|
149
|
+
# during tab-completion.
|
150
|
+
delegate :hash, :instance_methods, :name, :respond_to?, to: :target
|
151
|
+
|
132
152
|
# Returns the class of the new constant.
|
133
153
|
#
|
134
154
|
# PLANETS_POST_2006 = %w(mercury venus earth mars jupiter saturn uranus neptune)
|
@@ -143,8 +163,14 @@ module ActiveSupport
|
|
143
163
|
ActiveSupport::Inflector.constantize(@new_const.to_s)
|
144
164
|
end
|
145
165
|
|
146
|
-
def
|
147
|
-
@deprecator.warn(@message,
|
166
|
+
def const_missing(name)
|
167
|
+
@deprecator.warn(@message, caller_locations)
|
168
|
+
target.const_get(name)
|
169
|
+
end
|
170
|
+
|
171
|
+
def method_missing(called, *args, &block)
|
172
|
+
@deprecator.warn(@message, caller_locations)
|
173
|
+
target.__send__(called, *args, &block)
|
148
174
|
end
|
149
175
|
end
|
150
176
|
end
|
@@ -1,10 +1,12 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require "rbconfig"
|
2
4
|
|
3
5
|
module ActiveSupport
|
4
6
|
class Deprecation
|
5
7
|
module Reporting
|
6
8
|
# Whether to print a message (silent mode)
|
7
|
-
|
9
|
+
attr_writer :silenced
|
8
10
|
# Name of gem where method is deprecated
|
9
11
|
attr_accessor :gem_name
|
10
12
|
|
@@ -18,7 +20,11 @@ module ActiveSupport
|
|
18
20
|
|
19
21
|
callstack ||= caller_locations(2)
|
20
22
|
deprecation_message(callstack, message).tap do |m|
|
21
|
-
|
23
|
+
if deprecation_disallowed?(message)
|
24
|
+
disallowed_behavior.each { |b| b.call(m, callstack, deprecation_horizon, gem_name) }
|
25
|
+
else
|
26
|
+
behavior.each { |b| b.call(m, callstack, deprecation_horizon, gem_name) }
|
27
|
+
end
|
22
28
|
end
|
23
29
|
end
|
24
30
|
|
@@ -31,11 +37,50 @@ module ActiveSupport
|
|
31
37
|
# ActiveSupport::Deprecation.warn('something broke!')
|
32
38
|
# end
|
33
39
|
# # => nil
|
34
|
-
def silence
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
40
|
+
def silence(&block)
|
41
|
+
@silenced_thread.bind(true, &block)
|
42
|
+
end
|
43
|
+
|
44
|
+
# Allow previously disallowed deprecation warnings within the block.
|
45
|
+
# <tt>allowed_warnings</tt> can be an array containing strings, symbols, or regular
|
46
|
+
# expressions. (Symbols are treated as strings). These are compared against
|
47
|
+
# the text of deprecation warning messages generated within the block.
|
48
|
+
# Matching warnings will be exempt from the rules set by
|
49
|
+
# +ActiveSupport::Deprecation.disallowed_warnings+
|
50
|
+
#
|
51
|
+
# The optional <tt>if:</tt> argument accepts a truthy/falsy value or an object that
|
52
|
+
# responds to <tt>.call</tt>. If truthy, then matching warnings will be allowed.
|
53
|
+
# If falsey then the method yields to the block without allowing the warning.
|
54
|
+
#
|
55
|
+
# ActiveSupport::Deprecation.disallowed_behavior = :raise
|
56
|
+
# ActiveSupport::Deprecation.disallowed_warnings = [
|
57
|
+
# "something broke"
|
58
|
+
# ]
|
59
|
+
#
|
60
|
+
# ActiveSupport::Deprecation.warn('something broke!')
|
61
|
+
# # => ActiveSupport::DeprecationException
|
62
|
+
#
|
63
|
+
# ActiveSupport::Deprecation.allow ['something broke'] do
|
64
|
+
# ActiveSupport::Deprecation.warn('something broke!')
|
65
|
+
# end
|
66
|
+
# # => nil
|
67
|
+
#
|
68
|
+
# ActiveSupport::Deprecation.allow ['something broke'], if: Rails.env.production? do
|
69
|
+
# ActiveSupport::Deprecation.warn('something broke!')
|
70
|
+
# end
|
71
|
+
# # => ActiveSupport::DeprecationException for dev/test, nil for production
|
72
|
+
def allow(allowed_warnings = :all, if: true, &block)
|
73
|
+
conditional = binding.local_variable_get(:if)
|
74
|
+
conditional = conditional.call if conditional.respond_to?(:call)
|
75
|
+
if conditional
|
76
|
+
@explicitly_allowed_warnings.bind(allowed_warnings, &block)
|
77
|
+
else
|
78
|
+
yield
|
79
|
+
end
|
80
|
+
end
|
81
|
+
|
82
|
+
def silenced
|
83
|
+
@silenced || @silenced_thread.value
|
39
84
|
end
|
40
85
|
|
41
86
|
def deprecation_warning(deprecated_method_name, message = nil, caller_backtrace = nil)
|
@@ -59,7 +104,7 @@ module ActiveSupport
|
|
59
104
|
case message
|
60
105
|
when Symbol then "#{warning} (use #{message} instead)"
|
61
106
|
when String then "#{warning} (#{message})"
|
62
|
-
|
107
|
+
else warning
|
63
108
|
end
|
64
109
|
end
|
65
110
|
|
@@ -102,7 +147,7 @@ module ActiveSupport
|
|
102
147
|
end
|
103
148
|
end
|
104
149
|
|
105
|
-
RAILS_GEM_ROOT = File.expand_path("
|
150
|
+
RAILS_GEM_ROOT = File.expand_path("../../../..", __dir__) + "/"
|
106
151
|
|
107
152
|
def ignored_callstack(path)
|
108
153
|
path.start_with?(RAILS_GEM_ROOT) || path.start_with?(RbConfig::CONFIG["rubylibdir"])
|
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require "singleton"
|
2
4
|
|
3
5
|
module ActiveSupport
|
@@ -15,30 +17,35 @@ module ActiveSupport
|
|
15
17
|
require "active_support/deprecation/instance_delegator"
|
16
18
|
require "active_support/deprecation/behaviors"
|
17
19
|
require "active_support/deprecation/reporting"
|
20
|
+
require "active_support/deprecation/disallowed"
|
18
21
|
require "active_support/deprecation/constant_accessor"
|
19
22
|
require "active_support/deprecation/method_wrappers"
|
20
23
|
require "active_support/deprecation/proxy_wrappers"
|
21
24
|
require "active_support/core_ext/module/deprecation"
|
25
|
+
require "concurrent/atomic/thread_local_var"
|
22
26
|
|
23
27
|
include Singleton
|
24
28
|
include InstanceDelegator
|
25
29
|
include Behavior
|
26
30
|
include Reporting
|
31
|
+
include Disallowed
|
27
32
|
include MethodWrapper
|
28
33
|
|
29
34
|
# The version number in which the deprecated behavior will be removed, by default.
|
30
35
|
attr_accessor :deprecation_horizon
|
31
36
|
|
32
37
|
# It accepts two parameters on initialization. The first is a version of library
|
33
|
-
# and the second is a library name
|
38
|
+
# and the second is a library name.
|
34
39
|
#
|
35
40
|
# ActiveSupport::Deprecation.new('2.0', 'MyLibrary')
|
36
|
-
def initialize(deprecation_horizon = "
|
41
|
+
def initialize(deprecation_horizon = "6.2", gem_name = "Rails")
|
37
42
|
self.gem_name = gem_name
|
38
43
|
self.deprecation_horizon = deprecation_horizon
|
39
44
|
# By default, warnings are not silenced and debugging is off.
|
40
45
|
self.silenced = false
|
41
46
|
self.debug = false
|
47
|
+
@silenced_thread = Concurrent::ThreadLocalVar.new(false)
|
48
|
+
@explicitly_allowed_warnings = Concurrent::ThreadLocalVar.new(nil)
|
42
49
|
end
|
43
50
|
end
|
44
51
|
end
|
@@ -1,3 +1,7 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require "weakref"
|
4
|
+
|
1
5
|
module ActiveSupport
|
2
6
|
# This module provides an internal implementation to track descendants
|
3
7
|
# which is faster than iterating through ObjectSpace.
|
@@ -6,8 +10,10 @@ module ActiveSupport
|
|
6
10
|
|
7
11
|
class << self
|
8
12
|
def direct_descendants(klass)
|
9
|
-
@@direct_descendants[klass]
|
13
|
+
descendants = @@direct_descendants[klass]
|
14
|
+
descendants ? descendants.to_a : []
|
10
15
|
end
|
16
|
+
alias_method :subclasses, :direct_descendants
|
11
17
|
|
12
18
|
def descendants(klass)
|
13
19
|
arr = []
|
@@ -18,10 +24,10 @@ module ActiveSupport
|
|
18
24
|
def clear
|
19
25
|
if defined? ActiveSupport::Dependencies
|
20
26
|
@@direct_descendants.each do |klass, descendants|
|
21
|
-
if
|
27
|
+
if Dependencies.autoloaded?(klass)
|
22
28
|
@@direct_descendants.delete(klass)
|
23
29
|
else
|
24
|
-
descendants.reject! { |v|
|
30
|
+
descendants.reject! { |v| Dependencies.autoloaded?(v) }
|
25
31
|
end
|
26
32
|
end
|
27
33
|
else
|
@@ -32,16 +38,18 @@ module ActiveSupport
|
|
32
38
|
# This is the only method that is not thread safe, but is only ever called
|
33
39
|
# during the eager loading phase.
|
34
40
|
def store_inherited(klass, descendant)
|
35
|
-
(@@direct_descendants[klass] ||=
|
41
|
+
(@@direct_descendants[klass] ||= DescendantsArray.new) << descendant
|
36
42
|
end
|
37
43
|
|
38
44
|
private
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
45
|
+
def accumulate_descendants(klass, acc)
|
46
|
+
if direct_descendants = @@direct_descendants[klass]
|
47
|
+
direct_descendants.each do |direct_descendant|
|
48
|
+
acc << direct_descendant
|
49
|
+
accumulate_descendants(direct_descendant, acc)
|
50
|
+
end
|
51
|
+
end
|
43
52
|
end
|
44
|
-
end
|
45
53
|
end
|
46
54
|
|
47
55
|
def inherited(base)
|
@@ -52,9 +60,53 @@ module ActiveSupport
|
|
52
60
|
def direct_descendants
|
53
61
|
DescendantsTracker.direct_descendants(self)
|
54
62
|
end
|
63
|
+
alias_method :subclasses, :direct_descendants
|
55
64
|
|
56
65
|
def descendants
|
57
66
|
DescendantsTracker.descendants(self)
|
58
67
|
end
|
68
|
+
|
69
|
+
# DescendantsArray is an array that contains weak references to classes.
|
70
|
+
class DescendantsArray # :nodoc:
|
71
|
+
include Enumerable
|
72
|
+
|
73
|
+
def initialize
|
74
|
+
@refs = []
|
75
|
+
end
|
76
|
+
|
77
|
+
def initialize_copy(orig)
|
78
|
+
@refs = @refs.dup
|
79
|
+
end
|
80
|
+
|
81
|
+
def <<(klass)
|
82
|
+
@refs << WeakRef.new(klass)
|
83
|
+
end
|
84
|
+
|
85
|
+
def each
|
86
|
+
@refs.reject! do |ref|
|
87
|
+
yield ref.__getobj__
|
88
|
+
false
|
89
|
+
rescue WeakRef::RefError
|
90
|
+
true
|
91
|
+
end
|
92
|
+
self
|
93
|
+
end
|
94
|
+
|
95
|
+
def refs_size
|
96
|
+
@refs.size
|
97
|
+
end
|
98
|
+
|
99
|
+
def cleanup!
|
100
|
+
@refs.delete_if { |ref| !ref.weakref_alive? }
|
101
|
+
end
|
102
|
+
|
103
|
+
def reject!
|
104
|
+
@refs.reject! do |ref|
|
105
|
+
yield ref.__getobj__
|
106
|
+
rescue WeakRef::RefError
|
107
|
+
true
|
108
|
+
end
|
109
|
+
end
|
110
|
+
end
|
59
111
|
end
|
60
112
|
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module ActiveSupport
|
4
|
+
class Digest #:nodoc:
|
5
|
+
class <<self
|
6
|
+
def hash_digest_class
|
7
|
+
@hash_digest_class ||= ::Digest::MD5
|
8
|
+
end
|
9
|
+
|
10
|
+
def hash_digest_class=(klass)
|
11
|
+
raise ArgumentError, "#{klass} is expected to implement hexdigest class method" unless klass.respond_to?(:hexdigest)
|
12
|
+
@hash_digest_class = klass
|
13
|
+
end
|
14
|
+
|
15
|
+
def hexdigest(arg)
|
16
|
+
hash_digest_class.hexdigest(arg)[0...32]
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
@@ -1,19 +1,20 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require "strscan"
|
2
|
-
require "active_support/core_ext/regexp"
|
3
4
|
|
4
5
|
module ActiveSupport
|
5
6
|
class Duration
|
6
7
|
# Parses a string formatted according to ISO 8601 Duration into the hash.
|
7
8
|
#
|
8
|
-
# See {ISO 8601}[
|
9
|
+
# See {ISO 8601}[https://en.wikipedia.org/wiki/ISO_8601#Durations] for more information.
|
9
10
|
#
|
10
11
|
# This parser allows negative parts to be present in pattern.
|
11
12
|
class ISO8601Parser # :nodoc:
|
12
13
|
class ParsingError < ::ArgumentError; end
|
13
14
|
|
14
15
|
PERIOD_OR_COMMA = /\.|,/
|
15
|
-
PERIOD = "."
|
16
|
-
COMMA = ","
|
16
|
+
PERIOD = "."
|
17
|
+
COMMA = ","
|
17
18
|
|
18
19
|
SIGN_MARKER = /\A\-|\+|/
|
19
20
|
DATE_MARKER = /P/
|
@@ -79,7 +80,6 @@ module ActiveSupport
|
|
79
80
|
end
|
80
81
|
|
81
82
|
private
|
82
|
-
|
83
83
|
def finished?
|
84
84
|
scanner.eos?
|
85
85
|
end
|
@@ -116,7 +116,7 @@ module ActiveSupport
|
|
116
116
|
raise_parsing_error "(only last part can be fractional)"
|
117
117
|
end
|
118
118
|
|
119
|
-
|
119
|
+
true
|
120
120
|
end
|
121
121
|
end
|
122
122
|
end
|
@@ -1,10 +1,13 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require "active_support/core_ext/object/blank"
|
2
|
-
require "active_support/core_ext/hash/transform_values"
|
3
4
|
|
4
5
|
module ActiveSupport
|
5
6
|
class Duration
|
6
7
|
# Serializes duration to string according to ISO 8601 Duration format.
|
7
8
|
class ISO8601Serializer # :nodoc:
|
9
|
+
DATE_COMPONENTS = %i(years months days)
|
10
|
+
|
8
11
|
def initialize(duration, precision: nil)
|
9
12
|
@duration = duration
|
10
13
|
@precision = precision
|
@@ -12,26 +15,25 @@ module ActiveSupport
|
|
12
15
|
|
13
16
|
# Builds and returns output string.
|
14
17
|
def serialize
|
15
|
-
parts
|
16
|
-
return "PT0S"
|
18
|
+
parts = normalize
|
19
|
+
return "PT0S" if parts.empty?
|
17
20
|
|
18
|
-
output = "P"
|
21
|
+
output = +"P"
|
19
22
|
output << "#{parts[:years]}Y" if parts.key?(:years)
|
20
23
|
output << "#{parts[:months]}M" if parts.key?(:months)
|
21
|
-
output << "#{parts[:weeks]}W" if parts.key?(:weeks)
|
22
24
|
output << "#{parts[:days]}D" if parts.key?(:days)
|
23
|
-
|
25
|
+
output << "#{parts[:weeks]}W" if parts.key?(:weeks)
|
26
|
+
time = +""
|
24
27
|
time << "#{parts[:hours]}H" if parts.key?(:hours)
|
25
28
|
time << "#{parts[:minutes]}M" if parts.key?(:minutes)
|
26
29
|
if parts.key?(:seconds)
|
27
30
|
time << "#{sprintf(@precision ? "%0.0#{@precision}f" : '%g', parts[:seconds])}S"
|
28
31
|
end
|
29
32
|
output << "T#{time}" unless time.empty?
|
30
|
-
|
33
|
+
output
|
31
34
|
end
|
32
35
|
|
33
36
|
private
|
34
|
-
|
35
37
|
# Return pair of duration's parts and whole duration sign.
|
36
38
|
# Parts are summarized (as they can become repetitive due to addition, etc).
|
37
39
|
# Zero parts are removed as not significant.
|
@@ -40,13 +42,17 @@ module ActiveSupport
|
|
40
42
|
parts = @duration.parts.each_with_object(Hash.new(0)) do |(k, v), p|
|
41
43
|
p[k] += v unless v.zero?
|
42
44
|
end
|
43
|
-
|
44
|
-
|
45
|
-
if parts
|
46
|
-
|
47
|
-
parts.transform_values!(&:-@)
|
45
|
+
|
46
|
+
# Convert weeks to days and remove weeks if mixed with date parts
|
47
|
+
if week_mixed_with_date?(parts)
|
48
|
+
parts[:days] += parts.delete(:weeks) * SECONDS_PER_WEEK / SECONDS_PER_DAY
|
48
49
|
end
|
49
|
-
|
50
|
+
|
51
|
+
parts
|
52
|
+
end
|
53
|
+
|
54
|
+
def week_mixed_with_date?(parts)
|
55
|
+
parts.key?(:weeks) && (parts.keys & DATE_COMPONENTS).any?
|
50
56
|
end
|
51
57
|
end
|
52
58
|
end
|