Module: Oj::Rails
- Defined in:
- ext/oj/rails.c,
ext/oj/rails.c
Overview
Module that provides rails and active support compatibility.
Defined Under Namespace
Classes: Encoder
Class Method Summary collapse
-
.deoptimize(*classes) ⇒ Object
Turn off Oj rails optimization on the specified classes.
-
.encode(obj, opts = nil) ⇒ Object
Encode obj as a JSON String.
-
.mimic_JSON ⇒ Object
Sets the JSON method to use Oj similar to Oj.mimic_JSON except with the ActiveSupport monkey patches instead of the json gem monkey patches.
-
.optimize(*classes) ⇒ Object
Use Oj rails optimized routines to encode the specified classes.
-
.optimized?(clas) ⇒ Boolean
Returns true if the specified Class is being optimized.
-
.set_decoder ⇒ Object
Sets the JSON.parse function to be the Oj::parse function which is json gem compatible.
-
.set_encoder ⇒ Object
Sets the ActiveSupport.encoder to Oj::Rails::Encoder and wraps some of the formatting globals used by ActiveSupport to allow the use of those globals in the Oj::Rails optimizations.
Class Method Details
.deoptimize(*classes) ⇒ Object
Turn off Oj rails optimization on the specified classes.
-
classes [Class] a list of classes to deoptimize
834 835 836 837 838 839 |
# File 'ext/oj/rails.c', line 834
static VALUE rails_deoptimize(int argc, VALUE *argv, VALUE self) {
optimize(argc, argv, &ropts, false);
string_writer_optimized = false;
return Qnil;
}
|
.encode(obj, opts = nil) ⇒ Object
Encode obj as a JSON String.
-
obj [Object|Hash|Array] object to convert to a JSON String
-
opts [Hash] options
Returns [String]
980 981 982 983 984 985 986 987 988 989 |
# File 'ext/oj/rails.c', line 980
static VALUE rails_encode(int argc, VALUE *argv, VALUE self) {
if (1 > argc) {
rb_raise(rb_eArgError, "wrong number of arguments (0 for 1).");
}
if (1 == argc) {
return encode(*argv, NULL, &oj_default_options, 0, NULL);
} else {
return encode(*argv, NULL, &oj_default_options, argc - 1, argv + 1);
}
}
|
.mimic_JSON ⇒ Object
Sets the JSON method to use Oj similar to Oj.mimic_JSON except with the ActiveSupport monkey patches instead of the json gem monkey patches.
795 796 797 798 799 800 801 802 803 804 805 806 807 808 809 |
# File 'ext/oj/rails.c', line 795
VALUE
rails_mimic_json(VALUE self) {
VALUE json;
if (rb_const_defined_at(rb_cObject, rb_intern("JSON"))) {
json = rb_const_get_at(rb_cObject, rb_intern("JSON"));
} else {
json = rb_define_module("JSON");
}
oj_mimic_json_methods(json);
// Setting the default mode breaks the prmoise in the docs not to.
// oj_default_options.mode = RailsMode;
return Qnil;
}
|
.optimize(*classes) ⇒ Object
Use Oj rails optimized routines to encode the specified classes. This ignores the as_json() method on the class and uses an internal encoding instead. Passing in no classes indicates all should use the optimized version of encoding for all previously optimized classes. Passing in the Object class set a global switch that will then use the optimized behavior for all classes.
-
classes [Class] a list of classes to optimize
782 783 784 785 786 787 |
# File 'ext/oj/rails.c', line 782
static VALUE rails_optimize(int argc, VALUE *argv, VALUE self) {
optimize(argc, argv, &ropts, true);
string_writer_optimized = true;
return Qnil;
}
|
.optimized?(clas) ⇒ Boolean
Returns true if the specified Class is being optimized.
866 867 868 869 870 871 872 873 |
# File 'ext/oj/rails.c', line 866
static VALUE rails_optimized(VALUE self, VALUE clas) {
ROpt ro = oj_rails_get_opt(&ropts, clas);
if (NULL == ro) {
return Qfalse;
}
return (ro->on) ? Qtrue : Qfalse;
}
|
.set_decoder ⇒ Object
Sets the JSON.parse function to be the Oj::parse function which is json gem compatible.
1089 1090 1091 1092 1093 1094 1095 1096 1097 1098 1099 1100 1101 1102 1103 1104 1105 1106 1107 1108 1109 1110 1111 1112 1113 1114 1115 1116 1117 1118 1119 1120 |
# File 'ext/oj/rails.c', line 1089
static VALUE rails_set_decoder(VALUE self) {
VALUE json;
VALUE json_error;
VALUE verbose;
if (rb_const_defined_at(rb_cObject, rb_intern("JSON"))) {
json = rb_const_get_at(rb_cObject, rb_intern("JSON"));
} else {
json = rb_define_module("JSON");
}
if (rb_const_defined_at(json, rb_intern("JSONError"))) {
json_error = rb_const_get(json, rb_intern("JSONError"));
} else {
json_error = rb_define_class_under(json, "JSONError", rb_eStandardError);
}
rb_global_variable(&oj_json_parser_error_class);
if (rb_const_defined_at(json, rb_intern("ParserError"))) {
oj_json_parser_error_class = rb_const_get(json, rb_intern("ParserError"));
} else {
oj_json_parser_error_class = rb_define_class_under(json, "ParserError", json_error);
}
// rb_undef_method doesn't work for modules or maybe sometimes
// doesn't. Anyway setting verbose should hide the warning.
verbose = rb_gv_get("$VERBOSE");
rb_gv_set("$VERBOSE", Qfalse);
rb_undef_method(json, "parse");
rb_define_module_function(json, "parse", oj_mimic_parse, -1);
rb_gv_set("$VERBOSE", verbose);
return Qnil;
}
|
.set_encoder ⇒ Object
Sets the ActiveSupport.encoder to Oj::Rails::Encoder and wraps some of the formatting globals used by ActiveSupport to allow the use of those globals in the Oj::Rails optimizations.
1035 1036 1037 1038 1039 1040 1041 1042 1043 1044 1045 1046 1047 1048 1049 1050 1051 1052 1053 1054 1055 1056 1057 1058 1059 1060 1061 1062 1063 1064 1065 1066 1067 1068 1069 1070 1071 1072 1073 1074 1075 1076 1077 1078 1079 1080 1081 |
# File 'ext/oj/rails.c', line 1035
static VALUE rails_set_encoder(VALUE self) {
VALUE active;
VALUE json;
VALUE encoding;
VALUE pv;
VALUE verbose;
VALUE enc = resolve_classpath("ActiveSupport::JSON::Encoding");
if (Qnil != enc) {
escape_html = Qtrue == rb_iv_get(self, "@escape_html_entities_in_json");
xml_time = Qtrue == rb_iv_get(enc, "@use_standard_json_time_format");
}
if (rb_const_defined_at(rb_cObject, rb_intern("ActiveSupport"))) {
active = rb_const_get_at(rb_cObject, rb_intern("ActiveSupport"));
} else {
rb_raise(rb_eStandardError, "ActiveSupport not loaded.");
}
rb_funcall(active, rb_intern("json_encoder="), 1, encoder_class);
json = rb_const_get_at(active, rb_intern("JSON"));
encoding = rb_const_get_at(json, rb_intern("Encoding"));
// rb_undef_method doesn't work for modules or maybe sometimes
// doesn't. Anyway setting verbose should hide the warning.
verbose = rb_gv_get("$VERBOSE");
rb_gv_set("$VERBOSE", Qfalse);
rb_undef_method(encoding, "use_standard_json_time_format=");
rb_define_module_function(encoding, "use_standard_json_time_format=", rails_use_standard_json_time_format, 1);
rb_undef_method(encoding, "use_standard_json_time_format");
rb_define_module_function(encoding, "use_standard_json_time_format", rails_use_standard_json_time_format_get, 0);
pv = rb_iv_get(encoding, "@escape_html_entities_in_json");
escape_html = Qtrue == pv;
rb_undef_method(encoding, "escape_html_entities_in_json=");
rb_define_module_function(encoding, "escape_html_entities_in_json=", rails_escape_html_entities_in_json, 1);
rb_undef_method(encoding, "escape_html_entities_in_json");
rb_define_module_function(encoding, "escape_html_entities_in_json", rails_escape_html_entities_in_json_get, 0);
pv = rb_iv_get(encoding, "@time_precision");
oj_default_options.sec_prec = NUM2INT(pv);
oj_default_options.sec_prec_set = true;
rb_undef_method(encoding, "time_precision=");
rb_define_module_function(encoding, "time_precision=", rails_time_precision, 1);
rb_gv_set("$VERBOSE", verbose);
return Qnil;
}
|