ext/oj/mimic_json.c in oj-3.1.0 vs ext/oj/mimic_json.c in oj-3.1.2
- old
+ new
@@ -751,10 +751,12 @@
}
void
oj_mimic_json_methods(VALUE json) {
VALUE json_error;
+ VALUE generator;
+ VALUE ext;
rb_define_module_function(json, "create_id=", mimic_set_create_id, 1);
rb_define_module_function(json, "create_id", mimic_create_id, 0);
rb_define_module_function(json, "dump", mimic_dump, -1);
@@ -794,23 +796,37 @@
if (rb_const_defined_at(json, rb_intern("NestingError"))) {
rb_const_get(json, rb_intern("NestingError"));
} else {
rb_define_class_under(json, "NestingError", json_error);
}
+
+ if (rb_const_defined_at(json, rb_intern("Ext"))) {
+ ext = rb_const_get_at(json, rb_intern("Ext"));
+ } else {
+ ext = rb_define_module_under(json, "Ext");
+ }
+ if (rb_const_defined_at(ext, rb_intern("Generator"))) {
+ generator = rb_const_get_at(ext, rb_intern("Generator"));
+ } else {
+ generator = rb_define_module_under(ext, "Generator");
+ }
+ if (!rb_const_defined_at(generator, rb_intern("State"))) {
+ rb_require("oj/state");
+ }
+ // Pull in the JSON::State mimic file.
+ state_class = rb_const_get_at(generator, rb_intern("State"));
}
/* Document-module: JSON
*
* A mimic of the json gem module.
*/
VALUE
oj_define_mimic_json(int argc, VALUE *argv, VALUE self) {
- VALUE ext;
VALUE dummy;
VALUE verbose;
VALUE json;
- VALUE generator;
// Either set the paths to indicate JSON has been loaded or replaces the
// methods if it has been loaded.
if (rb_const_defined_at(rb_cObject, rb_intern("JSON"))) {
json = rb_const_get_at(rb_cObject, rb_intern("JSON"));
@@ -830,26 +846,10 @@
rb_funcall2(Oj, rb_intern("mimic_loaded"), 1, mimic_args);
} else {
rb_funcall2(Oj, rb_intern("mimic_loaded"), 0, 0);
}
}
- if (rb_const_defined_at(json, rb_intern("Ext"))) {
- ext = rb_const_get_at(json, rb_intern("Ext"));
- } else {
- ext = rb_define_module_under(json, "Ext");
- }
- if (rb_const_defined_at(ext, rb_intern("Generator"))) {
- generator = rb_const_get_at(ext, rb_intern("Generator"));
- } else {
- generator = rb_define_module_under(ext, "Generator");
- }
- if (!rb_const_defined_at(generator, rb_intern("State"))) {
- rb_require("oj/state");
- }
-
- // convince Ruby that the json gem has already been loaded
- // Pull in the JSON::State mimic file.
- state_class = rb_const_get_at(generator, rb_intern("State"));
+
// TBD create all modules in mimic_loaded
oj_mimic_json_methods(json);
rb_define_method(rb_cObject, "to_json", mimic_object_to_json, -1);