diff options
author | Paul Sadauskas <psadauskas@gmail.com> | 2016-07-11 13:45:04 -0600 |
---|---|---|
committer | Sean Griffin <sean@seantheprogrammer.com> | 2016-07-11 15:45:04 -0400 |
commit | 629dde297ce5e4b7614fbb0218f2593effaf7e28 (patch) | |
tree | d52aa79f1986b62a6e71e3667d872aee5bf510e7 /actionpack/test/controller/localized_templates_test.rb | |
parent | f3cd032a2c88b990984e325082c231ea7e7dbca2 (diff) | |
download | rails-629dde297ce5e4b7614fbb0218f2593effaf7e28.tar.gz rails-629dde297ce5e4b7614fbb0218f2593effaf7e28.tar.bz2 rails-629dde297ce5e4b7614fbb0218f2593effaf7e28.zip |
AS::Duration should serialize empty values correctly. (#25656)
The current implementation serializes zero-length durations incorrectly (it serializes as `"-P"`), and cannot un-serialize itself:
```
[1] pry(main)> ActiveSupport::Duration.parse(0.minutes.iso8601)
ActiveSupport::Duration::ISO8601Parser::ParsingError: Invalid ISO 8601 duration: "-P" is empty duration
from /Users/rando/.gem/ruby/2.3.1/gems/activesupport-5.0.0/lib/active_support/duration/iso8601_parser.rb:96:in `raise_parsing_error'
```
Postgres empty intervals are serialized as `"PT0S"`, which is also parseable by the Duration deserializer, so I've modified the `ISO8601Serializer` to do the same.
Additionally, the `#normalize` function returned a negative sign if `parts` was blank (all zero). Even though this fix does not rely on the sign, I've gone ahead and corrected that, too, in case a future refactoring of `#serialize` uses it.
Diffstat (limited to 'actionpack/test/controller/localized_templates_test.rb')
0 files changed, 0 insertions, 0 deletions