activesupport 5.2.4.4 → 6.0.0
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 +327 -408
- data/MIT-LICENSE +1 -1
- data/README.rdoc +3 -2
- data/lib/active_support.rb +2 -1
- data/lib/active_support/actionable_error.rb +48 -0
- data/lib/active_support/backtrace_cleaner.rb +28 -1
- data/lib/active_support/cache.rb +45 -23
- data/lib/active_support/cache/file_store.rb +22 -22
- data/lib/active_support/cache/mem_cache_store.rb +17 -2
- data/lib/active_support/cache/memory_store.rb +7 -2
- data/lib/active_support/cache/null_store.rb +5 -0
- data/lib/active_support/cache/redis_cache_store.rb +47 -25
- data/lib/active_support/callbacks.rb +16 -5
- data/lib/active_support/concern.rb +24 -1
- data/lib/active_support/configurable.rb +7 -11
- data/lib/active_support/core_ext/array.rb +1 -1
- data/lib/active_support/core_ext/array/access.rb +18 -6
- data/lib/active_support/core_ext/array/extract.rb +21 -0
- data/lib/active_support/core_ext/array/prepend_and_append.rb +2 -6
- data/lib/active_support/core_ext/class/attribute.rb +11 -16
- data/lib/active_support/core_ext/class/subclasses.rb +1 -1
- data/lib/active_support/core_ext/date/calculations.rb +6 -5
- data/lib/active_support/core_ext/date_and_time/calculations.rb +24 -47
- data/lib/active_support/core_ext/date_time/calculations.rb +1 -1
- data/lib/active_support/core_ext/enumerable.rb +97 -73
- data/lib/active_support/core_ext/hash.rb +1 -2
- data/lib/active_support/core_ext/hash/compact.rb +2 -26
- data/lib/active_support/core_ext/hash/deep_transform_values.rb +46 -0
- data/lib/active_support/core_ext/hash/except.rb +1 -1
- data/lib/active_support/core_ext/hash/keys.rb +0 -29
- data/lib/active_support/core_ext/hash/slice.rb +3 -25
- data/lib/active_support/core_ext/hash/transform_values.rb +2 -29
- data/lib/active_support/core_ext/integer/multiple.rb +1 -1
- data/lib/active_support/core_ext/kernel.rb +0 -1
- data/lib/active_support/core_ext/load_error.rb +1 -1
- data/lib/active_support/core_ext/module.rb +0 -1
- data/lib/active_support/core_ext/module/attribute_accessors.rb +7 -10
- data/lib/active_support/core_ext/module/attribute_accessors_per_thread.rb +13 -19
- data/lib/active_support/core_ext/module/delegation.rb +33 -7
- data/lib/active_support/core_ext/module/introspection.rb +37 -13
- data/lib/active_support/core_ext/module/reachable.rb +1 -6
- data/lib/active_support/core_ext/module/redefine_method.rb +8 -17
- data/lib/active_support/core_ext/numeric.rb +0 -1
- data/lib/active_support/core_ext/numeric/conversions.rb +124 -128
- data/lib/active_support/core_ext/numeric/inquiry.rb +2 -25
- data/lib/active_support/core_ext/object/blank.rb +1 -2
- data/lib/active_support/core_ext/object/duplicable.rb +7 -114
- data/lib/active_support/core_ext/object/json.rb +1 -0
- data/lib/active_support/core_ext/object/try.rb +15 -7
- data/lib/active_support/core_ext/object/with_options.rb +1 -1
- data/lib/active_support/core_ext/range/compare_range.rb +22 -13
- data/lib/active_support/core_ext/range/conversions.rb +31 -29
- data/lib/active_support/core_ext/range/include_range.rb +6 -0
- data/lib/active_support/core_ext/regexp.rb +0 -4
- data/lib/active_support/core_ext/securerandom.rb +23 -3
- data/lib/active_support/core_ext/string/access.rb +8 -0
- data/lib/active_support/core_ext/string/filters.rb +42 -1
- data/lib/active_support/core_ext/string/inflections.rb +7 -2
- data/lib/active_support/core_ext/string/multibyte.rb +4 -3
- data/lib/active_support/core_ext/string/output_safety.rb +61 -5
- data/lib/active_support/core_ext/string/strip.rb +3 -1
- data/lib/active_support/core_ext/time/calculations.rb +31 -2
- data/lib/active_support/core_ext/uri.rb +1 -0
- data/lib/active_support/current_attributes.rb +8 -0
- data/lib/active_support/dependencies.rb +69 -16
- data/lib/active_support/dependencies/zeitwerk_integration.rb +110 -0
- data/lib/active_support/deprecation.rb +1 -1
- data/lib/active_support/deprecation/behaviors.rb +1 -1
- data/lib/active_support/deprecation/method_wrappers.rb +8 -20
- data/lib/active_support/deprecation/proxy_wrappers.rb +24 -5
- data/lib/active_support/descendants_tracker.rb +56 -9
- data/lib/active_support/duration.rb +4 -3
- data/lib/active_support/duration/iso8601_parser.rb +2 -3
- data/lib/active_support/duration/iso8601_serializer.rb +3 -4
- data/lib/active_support/encrypted_configuration.rb +0 -4
- data/lib/active_support/encrypted_file.rb +2 -1
- data/lib/active_support/evented_file_update_checker.rb +39 -9
- data/lib/active_support/execution_wrapper.rb +1 -0
- data/lib/active_support/gem_version.rb +4 -4
- data/lib/active_support/hash_with_indifferent_access.rb +22 -18
- data/lib/active_support/i18n.rb +1 -0
- data/lib/active_support/i18n_railtie.rb +9 -1
- data/lib/active_support/inflector/inflections.rb +1 -4
- data/lib/active_support/inflector/methods.rb +15 -27
- data/lib/active_support/inflector/transliterate.rb +47 -18
- data/lib/active_support/json/decoding.rb +23 -23
- data/lib/active_support/json/encoding.rb +6 -2
- data/lib/active_support/key_generator.rb +0 -32
- data/lib/active_support/lazy_load_hooks.rb +5 -1
- data/lib/active_support/locale/en.rb +31 -0
- data/lib/active_support/log_subscriber.rb +31 -8
- data/lib/active_support/logger.rb +0 -15
- data/lib/active_support/logger_silence.rb +28 -12
- data/lib/active_support/logger_thread_safe_level.rb +26 -4
- data/lib/active_support/message_encryptor.rb +3 -5
- data/lib/active_support/message_verifier.rb +3 -3
- data/lib/active_support/multibyte/chars.rb +29 -48
- data/lib/active_support/multibyte/unicode.rb +44 -281
- data/lib/active_support/notifications.rb +41 -4
- data/lib/active_support/notifications/fanout.rb +98 -13
- data/lib/active_support/notifications/instrumenter.rb +79 -8
- data/lib/active_support/number_helper.rb +7 -0
- data/lib/active_support/number_helper/number_to_currency_converter.rb +2 -2
- data/lib/active_support/number_helper/number_to_delimited_converter.rb +3 -1
- data/lib/active_support/number_helper/number_to_human_converter.rb +3 -1
- data/lib/active_support/number_helper/number_to_human_size_converter.rb +3 -1
- data/lib/active_support/number_helper/number_to_percentage_converter.rb +3 -1
- data/lib/active_support/number_helper/number_to_phone_converter.rb +2 -0
- data/lib/active_support/number_helper/number_to_rounded_converter.rb +5 -3
- data/lib/active_support/ordered_options.rb +1 -1
- data/lib/active_support/parameter_filter.rb +129 -0
- data/lib/active_support/rails.rb +0 -6
- data/lib/active_support/reloader.rb +4 -5
- data/lib/active_support/security_utils.rb +1 -1
- data/lib/active_support/subscriber.rb +65 -26
- data/lib/active_support/tagged_logging.rb +13 -4
- data/lib/active_support/test_case.rb +91 -0
- data/lib/active_support/testing/assertions.rb +15 -1
- data/lib/active_support/testing/deprecation.rb +0 -1
- data/lib/active_support/testing/file_fixtures.rb +2 -0
- data/lib/active_support/testing/isolation.rb +2 -2
- data/lib/active_support/testing/method_call_assertions.rb +28 -1
- data/lib/active_support/testing/parallelization.rb +128 -0
- data/lib/active_support/testing/stream.rb +1 -1
- data/lib/active_support/testing/time_helpers.rb +7 -7
- data/lib/active_support/time_with_zone.rb +15 -5
- data/lib/active_support/values/time_zone.rb +12 -7
- data/lib/active_support/xml_mini.rb +2 -9
- data/lib/active_support/xml_mini/jdom.rb +2 -2
- data/lib/active_support/xml_mini/libxml.rb +2 -2
- data/lib/active_support/xml_mini/libxmlsax.rb +4 -4
- data/lib/active_support/xml_mini/nokogiri.rb +2 -2
- data/lib/active_support/xml_mini/nokogirisax.rb +3 -3
- data/lib/active_support/xml_mini/rexml.rb +2 -2
- metadata +34 -9
- data/lib/active_support/core_ext/kernel/agnostics.rb +0 -13
- data/lib/active_support/values/unicode_tables.dat +0 -0
@@ -5,8 +5,8 @@ require "active_support/inflector"
|
|
5
5
|
class Module
|
6
6
|
# Returns the name of the module containing this one.
|
7
7
|
#
|
8
|
-
# M::N.
|
9
|
-
def
|
8
|
+
# M::N.module_parent_name # => "M"
|
9
|
+
def module_parent_name
|
10
10
|
if defined?(@parent_name)
|
11
11
|
@parent_name
|
12
12
|
else
|
@@ -16,6 +16,14 @@ class Module
|
|
16
16
|
end
|
17
17
|
end
|
18
18
|
|
19
|
+
def parent_name
|
20
|
+
ActiveSupport::Deprecation.warn(<<-MSG.squish)
|
21
|
+
`Module#parent_name` has been renamed to `module_parent_name`.
|
22
|
+
`parent_name` is deprecated and will be removed in Rails 6.1.
|
23
|
+
MSG
|
24
|
+
module_parent_name
|
25
|
+
end
|
26
|
+
|
19
27
|
# Returns the module which contains this one according to its name.
|
20
28
|
#
|
21
29
|
# module M
|
@@ -24,15 +32,23 @@ class Module
|
|
24
32
|
# end
|
25
33
|
# X = M::N
|
26
34
|
#
|
27
|
-
# M::N.
|
28
|
-
# X.
|
35
|
+
# M::N.module_parent # => M
|
36
|
+
# X.module_parent # => M
|
29
37
|
#
|
30
38
|
# The parent of top-level and anonymous modules is Object.
|
31
39
|
#
|
32
|
-
# M.
|
33
|
-
# Module.new.
|
40
|
+
# M.module_parent # => Object
|
41
|
+
# Module.new.module_parent # => Object
|
42
|
+
def module_parent
|
43
|
+
module_parent_name ? ActiveSupport::Inflector.constantize(module_parent_name) : Object
|
44
|
+
end
|
45
|
+
|
34
46
|
def parent
|
35
|
-
|
47
|
+
ActiveSupport::Deprecation.warn(<<-MSG.squish)
|
48
|
+
`Module#parent` has been renamed to `module_parent`.
|
49
|
+
`parent` is deprecated and will be removed in Rails 6.1.
|
50
|
+
MSG
|
51
|
+
module_parent
|
36
52
|
end
|
37
53
|
|
38
54
|
# Returns all the parents of this module according to its name, ordered from
|
@@ -44,13 +60,13 @@ class Module
|
|
44
60
|
# end
|
45
61
|
# X = M::N
|
46
62
|
#
|
47
|
-
# M.
|
48
|
-
# M::N.
|
49
|
-
# X.
|
50
|
-
def
|
63
|
+
# M.module_parents # => [Object]
|
64
|
+
# M::N.module_parents # => [M, Object]
|
65
|
+
# X.module_parents # => [M, Object]
|
66
|
+
def module_parents
|
51
67
|
parents = []
|
52
|
-
if
|
53
|
-
parts =
|
68
|
+
if module_parent_name
|
69
|
+
parts = module_parent_name.split("::")
|
54
70
|
until parts.empty?
|
55
71
|
parents << ActiveSupport::Inflector.constantize(parts * "::")
|
56
72
|
parts.pop
|
@@ -59,4 +75,12 @@ class Module
|
|
59
75
|
parents << Object unless parents.include? Object
|
60
76
|
parents
|
61
77
|
end
|
78
|
+
|
79
|
+
def parents
|
80
|
+
ActiveSupport::Deprecation.warn(<<-MSG.squish)
|
81
|
+
`Module#parents` has been renamed to `module_parents`.
|
82
|
+
`parents` is deprecated and will be removed in Rails 6.1.
|
83
|
+
MSG
|
84
|
+
module_parents
|
85
|
+
end
|
62
86
|
end
|
@@ -3,9 +3,4 @@
|
|
3
3
|
require "active_support/core_ext/module/anonymous"
|
4
4
|
require "active_support/core_ext/string/inflections"
|
5
5
|
|
6
|
-
|
7
|
-
def reachable? #:nodoc:
|
8
|
-
!anonymous? && name.safe_constantize.equal?(self)
|
9
|
-
end
|
10
|
-
deprecate :reachable?
|
11
|
-
end
|
6
|
+
ActiveSupport::Deprecation.warn("reachable is deprecated and will be removed from the framework.")
|
@@ -1,23 +1,14 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
3
|
class Module
|
4
|
-
if
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
alias_method method, method
|
13
|
-
end
|
14
|
-
end
|
15
|
-
else
|
16
|
-
def silence_redefinition_of_method(method)
|
17
|
-
if method_defined?(method) || private_method_defined?(method)
|
18
|
-
alias_method :__rails_redefine, method
|
19
|
-
remove_method :__rails_redefine
|
20
|
-
end
|
4
|
+
# Marks the named method as intended to be redefined, if it exists.
|
5
|
+
# Suppresses the Ruby method redefinition warning. Prefer
|
6
|
+
# #redefine_method where possible.
|
7
|
+
def silence_redefinition_of_method(method)
|
8
|
+
if method_defined?(method) || private_method_defined?(method)
|
9
|
+
# This suppresses the "method redefined" warning; the self-alias
|
10
|
+
# looks odd, but means we don't need to generate a unique name
|
11
|
+
alias_method method, method
|
21
12
|
end
|
22
13
|
end
|
23
14
|
|
@@ -4,137 +4,133 @@ require "active_support/core_ext/big_decimal/conversions"
|
|
4
4
|
require "active_support/number_helper"
|
5
5
|
require "active_support/core_ext/module/deprecation"
|
6
6
|
|
7
|
-
module ActiveSupport
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
#
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
#
|
36
|
-
|
37
|
-
#
|
38
|
-
|
39
|
-
#
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
#
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
#
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
#
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
#
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
|
112
|
-
|
113
|
-
|
114
|
-
|
115
|
-
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
|
120
|
-
|
121
|
-
|
122
|
-
|
123
|
-
|
124
|
-
|
125
|
-
|
126
|
-
|
127
|
-
|
7
|
+
module ActiveSupport
|
8
|
+
module NumericWithFormat
|
9
|
+
# Provides options for converting numbers into formatted strings.
|
10
|
+
# Options are provided for phone numbers, currency, percentage,
|
11
|
+
# precision, positional notation, file size and pretty printing.
|
12
|
+
#
|
13
|
+
# ==== Options
|
14
|
+
#
|
15
|
+
# For details on which formats use which options, see ActiveSupport::NumberHelper
|
16
|
+
#
|
17
|
+
# ==== Examples
|
18
|
+
#
|
19
|
+
# Phone Numbers:
|
20
|
+
# 5551234.to_s(:phone) # => "555-1234"
|
21
|
+
# 1235551234.to_s(:phone) # => "123-555-1234"
|
22
|
+
# 1235551234.to_s(:phone, area_code: true) # => "(123) 555-1234"
|
23
|
+
# 1235551234.to_s(:phone, delimiter: ' ') # => "123 555 1234"
|
24
|
+
# 1235551234.to_s(:phone, area_code: true, extension: 555) # => "(123) 555-1234 x 555"
|
25
|
+
# 1235551234.to_s(:phone, country_code: 1) # => "+1-123-555-1234"
|
26
|
+
# 1235551234.to_s(:phone, country_code: 1, extension: 1343, delimiter: '.')
|
27
|
+
# # => "+1.123.555.1234 x 1343"
|
28
|
+
#
|
29
|
+
# Currency:
|
30
|
+
# 1234567890.50.to_s(:currency) # => "$1,234,567,890.50"
|
31
|
+
# 1234567890.506.to_s(:currency) # => "$1,234,567,890.51"
|
32
|
+
# 1234567890.506.to_s(:currency, precision: 3) # => "$1,234,567,890.506"
|
33
|
+
# 1234567890.506.to_s(:currency, locale: :fr) # => "1 234 567 890,51 €"
|
34
|
+
# -1234567890.50.to_s(:currency, negative_format: '(%u%n)')
|
35
|
+
# # => "($1,234,567,890.50)"
|
36
|
+
# 1234567890.50.to_s(:currency, unit: '£', separator: ',', delimiter: '')
|
37
|
+
# # => "£1234567890,50"
|
38
|
+
# 1234567890.50.to_s(:currency, unit: '£', separator: ',', delimiter: '', format: '%n %u')
|
39
|
+
# # => "1234567890,50 £"
|
40
|
+
#
|
41
|
+
# Percentage:
|
42
|
+
# 100.to_s(:percentage) # => "100.000%"
|
43
|
+
# 100.to_s(:percentage, precision: 0) # => "100%"
|
44
|
+
# 1000.to_s(:percentage, delimiter: '.', separator: ',') # => "1.000,000%"
|
45
|
+
# 302.24398923423.to_s(:percentage, precision: 5) # => "302.24399%"
|
46
|
+
# 1000.to_s(:percentage, locale: :fr) # => "1 000,000%"
|
47
|
+
# 100.to_s(:percentage, format: '%n %') # => "100.000 %"
|
48
|
+
#
|
49
|
+
# Delimited:
|
50
|
+
# 12345678.to_s(:delimited) # => "12,345,678"
|
51
|
+
# 12345678.05.to_s(:delimited) # => "12,345,678.05"
|
52
|
+
# 12345678.to_s(:delimited, delimiter: '.') # => "12.345.678"
|
53
|
+
# 12345678.to_s(:delimited, delimiter: ',') # => "12,345,678"
|
54
|
+
# 12345678.05.to_s(:delimited, separator: ' ') # => "12,345,678 05"
|
55
|
+
# 12345678.05.to_s(:delimited, locale: :fr) # => "12 345 678,05"
|
56
|
+
# 98765432.98.to_s(:delimited, delimiter: ' ', separator: ',')
|
57
|
+
# # => "98 765 432,98"
|
58
|
+
#
|
59
|
+
# Rounded:
|
60
|
+
# 111.2345.to_s(:rounded) # => "111.235"
|
61
|
+
# 111.2345.to_s(:rounded, precision: 2) # => "111.23"
|
62
|
+
# 13.to_s(:rounded, precision: 5) # => "13.00000"
|
63
|
+
# 389.32314.to_s(:rounded, precision: 0) # => "389"
|
64
|
+
# 111.2345.to_s(:rounded, significant: true) # => "111"
|
65
|
+
# 111.2345.to_s(:rounded, precision: 1, significant: true) # => "100"
|
66
|
+
# 13.to_s(:rounded, precision: 5, significant: true) # => "13.000"
|
67
|
+
# 111.234.to_s(:rounded, locale: :fr) # => "111,234"
|
68
|
+
# 13.to_s(:rounded, precision: 5, significant: true, strip_insignificant_zeros: true)
|
69
|
+
# # => "13"
|
70
|
+
# 389.32314.to_s(:rounded, precision: 4, significant: true) # => "389.3"
|
71
|
+
# 1111.2345.to_s(:rounded, precision: 2, separator: ',', delimiter: '.')
|
72
|
+
# # => "1.111,23"
|
73
|
+
#
|
74
|
+
# Human-friendly size in Bytes:
|
75
|
+
# 123.to_s(:human_size) # => "123 Bytes"
|
76
|
+
# 1234.to_s(:human_size) # => "1.21 KB"
|
77
|
+
# 12345.to_s(:human_size) # => "12.1 KB"
|
78
|
+
# 1234567.to_s(:human_size) # => "1.18 MB"
|
79
|
+
# 1234567890.to_s(:human_size) # => "1.15 GB"
|
80
|
+
# 1234567890123.to_s(:human_size) # => "1.12 TB"
|
81
|
+
# 1234567890123456.to_s(:human_size) # => "1.1 PB"
|
82
|
+
# 1234567890123456789.to_s(:human_size) # => "1.07 EB"
|
83
|
+
# 1234567.to_s(:human_size, precision: 2) # => "1.2 MB"
|
84
|
+
# 483989.to_s(:human_size, precision: 2) # => "470 KB"
|
85
|
+
# 1234567.to_s(:human_size, precision: 2, separator: ',') # => "1,2 MB"
|
86
|
+
# 1234567890123.to_s(:human_size, precision: 5) # => "1.1228 TB"
|
87
|
+
# 524288000.to_s(:human_size, precision: 5) # => "500 MB"
|
88
|
+
#
|
89
|
+
# Human-friendly format:
|
90
|
+
# 123.to_s(:human) # => "123"
|
91
|
+
# 1234.to_s(:human) # => "1.23 Thousand"
|
92
|
+
# 12345.to_s(:human) # => "12.3 Thousand"
|
93
|
+
# 1234567.to_s(:human) # => "1.23 Million"
|
94
|
+
# 1234567890.to_s(:human) # => "1.23 Billion"
|
95
|
+
# 1234567890123.to_s(:human) # => "1.23 Trillion"
|
96
|
+
# 1234567890123456.to_s(:human) # => "1.23 Quadrillion"
|
97
|
+
# 1234567890123456789.to_s(:human) # => "1230 Quadrillion"
|
98
|
+
# 489939.to_s(:human, precision: 2) # => "490 Thousand"
|
99
|
+
# 489939.to_s(:human, precision: 4) # => "489.9 Thousand"
|
100
|
+
# 1234567.to_s(:human, precision: 4,
|
101
|
+
# significant: false) # => "1.2346 Million"
|
102
|
+
# 1234567.to_s(:human, precision: 1,
|
103
|
+
# separator: ',',
|
104
|
+
# significant: false) # => "1,2 Million"
|
105
|
+
def to_s(format = nil, options = nil)
|
106
|
+
case format
|
107
|
+
when nil
|
108
|
+
super()
|
109
|
+
when Integer, String
|
110
|
+
super(format)
|
111
|
+
when :phone
|
112
|
+
ActiveSupport::NumberHelper.number_to_phone(self, options || {})
|
113
|
+
when :currency
|
114
|
+
ActiveSupport::NumberHelper.number_to_currency(self, options || {})
|
115
|
+
when :percentage
|
116
|
+
ActiveSupport::NumberHelper.number_to_percentage(self, options || {})
|
117
|
+
when :delimited
|
118
|
+
ActiveSupport::NumberHelper.number_to_delimited(self, options || {})
|
119
|
+
when :rounded
|
120
|
+
ActiveSupport::NumberHelper.number_to_rounded(self, options || {})
|
121
|
+
when :human
|
122
|
+
ActiveSupport::NumberHelper.number_to_human(self, options || {})
|
123
|
+
when :human_size
|
124
|
+
ActiveSupport::NumberHelper.number_to_human_size(self, options || {})
|
125
|
+
when Symbol
|
126
|
+
super()
|
127
|
+
else
|
128
|
+
super(format)
|
129
|
+
end
|
128
130
|
end
|
129
131
|
end
|
130
132
|
end
|
131
133
|
|
132
|
-
|
133
|
-
if 0.class == Integer
|
134
|
-
Integer.prepend ActiveSupport::NumericWithFormat
|
135
|
-
else
|
136
|
-
Fixnum.prepend ActiveSupport::NumericWithFormat
|
137
|
-
Bignum.prepend ActiveSupport::NumericWithFormat
|
138
|
-
end
|
134
|
+
Integer.prepend ActiveSupport::NumericWithFormat
|
139
135
|
Float.prepend ActiveSupport::NumericWithFormat
|
140
136
|
BigDecimal.prepend ActiveSupport::NumericWithFormat
|
@@ -1,28 +1,5 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
|
4
|
-
class Numeric
|
5
|
-
# Returns true if the number is positive.
|
6
|
-
#
|
7
|
-
# 1.positive? # => true
|
8
|
-
# 0.positive? # => false
|
9
|
-
# -1.positive? # => false
|
10
|
-
def positive?
|
11
|
-
self > 0
|
12
|
-
end
|
3
|
+
require "active_support/deprecation"
|
13
4
|
|
14
|
-
|
15
|
-
#
|
16
|
-
# -1.negative? # => true
|
17
|
-
# 0.negative? # => false
|
18
|
-
# 1.negative? # => false
|
19
|
-
def negative?
|
20
|
-
self < 0
|
21
|
-
end
|
22
|
-
end
|
23
|
-
|
24
|
-
class Complex
|
25
|
-
undef :positive?
|
26
|
-
undef :negative?
|
27
|
-
end
|
28
|
-
end
|
5
|
+
ActiveSupport::Deprecation.warn "Ruby 2.5+ (required by Rails 6) provides Numeric#positive? and Numeric#negative? natively, so requiring active_support/core_ext/numeric/inquiry is no longer necessary. Requiring it will raise LoadError in Rails 6.1."
|
@@ -1,11 +1,10 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
require "active_support/core_ext/regexp"
|
4
3
|
require "concurrent/map"
|
5
4
|
|
6
5
|
class Object
|
7
6
|
# An object is blank if it's false, empty, or a whitespace string.
|
8
|
-
# For example, +
|
7
|
+
# For example, +nil+, '', ' ', [], {}, and +false+ are all blank.
|
9
8
|
#
|
10
9
|
# This simplifies
|
11
10
|
#
|
@@ -28,93 +28,6 @@ class Object
|
|
28
28
|
end
|
29
29
|
end
|
30
30
|
|
31
|
-
class NilClass
|
32
|
-
begin
|
33
|
-
nil.dup
|
34
|
-
rescue TypeError
|
35
|
-
|
36
|
-
# +nil+ is not duplicable:
|
37
|
-
#
|
38
|
-
# nil.duplicable? # => false
|
39
|
-
# nil.dup # => TypeError: can't dup NilClass
|
40
|
-
def duplicable?
|
41
|
-
false
|
42
|
-
end
|
43
|
-
end
|
44
|
-
end
|
45
|
-
|
46
|
-
class FalseClass
|
47
|
-
begin
|
48
|
-
false.dup
|
49
|
-
rescue TypeError
|
50
|
-
|
51
|
-
# +false+ is not duplicable:
|
52
|
-
#
|
53
|
-
# false.duplicable? # => false
|
54
|
-
# false.dup # => TypeError: can't dup FalseClass
|
55
|
-
def duplicable?
|
56
|
-
false
|
57
|
-
end
|
58
|
-
end
|
59
|
-
end
|
60
|
-
|
61
|
-
class TrueClass
|
62
|
-
begin
|
63
|
-
true.dup
|
64
|
-
rescue TypeError
|
65
|
-
|
66
|
-
# +true+ is not duplicable:
|
67
|
-
#
|
68
|
-
# true.duplicable? # => false
|
69
|
-
# true.dup # => TypeError: can't dup TrueClass
|
70
|
-
def duplicable?
|
71
|
-
false
|
72
|
-
end
|
73
|
-
end
|
74
|
-
end
|
75
|
-
|
76
|
-
class Symbol
|
77
|
-
begin
|
78
|
-
:symbol.dup # Ruby 2.4.x.
|
79
|
-
"symbol_from_string".to_sym.dup # Some symbols can't `dup` in Ruby 2.4.0.
|
80
|
-
rescue TypeError
|
81
|
-
|
82
|
-
# Symbols are not duplicable:
|
83
|
-
#
|
84
|
-
# :my_symbol.duplicable? # => false
|
85
|
-
# :my_symbol.dup # => TypeError: can't dup Symbol
|
86
|
-
def duplicable?
|
87
|
-
false
|
88
|
-
end
|
89
|
-
end
|
90
|
-
end
|
91
|
-
|
92
|
-
class Numeric
|
93
|
-
begin
|
94
|
-
1.dup
|
95
|
-
rescue TypeError
|
96
|
-
|
97
|
-
# Numbers are not duplicable:
|
98
|
-
#
|
99
|
-
# 3.duplicable? # => false
|
100
|
-
# 3.dup # => TypeError: can't dup Integer
|
101
|
-
def duplicable?
|
102
|
-
false
|
103
|
-
end
|
104
|
-
end
|
105
|
-
end
|
106
|
-
|
107
|
-
require "bigdecimal"
|
108
|
-
class BigDecimal
|
109
|
-
# BigDecimals are duplicable:
|
110
|
-
#
|
111
|
-
# BigDecimal("1.2").duplicable? # => true
|
112
|
-
# BigDecimal("1.2").dup # => #<BigDecimal:...,'0.12E1',18(18)>
|
113
|
-
def duplicable?
|
114
|
-
true
|
115
|
-
end
|
116
|
-
end
|
117
|
-
|
118
31
|
class Method
|
119
32
|
# Methods are not duplicable:
|
120
33
|
#
|
@@ -125,32 +38,12 @@ class Method
|
|
125
38
|
end
|
126
39
|
end
|
127
40
|
|
128
|
-
class
|
129
|
-
|
130
|
-
|
131
|
-
|
132
|
-
|
133
|
-
|
134
|
-
|
135
|
-
# Complex(1).duplicable? # => false
|
136
|
-
# Complex(1).dup # => TypeError: can't copy Complex
|
137
|
-
def duplicable?
|
138
|
-
false
|
139
|
-
end
|
140
|
-
end
|
141
|
-
end
|
142
|
-
|
143
|
-
class Rational
|
144
|
-
begin
|
145
|
-
Rational(1).dup
|
146
|
-
rescue TypeError
|
147
|
-
|
148
|
-
# Rationals are not duplicable:
|
149
|
-
#
|
150
|
-
# Rational(1).duplicable? # => false
|
151
|
-
# Rational(1).dup # => TypeError: can't copy Rational
|
152
|
-
def duplicable?
|
153
|
-
false
|
154
|
-
end
|
41
|
+
class UnboundMethod
|
42
|
+
# Unbound methods are not duplicable:
|
43
|
+
#
|
44
|
+
# method(:puts).unbind.duplicable? # => false
|
45
|
+
# method(:puts).unbind.dup # => TypeError: allocator undefined for UnboundMethod
|
46
|
+
def duplicable?
|
47
|
+
false
|
155
48
|
end
|
156
49
|
end
|