aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Gemfile.lock4
-rw-r--r--activesupport/lib/active_support/duration.rb8
-rw-r--r--activesupport/test/core_ext/duration_test.rb6
3 files changed, 16 insertions, 2 deletions
diff --git a/Gemfile.lock b/Gemfile.lock
index 1cff46a38d..0c9b58febc 100644
--- a/Gemfile.lock
+++ b/Gemfile.lock
@@ -305,11 +305,11 @@ GEM
mini_magick (4.8.0)
mini_mime (0.1.4)
mini_portile2 (2.3.0)
- minitest (5.11.1)
+ minitest (5.11.3)
minitest-bisect (1.4.0)
minitest-server (~> 1.0)
path_expander (~> 1.0)
- minitest-server (1.0.4)
+ minitest-server (1.0.5)
minitest (~> 5.0)
mocha (1.3.0)
metaclass (~> 0.0.1)
diff --git a/activesupport/lib/active_support/duration.rb b/activesupport/lib/active_support/duration.rb
index fe1058762b..88897f811e 100644
--- a/activesupport/lib/active_support/duration.rb
+++ b/activesupport/lib/active_support/duration.rb
@@ -383,6 +383,14 @@ module ActiveSupport
to_i
end
+ def init_with(coder) #:nodoc:
+ initialize(coder["value"], coder["parts"])
+ end
+
+ def encode_with(coder) #:nodoc:
+ coder.map = { "value" => @value, "parts" => @parts }
+ end
+
# Build ISO 8601 Duration string for this duration.
# The +precision+ parameter can be used to limit seconds' precision of duration.
def iso8601(precision: nil)
diff --git a/activesupport/test/core_ext/duration_test.rb b/activesupport/test/core_ext/duration_test.rb
index 4a02f27def..be33324f25 100644
--- a/activesupport/test/core_ext/duration_test.rb
+++ b/activesupport/test/core_ext/duration_test.rb
@@ -642,6 +642,12 @@ class DurationTest < ActiveSupport::TestCase
assert_equal time + d1, time + d2
end
+ def test_durations_survive_yaml_serialization
+ d1 = YAML.load(YAML.dump(10.minutes))
+ assert_equal 600, d1.to_i
+ assert_equal 660, (d1 + 60).to_i
+ end
+
private
def eastern_time_zone
if Gem.win_platform?