Skip to content

Commit

Permalink
Fixed a compatibility issue with the Oj gem
Browse files Browse the repository at this point in the history
`Time#as_json`, `Date#as_json` and `DateTime#as_json` incorrectly depends on a
delegation that is set up in `active_support/json/encoding`. We cannot simply
require that file in `core_ext/object/json` because it would cause a circular
dependency problem (see #12203 for background). We should instead rely on AS's
autoload to load that file for us on-demand.

To trigger autoload correctly, we need to reference the `AS::JSON::Encoding`
constant instead of using the delegated version.

Fixes #16131.
  • Loading branch information
chancancode committed Jul 28, 2014
1 parent 545b8ad commit 37792d3
Show file tree
Hide file tree
Showing 2 changed files with 10 additions and 3 deletions.
7 changes: 7 additions & 0 deletions activesupport/CHANGELOG.md
@@ -1,3 +1,10 @@
* Fixed a compatibility issue with the `Oj` gem when cherry-picking the file
`active_support/core_ext/object/json` without requiring `active_support/json`.

Fixes #16131.

*Godfrey Chan*

* Make `Hash#with_indifferent_access` copy the default proc too.

*arthurnn*, *Xanders*
Expand Down
6 changes: 3 additions & 3 deletions activesupport/lib/active_support/core_ext/object/json.rb
Expand Up @@ -162,7 +162,7 @@ def as_json(options = nil) #:nodoc:

class Time
def as_json(options = nil) #:nodoc:
if ActiveSupport.use_standard_json_time_format
if ActiveSupport::JSON::Encoding.use_standard_json_time_format
xmlschema(ActiveSupport::JSON::Encoding.time_precision)
else
%(#{strftime("%Y/%m/%d %H:%M:%S")} #{formatted_offset(false)})
Expand All @@ -172,7 +172,7 @@ def as_json(options = nil) #:nodoc:

class Date
def as_json(options = nil) #:nodoc:
if ActiveSupport.use_standard_json_time_format
if ActiveSupport::JSON::Encoding.use_standard_json_time_format
strftime("%Y-%m-%d")
else
strftime("%Y/%m/%d")
Expand All @@ -182,7 +182,7 @@ def as_json(options = nil) #:nodoc:

class DateTime
def as_json(options = nil) #:nodoc:
if ActiveSupport.use_standard_json_time_format
if ActiveSupport::JSON::Encoding.use_standard_json_time_format
xmlschema(ActiveSupport::JSON::Encoding.time_precision)
else
strftime('%Y/%m/%d %H:%M:%S %z')
Expand Down

0 comments on commit 37792d3

Please sign in to comment.