You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
# it to a JSON string, and returns the result. This is a fallback, if no
404
409
# special method #to_json was defined for some object.
405
410
defto_json(state=nil, *)
406
-
ifstate && State.from_state(state).strict?
407
-
raiseGeneratorError.new("#{self.class} not allowed in JSON",self)
411
+
state=State.from_state(state)ifstate
412
+
ifstate&.strict?
413
+
value=self
414
+
ifstate.strict? && !(false == value || true == value || nil == value || String === value || Array === value || Hash === value || Integer === value || Float === value)
415
+
ifstate.as_json
416
+
value=state.as_json.call(value)
417
+
unlessfalse == value || true == value || nil == value || String === value || Array === value || Hash === value || Integer === value || Float === value
418
+
raiseGeneratorError.new("#{value.class} returned by #{state.as_json} not allowed in JSON",value)
419
+
end
420
+
value.to_json(state)
421
+
else
422
+
raiseGeneratorError.new("#{value.class} not allowed in JSON",value)
ifstate.strict? && !(false == value || true == value || nil == value || String === value || Array === value || Hash === value || Integer === value || Float === value)
458
-
raiseGeneratorError.new("#{value.class} not allowed in JSON",value)
475
+
ifstate.as_json
476
+
value=state.as_json.call(value)
477
+
unlessfalse == value || true == value || nil == value || String === value || Array === value || Hash === value || Integer === value || Float === value
478
+
raiseGeneratorError.new("#{value.class} returned by #{state.as_json} not allowed in JSON",value)
479
+
end
480
+
result << value.to_json(state)
481
+
else
482
+
raiseGeneratorError.new("#{value.class} not allowed in JSON",value)
483
+
end
459
484
elsifvalue.respond_to?(:to_json)
460
485
result << value.to_json(state)
461
486
else
@@ -508,7 +533,15 @@ def json_transform(state)
508
533
result << delimunlessfirst
509
534
result << state.indent * depthifindent
510
535
ifstate.strict? && !(false == value || true == value || nil == value || String === value || Array === value || Hash === value || Integer === value || Float === value)
511
-
raiseGeneratorError.new("#{value.class} not allowed in JSON",value)
536
+
ifstate.as_json
537
+
value=state.as_json.call(value)
538
+
unlessfalse == value || true == value || nil == value || String === value || Array === value || Hash === value || Integer === value || Float === value
539
+
raiseGeneratorError.new("#{value.class} returned by #{state.as_json} not allowed in JSON",value)
540
+
end
541
+
result << value.to_json(state)
542
+
else
543
+
raiseGeneratorError.new("#{value.class} not allowed in JSON",value)
0 commit comments