Psych.to_json can create invalid JSON if scalar values are not marked at quoted
Steps to reproduce
I have created an executable test for this bug: https://gist.github.com/ianks/ba1f7175754780168c2a6618f13c95ec
I did not know whether to report this to Psych or Rails, just let me know if it belongs elsewhere and I will move the issue.
Expected behavior
Psych.to_json should emit valid JSON. Currently, not all keys are double-quoted; which although valid in JS, is not valid JSON.
Actual behavior
It emits invalid json, which can be seen in this example:
{"raw_attributes": {"id": null}, "attributes": {attributes: {"id": {name: "id", value_before_type_cast: null,
type: {precision: null, scale: null, limit: null, range: {"begin": -2147483648,
"end": 2147483648, "excl": true}}, original_attribute: null}}}, "new_record": true,
"active_record_yaml_version": 1}
System configuration
Rails version: 5.0.0
Ruby version: 2.3.1
Notes
Upon further investigation, it seems the scalar types for attributes are not marked as quoted. Even if they are not marked as quoted, should we still quote the values since all keys need to be quoted in JSON? (corresponding code https://github.com/ruby/psych/blob/master/lib/psych/json/yaml_events.rb#L21)