activesupport 6.0.4.4 → 7.0.4.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of activesupport might be problematic. Click here for more details.
- checksums.yaml +4 -4
- data/CHANGELOG.md +257 -532
- data/MIT-LICENSE +1 -1
- data/lib/active_support/actionable_error.rb +1 -1
- data/lib/active_support/array_inquirer.rb +2 -2
- data/lib/active_support/backtrace_cleaner.rb +5 -5
- data/lib/active_support/benchmarkable.rb +3 -3
- data/lib/active_support/cache/file_store.rb +16 -10
- data/lib/active_support/cache/mem_cache_store.rb +163 -42
- data/lib/active_support/cache/memory_store.rb +57 -29
- data/lib/active_support/cache/null_store.rb +10 -2
- data/lib/active_support/cache/redis_cache_store.rb +79 -98
- data/lib/active_support/cache/strategy/local_cache.rb +49 -57
- data/lib/active_support/cache.rb +378 -179
- data/lib/active_support/callbacks.rb +230 -122
- data/lib/active_support/code_generator.rb +65 -0
- data/lib/active_support/concern.rb +49 -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 +9 -6
- data/lib/active_support/configuration_file.rb +51 -0
- data/lib/active_support/core_ext/array/access.rb +1 -5
- data/lib/active_support/core_ext/array/conversions.rb +13 -12
- 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/inquiry.rb +2 -2
- data/lib/active_support/core_ext/array.rb +1 -0
- data/lib/active_support/core_ext/benchmark.rb +2 -2
- data/lib/active_support/core_ext/big_decimal/conversions.rb +1 -1
- data/lib/active_support/core_ext/class/attribute.rb +34 -44
- data/lib/active_support/core_ext/class/subclasses.rb +9 -22
- data/lib/active_support/core_ext/date/blank.rb +1 -1
- data/lib/active_support/core_ext/date/calculations.rb +9 -9
- data/lib/active_support/core_ext/date/conversions.rb +16 -15
- 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/calculations.rb +17 -4
- data/lib/active_support/core_ext/date_and_time/compatibility.rb +15 -0
- 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 +164 -23
- data/lib/active_support/core_ext/file/atomic.rb +3 -1
- data/lib/active_support/core_ext/hash/conversions.rb +2 -3
- data/lib/active_support/core_ext/hash/deep_transform_values.rb +1 -1
- data/lib/active_support/core_ext/hash/indifferent_access.rb +3 -3
- data/lib/active_support/core_ext/hash/keys.rb +2 -2
- data/lib/active_support/core_ext/hash/slice.rb +3 -2
- data/lib/active_support/core_ext/kernel/reporting.rb +4 -4
- data/lib/active_support/core_ext/kernel/singleton_class.rb +1 -1
- data/lib/active_support/core_ext/load_error.rb +1 -1
- data/lib/active_support/core_ext/module/attr_internal.rb +2 -2
- data/lib/active_support/core_ext/module/attribute_accessors.rb +25 -29
- data/lib/active_support/core_ext/module/attribute_accessors_per_thread.rb +26 -13
- data/lib/active_support/core_ext/module/concerning.rb +8 -2
- data/lib/active_support/core_ext/module/delegation.rb +40 -36
- data/lib/active_support/core_ext/module/introspection.rb +1 -25
- data/lib/active_support/core_ext/name_error.rb +23 -2
- data/lib/active_support/core_ext/numeric/conversions.rb +80 -73
- 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 +42 -26
- 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 +6 -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 -20
- data/lib/active_support/core_ext/range/overlaps.rb +1 -1
- data/lib/active_support/core_ext/range.rb +1 -1
- data/lib/active_support/core_ext/regexp.rb +8 -1
- data/lib/active_support/core_ext/securerandom.rb +1 -1
- data/lib/active_support/core_ext/string/access.rb +5 -24
- data/lib/active_support/core_ext/string/conversions.rb +3 -2
- data/lib/active_support/core_ext/string/filters.rb +1 -1
- data/lib/active_support/core_ext/string/inflections.rb +39 -5
- data/lib/active_support/core_ext/string/inquiry.rb +2 -1
- data/lib/active_support/core_ext/string/multibyte.rb +2 -2
- data/lib/active_support/core_ext/string/output_safety.rb +92 -41
- data/lib/active_support/core_ext/string/starts_ends_with.rb +2 -2
- data/lib/active_support/core_ext/symbol/starts_ends_with.rb +6 -0
- data/lib/active_support/core_ext/symbol.rb +3 -0
- data/lib/active_support/core_ext/time/calculations.rb +25 -7
- data/lib/active_support/core_ext/time/conversions.rb +15 -12
- data/lib/active_support/core_ext/time/deprecated_conversions.rb +22 -0
- data/lib/active_support/core_ext/time/zones.rb +7 -22
- data/lib/active_support/core_ext/time.rb +1 -0
- data/lib/active_support/core_ext/uri.rb +3 -23
- data/lib/active_support/core_ext.rb +2 -1
- data/lib/active_support/current_attributes/test_helper.rb +13 -0
- data/lib/active_support/current_attributes.rb +39 -16
- 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 -769
- data/lib/active_support/deprecation/behaviors.rb +23 -7
- data/lib/active_support/deprecation/disallowed.rb +56 -0
- data/lib/active_support/deprecation/instance_delegator.rb +0 -1
- data/lib/active_support/deprecation/method_wrappers.rb +6 -5
- data/lib/active_support/deprecation/proxy_wrappers.rb +4 -4
- data/lib/active_support/deprecation/reporting.rb +50 -7
- data/lib/active_support/deprecation.rb +7 -2
- data/lib/active_support/descendants_tracker.rb +174 -64
- 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 +24 -10
- data/lib/active_support/duration.rb +134 -55
- data/lib/active_support/encrypted_configuration.rb +13 -2
- data/lib/active_support/encrypted_file.rb +32 -3
- data/lib/active_support/environment_inquirer.rb +20 -0
- data/lib/active_support/error_reporter.rb +117 -0
- data/lib/active_support/evented_file_update_checker.rb +72 -138
- 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 +71 -0
- data/lib/active_support/gem_version.rb +3 -3
- data/lib/active_support/hash_with_indifferent_access.rb +51 -25
- 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 +14 -19
- data/lib/active_support/inflector/inflections.rb +24 -9
- data/lib/active_support/inflector/methods.rb +29 -49
- data/lib/active_support/inflector/transliterate.rb +5 -5
- data/lib/active_support/isolated_execution_state.rb +72 -0
- data/lib/active_support/json/decoding.rb +4 -4
- data/lib/active_support/json/encoding.rb +8 -4
- data/lib/active_support/key_generator.rb +23 -6
- data/lib/active_support/lazy_load_hooks.rb +28 -4
- data/lib/active_support/locale/en.yml +8 -4
- data/lib/active_support/log_subscriber/test_helper.rb +2 -2
- data/lib/active_support/log_subscriber.rb +23 -5
- data/lib/active_support/logger.rb +1 -1
- data/lib/active_support/logger_silence.rb +2 -26
- data/lib/active_support/logger_thread_safe_level.rb +34 -21
- data/lib/active_support/message_encryptor.rb +16 -13
- data/lib/active_support/message_verifier.rb +50 -18
- data/lib/active_support/messages/metadata.rb +2 -2
- data/lib/active_support/messages/rotation_configuration.rb +2 -1
- data/lib/active_support/messages/rotator.rb +6 -5
- data/lib/active_support/multibyte/chars.rb +13 -52
- data/lib/active_support/multibyte/unicode.rb +1 -87
- data/lib/active_support/multibyte.rb +1 -1
- data/lib/active_support/notifications/fanout.rb +110 -69
- data/lib/active_support/notifications/instrumenter.rb +37 -29
- data/lib/active_support/notifications.rb +55 -28
- data/lib/active_support/number_helper/number_converter.rb +2 -4
- 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_converter.rb +1 -1
- data/lib/active_support/number_helper/number_to_human_size_converter.rb +2 -2
- data/lib/active_support/number_helper/number_to_phone_converter.rb +1 -1
- data/lib/active_support/number_helper/number_to_rounded_converter.rb +9 -5
- data/lib/active_support/number_helper/rounding_helper.rb +12 -32
- data/lib/active_support/number_helper.rb +29 -16
- data/lib/active_support/option_merger.rb +11 -18
- data/lib/active_support/ordered_hash.rb +1 -1
- data/lib/active_support/ordered_options.rb +9 -3
- data/lib/active_support/parameter_filter.rb +21 -11
- data/lib/active_support/per_thread_registry.rb +6 -1
- data/lib/active_support/rails.rb +1 -4
- data/lib/active_support/railtie.rb +77 -5
- data/lib/active_support/reloader.rb +1 -1
- data/lib/active_support/rescuable.rb +16 -16
- data/lib/active_support/ruby_features.rb +7 -0
- data/lib/active_support/secure_compare_rotator.rb +51 -0
- data/lib/active_support/security_utils.rb +19 -12
- data/lib/active_support/string_inquirer.rb +2 -2
- data/lib/active_support/subscriber.rb +19 -25
- data/lib/active_support/tagged_logging.rb +31 -6
- data/lib/active_support/test_case.rb +13 -21
- data/lib/active_support/testing/assertions.rb +50 -13
- 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 +82 -0
- data/lib/active_support/testing/parallelization/worker.rb +103 -0
- data/lib/active_support/testing/parallelization.rb +16 -95
- 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 +53 -5
- data/lib/active_support/time_with_zone.rb +126 -62
- data/lib/active_support/values/time_zone.rb +54 -23
- data/lib/active_support/version.rb +1 -1
- 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 +9 -2
- data/lib/active_support/xml_mini.rb +5 -4
- data/lib/active_support.rb +29 -1
- metadata +46 -45
- data/lib/active_support/core_ext/array/prepend_and_append.rb +0 -5
- data/lib/active_support/core_ext/hash/compact.rb +0 -5
- data/lib/active_support/core_ext/hash/transform_values.rb +0 -5
- data/lib/active_support/core_ext/marshal.rb +0 -24
- data/lib/active_support/core_ext/module/reachable.rb +0 -6
- data/lib/active_support/core_ext/numeric/inquiry.rb +0 -5
- data/lib/active_support/core_ext/range/include_range.rb +0 -9
- data/lib/active_support/dependencies/zeitwerk_integration.rb +0 -117
@@ -1,5 +1,7 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
+
require "yaml"
|
4
|
+
|
3
5
|
require "active_support/duration"
|
4
6
|
require "active_support/values/time_zone"
|
5
7
|
require "active_support/core_ext/object/acts_like"
|
@@ -11,35 +13,42 @@ module ActiveSupport
|
|
11
13
|
# system's <tt>ENV['TZ']</tt> zone.
|
12
14
|
#
|
13
15
|
# You shouldn't ever need to create a TimeWithZone instance directly via +new+.
|
14
|
-
# Instead use methods +local+, +parse+, +at
|
16
|
+
# Instead use methods +local+, +parse+, +at+, and +now+ on TimeZone instances,
|
15
17
|
# and +in_time_zone+ on Time and DateTime instances.
|
16
18
|
#
|
17
19
|
# Time.zone = 'Eastern Time (US & Canada)' # => 'Eastern Time (US & Canada)'
|
18
|
-
# Time.zone.local(2007, 2, 10, 15, 30, 45) # => Sat, 10 Feb 2007 15:30:45 EST -05:00
|
19
|
-
# Time.zone.parse('2007-02-10 15:30:45') # => Sat, 10 Feb 2007 15:30:45 EST -05:00
|
20
|
-
# Time.zone.at(1171139445) # => Sat, 10 Feb 2007 15:30:45 EST -05:00
|
21
|
-
# Time.zone.now # => Sun, 18 May 2008 13:07:55 EDT -04:00
|
22
|
-
# Time.utc(2007, 2, 10, 20, 30, 45).in_time_zone # => Sat, 10 Feb 2007 15:30:45 EST -05:00
|
20
|
+
# Time.zone.local(2007, 2, 10, 15, 30, 45) # => Sat, 10 Feb 2007 15:30:45.000000000 EST -05:00
|
21
|
+
# Time.zone.parse('2007-02-10 15:30:45') # => Sat, 10 Feb 2007 15:30:45.000000000 EST -05:00
|
22
|
+
# Time.zone.at(1171139445) # => Sat, 10 Feb 2007 15:30:45.000000000 EST -05:00
|
23
|
+
# Time.zone.now # => Sun, 18 May 2008 13:07:55.754107581 EDT -04:00
|
24
|
+
# Time.utc(2007, 2, 10, 20, 30, 45).in_time_zone # => Sat, 10 Feb 2007 15:30:45.000000000 EST -05:00
|
23
25
|
#
|
24
26
|
# See Time and TimeZone for further documentation of these methods.
|
25
27
|
#
|
26
28
|
# TimeWithZone instances implement the same API as Ruby Time instances, so
|
27
29
|
# that Time and TimeWithZone instances are interchangeable.
|
28
30
|
#
|
29
|
-
# t = Time.zone.now # => Sun, 18 May 2008 13:27:25 EDT -04:00
|
31
|
+
# t = Time.zone.now # => Sun, 18 May 2008 13:27:25.031505668 EDT -04:00
|
30
32
|
# t.hour # => 13
|
31
33
|
# t.dst? # => true
|
32
34
|
# t.utc_offset # => -14400
|
33
35
|
# t.zone # => "EDT"
|
34
|
-
# t.
|
35
|
-
# t + 1.day # => Mon, 19 May 2008 13:27:25 EDT -04:00
|
36
|
-
# t.beginning_of_year # => Tue, 01 Jan 2008 00:00:00 EST -05:00
|
36
|
+
# t.to_fs(:rfc822) # => "Sun, 18 May 2008 13:27:25 -0400"
|
37
|
+
# t + 1.day # => Mon, 19 May 2008 13:27:25.031505668 EDT -04:00
|
38
|
+
# t.beginning_of_year # => Tue, 01 Jan 2008 00:00:00.000000000 EST -05:00
|
37
39
|
# t > Time.utc(1999) # => true
|
38
40
|
# t.is_a?(Time) # => true
|
39
41
|
# t.is_a?(ActiveSupport::TimeWithZone) # => true
|
40
42
|
class TimeWithZone
|
41
43
|
# Report class name as 'Time' to thwart type checking.
|
42
44
|
def self.name
|
45
|
+
ActiveSupport::Deprecation.warn(<<~EOM)
|
46
|
+
ActiveSupport::TimeWithZone.name has been deprecated and
|
47
|
+
from Rails 7.1 will use the default Ruby implementation.
|
48
|
+
You can set `config.active_support.remove_deprecated_time_with_zone_name = true`
|
49
|
+
to enable the new behavior now.
|
50
|
+
EOM
|
51
|
+
|
43
52
|
"Time"
|
44
53
|
end
|
45
54
|
|
@@ -57,19 +66,19 @@ module ActiveSupport
|
|
57
66
|
|
58
67
|
# Returns a <tt>Time</tt> instance that represents the time in +time_zone+.
|
59
68
|
def time
|
60
|
-
@time ||=
|
69
|
+
@time ||= incorporate_utc_offset(@utc, utc_offset)
|
61
70
|
end
|
62
71
|
|
63
72
|
# Returns a <tt>Time</tt> instance of the simultaneous time in the UTC timezone.
|
64
73
|
def utc
|
65
|
-
@utc ||=
|
74
|
+
@utc ||= incorporate_utc_offset(@time, -utc_offset)
|
66
75
|
end
|
67
76
|
alias_method :comparable_time, :utc
|
68
77
|
alias_method :getgm, :utc
|
69
78
|
alias_method :getutc, :utc
|
70
79
|
alias_method :gmtime, :utc
|
71
80
|
|
72
|
-
# Returns the underlying TZInfo::TimezonePeriod
|
81
|
+
# Returns the underlying <tt>TZInfo::TimezonePeriod</tt>.
|
73
82
|
def period
|
74
83
|
@period ||= time_zone.period_for_utc(@utc)
|
75
84
|
end
|
@@ -104,13 +113,13 @@ module ActiveSupport
|
|
104
113
|
# Time.zone = 'Eastern Time (US & Canada)' # => 'Eastern Time (US & Canada)'
|
105
114
|
# Time.zone.now.utc? # => false
|
106
115
|
def utc?
|
107
|
-
|
116
|
+
zone == "UTC" || zone == "UCT"
|
108
117
|
end
|
109
118
|
alias_method :gmt?, :utc?
|
110
119
|
|
111
120
|
# Returns the offset from current time to UTC time in seconds.
|
112
121
|
def utc_offset
|
113
|
-
period.
|
122
|
+
period.observed_utc_offset
|
114
123
|
end
|
115
124
|
alias_method :gmt_offset, :utc_offset
|
116
125
|
alias_method :gmtoff, :utc_offset
|
@@ -132,14 +141,14 @@ module ActiveSupport
|
|
132
141
|
# Time.zone = 'Eastern Time (US & Canada)' # => "Eastern Time (US & Canada)"
|
133
142
|
# Time.zone.now.zone # => "EST"
|
134
143
|
def zone
|
135
|
-
period.
|
144
|
+
period.abbreviation
|
136
145
|
end
|
137
146
|
|
138
147
|
# Returns a string of the object's date, time, zone, and offset from UTC.
|
139
148
|
#
|
140
|
-
# Time.zone.now.inspect # => "Thu, 04 Dec 2014 11:00:25 EST -05:00"
|
149
|
+
# Time.zone.now.inspect # => "Thu, 04 Dec 2014 11:00:25.624541392 EST -05:00"
|
141
150
|
def inspect
|
142
|
-
"#{time.strftime('%a, %d %b %Y %H:%M:%S')} #{zone} #{formatted_offset}"
|
151
|
+
"#{time.strftime('%a, %d %b %Y %H:%M:%S.%9N')} #{zone} #{formatted_offset}"
|
143
152
|
end
|
144
153
|
|
145
154
|
# Returns a string of the object's date and time in the ISO 8601 standard
|
@@ -172,12 +181,11 @@ module ActiveSupport
|
|
172
181
|
end
|
173
182
|
end
|
174
183
|
|
175
|
-
def init_with(coder)
|
184
|
+
def init_with(coder) # :nodoc:
|
176
185
|
initialize(coder["utc"], coder["zone"], coder["time"])
|
177
186
|
end
|
178
187
|
|
179
|
-
def encode_with(coder)
|
180
|
-
coder.tag = "!ruby/object:ActiveSupport::TimeWithZone"
|
188
|
+
def encode_with(coder) # :nodoc:
|
181
189
|
coder.map = { "utc" => utc, "zone" => time_zone, "time" => time }
|
182
190
|
end
|
183
191
|
|
@@ -194,25 +202,53 @@ module ActiveSupport
|
|
194
202
|
#
|
195
203
|
# Time.zone.now.rfc2822 # => "Tue, 01 Jan 2013 04:51:39 +0000"
|
196
204
|
def rfc2822
|
197
|
-
|
205
|
+
to_fs(:rfc822)
|
198
206
|
end
|
199
207
|
alias_method :rfc822, :rfc2822
|
200
208
|
|
209
|
+
NOT_SET = Object.new # :nodoc:
|
210
|
+
|
211
|
+
# Returns a string of the object's date and time.
|
212
|
+
def to_s(format = NOT_SET)
|
213
|
+
if format == :db
|
214
|
+
ActiveSupport::Deprecation.warn(
|
215
|
+
"TimeWithZone#to_s(:db) is deprecated. Please use TimeWithZone#to_fs(:db) instead."
|
216
|
+
)
|
217
|
+
utc.to_fs(format)
|
218
|
+
elsif formatter = ::Time::DATE_FORMATS[format]
|
219
|
+
ActiveSupport::Deprecation.warn(
|
220
|
+
"TimeWithZone#to_s(#{format.inspect}) is deprecated. Please use TimeWithZone#to_fs(#{format.inspect}) instead."
|
221
|
+
)
|
222
|
+
formatter.respond_to?(:call) ? formatter.call(self).to_s : strftime(formatter)
|
223
|
+
elsif format == NOT_SET
|
224
|
+
"#{time.strftime("%Y-%m-%d %H:%M:%S")} #{formatted_offset(false, 'UTC')}" # mimicking Ruby Time#to_s format
|
225
|
+
else
|
226
|
+
ActiveSupport::Deprecation.warn(
|
227
|
+
"TimeWithZone#to_s(#{format.inspect}) is deprecated. Please use TimeWithZone#to_fs(#{format.inspect}) instead."
|
228
|
+
)
|
229
|
+
"#{time.strftime("%Y-%m-%d %H:%M:%S")} #{formatted_offset(false, 'UTC')}" # mimicking Ruby Time#to_s format
|
230
|
+
end
|
231
|
+
end
|
232
|
+
|
201
233
|
# Returns a string of the object's date and time.
|
234
|
+
#
|
235
|
+
# This method is aliased to <tt>to_formatted_s</tt>.
|
236
|
+
#
|
202
237
|
# Accepts an optional <tt>format</tt>:
|
203
238
|
# * <tt>:default</tt> - default value, mimics Ruby Time#to_s format.
|
204
|
-
# * <tt>:db</tt> - format outputs time in UTC :db time. See Time#
|
239
|
+
# * <tt>:db</tt> - format outputs time in UTC :db time. See Time#to_fs(:db).
|
205
240
|
# * Any key in <tt>Time::DATE_FORMATS</tt> can be used. See active_support/core_ext/time/conversions.rb.
|
206
|
-
def
|
241
|
+
def to_fs(format = :default)
|
207
242
|
if format == :db
|
208
|
-
utc.
|
243
|
+
utc.to_fs(format)
|
209
244
|
elsif formatter = ::Time::DATE_FORMATS[format]
|
210
245
|
formatter.respond_to?(:call) ? formatter.call(self).to_s : strftime(formatter)
|
211
246
|
else
|
212
|
-
|
247
|
+
# Change to to_s when deprecation is gone.
|
248
|
+
"#{time.strftime("%Y-%m-%d %H:%M:%S")} #{formatted_offset(false, 'UTC')}"
|
213
249
|
end
|
214
250
|
end
|
215
|
-
alias_method :to_formatted_s, :
|
251
|
+
alias_method :to_formatted_s, :to_fs
|
216
252
|
|
217
253
|
# Replaces <tt>%Z</tt> directive with +zone before passing to Time#strftime,
|
218
254
|
# so that zone information is correct.
|
@@ -245,6 +281,20 @@ module ActiveSupport
|
|
245
281
|
time.today?
|
246
282
|
end
|
247
283
|
|
284
|
+
# Returns true if the current object's time falls within
|
285
|
+
# the next day (tomorrow).
|
286
|
+
def tomorrow?
|
287
|
+
time.tomorrow?
|
288
|
+
end
|
289
|
+
alias :next_day? :tomorrow?
|
290
|
+
|
291
|
+
# Returns true if the current object's time falls within
|
292
|
+
# the previous day (yesterday).
|
293
|
+
def yesterday?
|
294
|
+
time.yesterday?
|
295
|
+
end
|
296
|
+
alias :prev_day? :yesterday?
|
297
|
+
|
248
298
|
# Returns true if the current object's time is in the future.
|
249
299
|
def future?
|
250
300
|
utc.future?
|
@@ -263,8 +313,8 @@ module ActiveSupport
|
|
263
313
|
# value as a new TimeWithZone object.
|
264
314
|
#
|
265
315
|
# Time.zone = 'Eastern Time (US & Canada)' # => 'Eastern Time (US & Canada)'
|
266
|
-
# now = Time.zone.now # => Sun, 02 Nov 2014 01:26:28 EDT -04:00
|
267
|
-
# now + 1000 # => Sun, 02 Nov 2014 01:43:08 EDT -04:00
|
316
|
+
# now = Time.zone.now # => Sun, 02 Nov 2014 01:26:28.725182881 EDT -04:00
|
317
|
+
# now + 1000 # => Sun, 02 Nov 2014 01:43:08.725182881 EDT -04:00
|
268
318
|
#
|
269
319
|
# If we're adding a Duration of variable length (i.e., years, months, days),
|
270
320
|
# move forward from #time, otherwise move forward from #utc, for accuracy
|
@@ -273,8 +323,8 @@ module ActiveSupport
|
|
273
323
|
# For instance, a time + 24.hours will advance exactly 24 hours, while a
|
274
324
|
# time + 1.day will advance 23-25 hours, depending on the day.
|
275
325
|
#
|
276
|
-
# now + 24.hours # => Mon, 03 Nov 2014 00:26:28 EST -05:00
|
277
|
-
# now + 1.day # => Mon, 03 Nov 2014 01:26:28 EST -05:00
|
326
|
+
# now + 24.hours # => Mon, 03 Nov 2014 00:26:28.725182881 EST -05:00
|
327
|
+
# now + 1.day # => Mon, 03 Nov 2014 01:26:28.725182881 EST -05:00
|
278
328
|
def +(other)
|
279
329
|
if duration_of_variable_length?(other)
|
280
330
|
method_missing(:+, other)
|
@@ -287,13 +337,12 @@ module ActiveSupport
|
|
287
337
|
alias_method :in, :+
|
288
338
|
|
289
339
|
# Subtracts an interval of time and returns a new TimeWithZone object unless
|
290
|
-
# the other value
|
291
|
-
#
|
292
|
-
# object's time and the +other+ time.
|
340
|
+
# the other value +acts_like?+ time. In which case, it will subtract the
|
341
|
+
# other time and return the difference in seconds as a Float.
|
293
342
|
#
|
294
343
|
# Time.zone = 'Eastern Time (US & Canada)' # => 'Eastern Time (US & Canada)'
|
295
|
-
# now = Time.zone.now # => Mon, 03 Nov 2014 00:26:28 EST -05:00
|
296
|
-
# now - 1000 # => Mon, 03 Nov 2014 00:09:48 EST -05:00
|
344
|
+
# now = Time.zone.now # => Mon, 03 Nov 2014 00:26:28.725182881 EST -05:00
|
345
|
+
# now - 1000 # => Mon, 03 Nov 2014 00:09:48.725182881 EST -05:00
|
297
346
|
#
|
298
347
|
# If subtracting a Duration of variable length (i.e., years, months, days),
|
299
348
|
# move backward from #time, otherwise move backward from #utc, for accuracy
|
@@ -302,8 +351,8 @@ module ActiveSupport
|
|
302
351
|
# For instance, a time - 24.hours will go subtract exactly 24 hours, while a
|
303
352
|
# time - 1.day will subtract 23-25 hours, depending on the day.
|
304
353
|
#
|
305
|
-
# now - 24.hours # => Sun, 02 Nov 2014 01:26:28 EDT -04:00
|
306
|
-
# now - 1.day # => Sun, 02 Nov 2014 00:26:28 EDT -04:00
|
354
|
+
# now - 24.hours # => Sun, 02 Nov 2014 01:26:28.725182881 EDT -04:00
|
355
|
+
# now - 1.day # => Sun, 02 Nov 2014 00:26:28.725182881 EDT -04:00
|
307
356
|
#
|
308
357
|
# If both the TimeWithZone object and the other value act like Time, a Float
|
309
358
|
# will be returned.
|
@@ -325,8 +374,8 @@ module ActiveSupport
|
|
325
374
|
# the result as a new TimeWithZone object.
|
326
375
|
#
|
327
376
|
# Time.zone = 'Eastern Time (US & Canada)' # => 'Eastern Time (US & Canada)'
|
328
|
-
# now = Time.zone.now # => Mon, 03 Nov 2014 00:26:28 EST -05:00
|
329
|
-
# now.ago(1000) # => Mon, 03 Nov 2014 00:09:48 EST -05:00
|
377
|
+
# now = Time.zone.now # => Mon, 03 Nov 2014 00:26:28.725182881 EST -05:00
|
378
|
+
# now.ago(1000) # => Mon, 03 Nov 2014 00:09:48.725182881 EST -05:00
|
330
379
|
#
|
331
380
|
# If we're subtracting a Duration of variable length (i.e., years, months,
|
332
381
|
# days), move backward from #time, otherwise move backward from #utc, for
|
@@ -336,8 +385,8 @@ module ActiveSupport
|
|
336
385
|
# while <tt>time.ago(1.day)</tt> will move back 23-25 hours, depending on
|
337
386
|
# the day.
|
338
387
|
#
|
339
|
-
# now.ago(24.hours) # => Sun, 02 Nov 2014 01:26:28 EDT -04:00
|
340
|
-
# now.ago(1.day) # => Sun, 02 Nov 2014 00:26:28 EDT -04:00
|
388
|
+
# now.ago(24.hours) # => Sun, 02 Nov 2014 01:26:28.725182881 EDT -04:00
|
389
|
+
# now.ago(1.day) # => Sun, 02 Nov 2014 00:26:28.725182881 EDT -04:00
|
341
390
|
def ago(other)
|
342
391
|
since(-other)
|
343
392
|
end
|
@@ -345,20 +394,20 @@ module ActiveSupport
|
|
345
394
|
# Returns a new +ActiveSupport::TimeWithZone+ where one or more of the elements have
|
346
395
|
# been changed according to the +options+ parameter. The time options (<tt>:hour</tt>,
|
347
396
|
# <tt>:min</tt>, <tt>:sec</tt>, <tt>:usec</tt>, <tt>:nsec</tt>) reset cascadingly,
|
348
|
-
# so if only the hour is passed, then minute, sec, usec and nsec is set to 0. If the
|
349
|
-
# hour and minute is passed, then sec, usec and nsec is set to 0. The +options+
|
397
|
+
# so if only the hour is passed, then minute, sec, usec, and nsec is set to 0. If the
|
398
|
+
# hour and minute is passed, then sec, usec, and nsec is set to 0. The +options+
|
350
399
|
# parameter takes a hash with any of these keys: <tt>:year</tt>, <tt>:month</tt>,
|
351
400
|
# <tt>:day</tt>, <tt>:hour</tt>, <tt>:min</tt>, <tt>:sec</tt>, <tt>:usec</tt>,
|
352
401
|
# <tt>:nsec</tt>, <tt>:offset</tt>, <tt>:zone</tt>. Pass either <tt>:usec</tt>
|
353
402
|
# or <tt>:nsec</tt>, not both. Similarly, pass either <tt>:zone</tt> or
|
354
403
|
# <tt>:offset</tt>, not both.
|
355
404
|
#
|
356
|
-
# t = Time.zone.now # => Fri, 14 Apr 2017 11:45:15 EST -05:00
|
357
|
-
# t.change(year: 2020) # => Tue, 14 Apr 2020 11:45:15 EST -05:00
|
358
|
-
# t.change(hour: 12) # => Fri, 14 Apr 2017 12:00:00 EST -05:00
|
359
|
-
# t.change(min: 30) # => Fri, 14 Apr 2017 11:30:00 EST -05:00
|
360
|
-
# t.change(offset: "-10:00") # => Fri, 14 Apr 2017 11:45:15 HST -10:00
|
361
|
-
# t.change(zone: "Hawaii") # => Fri, 14 Apr 2017 11:45:15 HST -10:00
|
405
|
+
# t = Time.zone.now # => Fri, 14 Apr 2017 11:45:15.116992711 EST -05:00
|
406
|
+
# t.change(year: 2020) # => Tue, 14 Apr 2020 11:45:15.116992711 EST -05:00
|
407
|
+
# t.change(hour: 12) # => Fri, 14 Apr 2017 12:00:00.116992711 EST -05:00
|
408
|
+
# t.change(min: 30) # => Fri, 14 Apr 2017 11:30:00.116992711 EST -05:00
|
409
|
+
# t.change(offset: "-10:00") # => Fri, 14 Apr 2017 11:45:15.116992711 HST -10:00
|
410
|
+
# t.change(zone: "Hawaii") # => Fri, 14 Apr 2017 11:45:15.116992711 HST -10:00
|
362
411
|
def change(options)
|
363
412
|
if options[:zone] && options[:offset]
|
364
413
|
raise ArgumentError, "Can't change both :offset and :zone at the same time: #{options.inspect}"
|
@@ -391,14 +440,14 @@ module ActiveSupport
|
|
391
440
|
# accuracy when moving across DST boundaries.
|
392
441
|
#
|
393
442
|
# Time.zone = 'Eastern Time (US & Canada)' # => 'Eastern Time (US & Canada)'
|
394
|
-
# now = Time.zone.now # => Sun, 02 Nov 2014 01:26:28 EDT -04:00
|
395
|
-
# now.advance(seconds: 1) # => Sun, 02 Nov 2014 01:26:29 EDT -04:00
|
396
|
-
# now.advance(minutes: 1) # => Sun, 02 Nov 2014 01:27:28 EDT -04:00
|
397
|
-
# now.advance(hours: 1) # => Sun, 02 Nov 2014 01:26:28 EST -05:00
|
398
|
-
# now.advance(days: 1) # => Mon, 03 Nov 2014 01:26:28 EST -05:00
|
399
|
-
# now.advance(weeks: 1) # => Sun, 09 Nov 2014 01:26:28 EST -05:00
|
400
|
-
# now.advance(months: 1) # => Tue, 02 Dec 2014 01:26:28 EST -05:00
|
401
|
-
# now.advance(years: 1) # => Mon, 02 Nov 2015 01:26:28 EST -05:00
|
443
|
+
# now = Time.zone.now # => Sun, 02 Nov 2014 01:26:28.558049687 EDT -04:00
|
444
|
+
# now.advance(seconds: 1) # => Sun, 02 Nov 2014 01:26:29.558049687 EDT -04:00
|
445
|
+
# now.advance(minutes: 1) # => Sun, 02 Nov 2014 01:27:28.558049687 EDT -04:00
|
446
|
+
# now.advance(hours: 1) # => Sun, 02 Nov 2014 01:26:28.558049687 EST -05:00
|
447
|
+
# now.advance(days: 1) # => Mon, 03 Nov 2014 01:26:28.558049687 EST -05:00
|
448
|
+
# now.advance(weeks: 1) # => Sun, 09 Nov 2014 01:26:28.558049687 EST -05:00
|
449
|
+
# now.advance(months: 1) # => Tue, 02 Dec 2014 01:26:28.558049687 EST -05:00
|
450
|
+
# now.advance(years: 1) # => Mon, 02 Nov 2015 01:26:28.558049687 EST -05:00
|
402
451
|
def advance(options)
|
403
452
|
# If we're advancing a value of variable length (i.e., years, weeks, months, days), advance from #time,
|
404
453
|
# otherwise advance from #utc, for accuracy when moving across DST boundaries
|
@@ -420,13 +469,13 @@ module ActiveSupport
|
|
420
469
|
# Returns Array of parts of Time in sequence of
|
421
470
|
# [seconds, minutes, hours, day, month, year, weekday, yearday, dst?, zone].
|
422
471
|
#
|
423
|
-
# now = Time.zone.now # => Tue, 18 Aug 2015 02:29:27 UTC +00:00
|
472
|
+
# now = Time.zone.now # => Tue, 18 Aug 2015 02:29:27.485278555 UTC +00:00
|
424
473
|
# now.to_a # => [27, 29, 2, 18, 8, 2015, 2, 230, false, "UTC"]
|
425
474
|
def to_a
|
426
475
|
[time.sec, time.min, time.hour, time.day, time.mon, time.year, time.wday, time.yday, dst?, zone]
|
427
476
|
end
|
428
477
|
|
429
|
-
# Returns the object's date and time as a floating
|
478
|
+
# Returns the object's date and time as a floating-point number of seconds
|
430
479
|
# since the Epoch (January 1, 1970 00:00 UTC).
|
431
480
|
#
|
432
481
|
# Time.zone.now.to_f # => 1417709320.285418
|
@@ -520,10 +569,20 @@ module ActiveSupport
|
|
520
569
|
def method_missing(sym, *args, &block)
|
521
570
|
wrap_with_time_zone time.__send__(sym, *args, &block)
|
522
571
|
rescue NoMethodError => e
|
523
|
-
raise e, e.message.sub(time.inspect, inspect), e.backtrace
|
572
|
+
raise e, e.message.sub(time.inspect, inspect).sub("Time", "ActiveSupport::TimeWithZone"), e.backtrace
|
524
573
|
end
|
525
574
|
|
526
575
|
private
|
576
|
+
SECONDS_PER_DAY = 86400
|
577
|
+
|
578
|
+
def incorporate_utc_offset(time, offset)
|
579
|
+
if time.kind_of?(Date)
|
580
|
+
time + Rational(offset, SECONDS_PER_DAY)
|
581
|
+
else
|
582
|
+
time + offset
|
583
|
+
end
|
584
|
+
end
|
585
|
+
|
527
586
|
def get_period_and_ensure_valid_local_time(period)
|
528
587
|
# we don't want a Time.local instance enforcing its own DST rules as well,
|
529
588
|
# so transfer time values to a utc constructor if necessary
|
@@ -544,7 +603,7 @@ module ActiveSupport
|
|
544
603
|
end
|
545
604
|
|
546
605
|
def duration_of_variable_length?(obj)
|
547
|
-
ActiveSupport::Duration === obj && obj.
|
606
|
+
ActiveSupport::Duration === obj && obj.variable?
|
548
607
|
end
|
549
608
|
|
550
609
|
def wrap_with_time_zone(time)
|
@@ -559,3 +618,8 @@ module ActiveSupport
|
|
559
618
|
end
|
560
619
|
end
|
561
620
|
end
|
621
|
+
|
622
|
+
# These prevent Psych from calling `ActiveSupport::TimeWithZone.name`
|
623
|
+
# and triggering the deprecation warning about the change in Rails 7.1.
|
624
|
+
YAML.load_tags["!ruby/object:ActiveSupport::TimeWithZone"] = "ActiveSupport::TimeWithZone"
|
625
|
+
YAML.dump_tags[ActiveSupport::TimeWithZone] = "!ruby/object:ActiveSupport::TimeWithZone"
|
@@ -4,16 +4,16 @@ require "tzinfo"
|
|
4
4
|
require "concurrent/map"
|
5
5
|
|
6
6
|
module ActiveSupport
|
7
|
-
# The TimeZone class serves as a wrapper around TZInfo::Timezone instances.
|
7
|
+
# The TimeZone class serves as a wrapper around <tt>TZInfo::Timezone</tt> instances.
|
8
8
|
# It allows us to do the following:
|
9
9
|
#
|
10
10
|
# * Limit the set of zones provided by TZInfo to a meaningful subset of 134
|
11
11
|
# zones.
|
12
12
|
# * Retrieve and display zones with a friendlier name
|
13
13
|
# (e.g., "Eastern Time (US & Canada)" instead of "America/New_York").
|
14
|
-
# * Lazily load TZInfo::Timezone instances only when they're needed.
|
14
|
+
# * Lazily load <tt>TZInfo::Timezone</tt> instances only when they're needed.
|
15
15
|
# * Create ActiveSupport::TimeWithZone instances via TimeZone's +local+,
|
16
|
-
# +parse+, +at
|
16
|
+
# +parse+, +at+, and +now+ methods.
|
17
17
|
#
|
18
18
|
# If you set <tt>config.time_zone</tt> in the Rails Application, you can
|
19
19
|
# access this TimeZone object via <tt>Time.zone</tt>:
|
@@ -203,7 +203,7 @@ module ActiveSupport
|
|
203
203
|
end
|
204
204
|
|
205
205
|
def find_tzinfo(name)
|
206
|
-
TZInfo::Timezone.
|
206
|
+
TZInfo::Timezone.get(MAPPING[name] || name)
|
207
207
|
end
|
208
208
|
|
209
209
|
alias_method :create, :new
|
@@ -229,12 +229,16 @@ module ActiveSupport
|
|
229
229
|
# Returns +nil+ if no such time zone is known to the system.
|
230
230
|
def [](arg)
|
231
231
|
case arg
|
232
|
+
when self
|
233
|
+
arg
|
232
234
|
when String
|
233
235
|
begin
|
234
236
|
@lazy_zones_map[arg] ||= create(arg)
|
235
237
|
rescue TZInfo::InvalidTimezoneIdentifier
|
236
238
|
nil
|
237
239
|
end
|
240
|
+
when TZInfo::Timezone
|
241
|
+
@lazy_zones_map[arg.name] ||= create(arg.name, nil, arg)
|
238
242
|
when Numeric, ActiveSupport::Duration
|
239
243
|
arg *= 3600 if arg.abs <= 13
|
240
244
|
all.find { |z| z.utc_offset == arg.to_i }
|
@@ -256,7 +260,7 @@ module ActiveSupport
|
|
256
260
|
@country_zones[code] ||= load_country_zones(code)
|
257
261
|
end
|
258
262
|
|
259
|
-
def clear
|
263
|
+
def clear # :nodoc:
|
260
264
|
@lazy_zones_map = Concurrent::Map.new
|
261
265
|
@country_zones = Concurrent::Map.new
|
262
266
|
@zones = nil
|
@@ -273,7 +277,7 @@ module ActiveSupport
|
|
273
277
|
memo
|
274
278
|
end
|
275
279
|
else
|
276
|
-
create(tz_id, nil, TZInfo::Timezone.
|
280
|
+
create(tz_id, nil, TZInfo::Timezone.get(tz_id))
|
277
281
|
end
|
278
282
|
end.sort!
|
279
283
|
end
|
@@ -302,11 +306,7 @@ module ActiveSupport
|
|
302
306
|
|
303
307
|
# Returns the offset of this time zone from UTC in seconds.
|
304
308
|
def utc_offset
|
305
|
-
|
306
|
-
@utc_offset
|
307
|
-
else
|
308
|
-
tzinfo.current_period.utc_offset if tzinfo && tzinfo.current_period
|
309
|
-
end
|
309
|
+
@utc_offset || tzinfo&.current_period&.base_utc_offset
|
310
310
|
end
|
311
311
|
|
312
312
|
# Returns a formatted string of the offset from UTC, or an alternative
|
@@ -334,6 +334,13 @@ module ActiveSupport
|
|
334
334
|
re === name || re === MAPPING[name]
|
335
335
|
end
|
336
336
|
|
337
|
+
# Compare #name and TZInfo identifier to a supplied regexp, returning +true+
|
338
|
+
# if a match is found.
|
339
|
+
def match?(re)
|
340
|
+
(re == name) || (re == MAPPING[name]) ||
|
341
|
+
((Regexp === re) && (re.match?(name) || re.match?(MAPPING[name])))
|
342
|
+
end
|
343
|
+
|
337
344
|
# Returns a textual representation of this time zone.
|
338
345
|
def to_s
|
339
346
|
"(GMT#{formatted_offset}) #{name}"
|
@@ -378,14 +385,28 @@ module ActiveSupport
|
|
378
385
|
# If the string is invalid then an +ArgumentError+ will be raised unlike +parse+
|
379
386
|
# which usually returns +nil+ when given an invalid date string.
|
380
387
|
def iso8601(str)
|
388
|
+
# Historically `Date._iso8601(nil)` returns `{}`, but in the `date` gem versions `3.2.1`, `3.1.2`, `3.0.2`,
|
389
|
+
# and `2.0.1`, `Date._iso8601(nil)` raises `TypeError` https://github.com/ruby/date/issues/39
|
390
|
+
# Future `date` releases are expected to revert back to the original behavior.
|
391
|
+
raise ArgumentError, "invalid date" if str.nil?
|
392
|
+
|
381
393
|
parts = Date._iso8601(str)
|
382
394
|
|
383
|
-
|
395
|
+
year = parts.fetch(:year)
|
396
|
+
|
397
|
+
if parts.key?(:yday)
|
398
|
+
ordinal_date = Date.ordinal(year, parts.fetch(:yday))
|
399
|
+
month = ordinal_date.month
|
400
|
+
day = ordinal_date.day
|
401
|
+
else
|
402
|
+
month = parts.fetch(:mon)
|
403
|
+
day = parts.fetch(:mday)
|
404
|
+
end
|
384
405
|
|
385
406
|
time = Time.new(
|
386
|
-
|
387
|
-
|
388
|
-
|
407
|
+
year,
|
408
|
+
month,
|
409
|
+
day,
|
389
410
|
parts.fetch(:hour, 0),
|
390
411
|
parts.fetch(:min, 0),
|
391
412
|
parts.fetch(:sec, 0) + parts.fetch(:sec_fraction, 0),
|
@@ -397,6 +418,9 @@ module ActiveSupport
|
|
397
418
|
else
|
398
419
|
TimeWithZone.new(nil, self, time)
|
399
420
|
end
|
421
|
+
|
422
|
+
rescue Date::Error, KeyError
|
423
|
+
raise ArgumentError, "invalid date"
|
400
424
|
end
|
401
425
|
|
402
426
|
# Method for creating new ActiveSupport::TimeWithZone instance in time zone
|
@@ -500,10 +524,17 @@ module ActiveSupport
|
|
500
524
|
end
|
501
525
|
|
502
526
|
# Adjust the given time to the simultaneous time in the time zone
|
503
|
-
# represented by +self+. Returns a
|
504
|
-
# ActiveSupport::TimeWithZone instance, use
|
527
|
+
# represented by +self+. Returns a local time with the appropriate offset
|
528
|
+
# -- if you want an ActiveSupport::TimeWithZone instance, use
|
529
|
+
# Time#in_time_zone() instead.
|
530
|
+
#
|
531
|
+
# As of tzinfo 2, utc_to_local returns a Time with a non-zero utc_offset.
|
532
|
+
# See the +utc_to_local_returns_utc_offset_times+ config for more info.
|
505
533
|
def utc_to_local(time)
|
506
|
-
tzinfo.utc_to_local(time)
|
534
|
+
tzinfo.utc_to_local(time).yield_self do |t|
|
535
|
+
ActiveSupport.utc_to_local_returns_utc_offset_times ?
|
536
|
+
t : Time.utc(t.year, t.month, t.day, t.hour, t.min, t.sec, t.sec_fraction * 1_000_000)
|
537
|
+
end
|
507
538
|
end
|
508
539
|
|
509
540
|
# Adjust the given time to the simultaneous time in UTC. Returns a
|
@@ -512,27 +543,27 @@ module ActiveSupport
|
|
512
543
|
tzinfo.local_to_utc(time, dst)
|
513
544
|
end
|
514
545
|
|
515
|
-
# Available so that TimeZone instances respond like TZInfo::Timezone
|
546
|
+
# Available so that TimeZone instances respond like <tt>TZInfo::Timezone</tt>
|
516
547
|
# instances.
|
517
548
|
def period_for_utc(time)
|
518
549
|
tzinfo.period_for_utc(time)
|
519
550
|
end
|
520
551
|
|
521
|
-
# Available so that TimeZone instances respond like TZInfo::Timezone
|
552
|
+
# Available so that TimeZone instances respond like <tt>TZInfo::Timezone</tt>
|
522
553
|
# instances.
|
523
554
|
def period_for_local(time, dst = true)
|
524
555
|
tzinfo.period_for_local(time, dst) { |periods| periods.last }
|
525
556
|
end
|
526
557
|
|
527
|
-
def periods_for_local(time)
|
558
|
+
def periods_for_local(time) # :nodoc:
|
528
559
|
tzinfo.periods_for_local(time)
|
529
560
|
end
|
530
561
|
|
531
|
-
def init_with(coder)
|
562
|
+
def init_with(coder) # :nodoc:
|
532
563
|
initialize(coder["name"])
|
533
564
|
end
|
534
565
|
|
535
|
-
def encode_with(coder)
|
566
|
+
def encode_with(coder) # :nodoc:
|
536
567
|
coder.tag = "!ruby/object:#{self.class}"
|
537
568
|
coder.map = { "name" => tzinfo.name }
|
538
569
|
end
|
@@ -3,7 +3,7 @@
|
|
3
3
|
require_relative "gem_version"
|
4
4
|
|
5
5
|
module ActiveSupport
|
6
|
-
# Returns the version of
|
6
|
+
# Returns the currently loaded version of Active Support as a <tt>Gem::Version</tt>.
|
7
7
|
def self.version
|
8
8
|
gem_version
|
9
9
|
end
|
@@ -5,7 +5,7 @@ require "active_support/core_ext/object/blank"
|
|
5
5
|
require "stringio"
|
6
6
|
|
7
7
|
module ActiveSupport
|
8
|
-
module XmlMini_LibXML
|
8
|
+
module XmlMini_LibXML # :nodoc:
|
9
9
|
extend self
|
10
10
|
|
11
11
|
# Parse an XML Document string or IO into a simple hash using libxml.
|
@@ -25,15 +25,15 @@ module ActiveSupport
|
|
25
25
|
end
|
26
26
|
end
|
27
27
|
|
28
|
-
module LibXML
|
29
|
-
module Conversions
|
30
|
-
module Document
|
28
|
+
module LibXML # :nodoc:
|
29
|
+
module Conversions # :nodoc:
|
30
|
+
module Document # :nodoc:
|
31
31
|
def to_hash
|
32
32
|
root.to_hash
|
33
33
|
end
|
34
34
|
end
|
35
35
|
|
36
|
-
module Node
|
36
|
+
module Node # :nodoc:
|
37
37
|
CONTENT_ROOT = "__content__"
|
38
38
|
|
39
39
|
# Convert XML document to hash.
|
@@ -10,7 +10,7 @@ require "active_support/core_ext/object/blank"
|
|
10
10
|
require "stringio"
|
11
11
|
|
12
12
|
module ActiveSupport
|
13
|
-
module XmlMini_Nokogiri
|
13
|
+
module XmlMini_Nokogiri # :nodoc:
|
14
14
|
extend self
|
15
15
|
|
16
16
|
# Parse an XML Document string or IO into a simple hash using libxml / nokogiri.
|
@@ -30,14 +30,14 @@ module ActiveSupport
|
|
30
30
|
end
|
31
31
|
end
|
32
32
|
|
33
|
-
module Conversions
|
34
|
-
module Document
|
33
|
+
module Conversions # :nodoc:
|
34
|
+
module Document # :nodoc:
|
35
35
|
def to_hash
|
36
36
|
root.to_hash
|
37
37
|
end
|
38
38
|
end
|
39
39
|
|
40
|
-
module Node
|
40
|
+
module Node # :nodoc:
|
41
41
|
CONTENT_ROOT = "__content__"
|
42
42
|
|
43
43
|
# Convert XML document to hash.
|