Class: Oj::StringWriter
- Inherits:
-
Object
- Object
- Oj::StringWriter
- Defined in:
- ext/oj/oj.c,
ext/oj/oj.c
Overview
Supports building a JSON document one element at a time. Build the document by pushing values into the document. Pushing an array or an object will create that element in the JSON document and subsequent pushes will add the elements to that array or object until a pop() is called. When complete calling to_s() will return the JSON document. Note tha calling to_s() before construction is complete will return the document in it’s current state.
Class Method Summary collapse
-
.new(options) ⇒ Object
Creates a new StringWriter.
Instance Method Summary collapse
-
#pop ⇒ Object
Pops up a level in the JSON document closing the array or object that is currently open.
-
#pop_all ⇒ Object
Pops all level in the JSON document closing all the array or object that is currently open.
-
#push_array(key = nil) ⇒ Object
Pushes an array onto the JSON document.
-
#push_json(value, key = nil) ⇒ Object
Pushes a string onto the JSON document.
-
#push_key(key) ⇒ Object
Pushes a key onto the JSON document.
-
#push_object(key = nil) ⇒ Object
Pushes an object onto the JSON document.
-
#push_value(value, key = nil) ⇒ Object
Pushes a value onto the JSON document.
-
#reset ⇒ Object
Reset the writer back to the empty state.
-
#to_s ⇒ Object
Returns the JSON document string in what ever state the construction is at.
Class Method Details
.new(options) ⇒ Object
Creates a new StringWriter.
1125 1126 1127 1128 1129 1130 1131 1132 1133 1134 1135 1136 |
# File 'ext/oj/oj.c', line 1125
static VALUE
str_writer_new(int argc, VALUE *argv, VALUE self) {
StrWriter sw = ALLOC(struct _StrWriter);
str_writer_init(sw);
if (1 == argc) {
oj_parse_options(argv[0], &sw->opts);
}
sw->out.indent = sw->opts.indent;
return Data_Wrap_Struct(oj_string_writer_class, 0, str_writer_free, sw);
}
|
Instance Method Details
#pop ⇒ Object
Pops up a level in the JSON document closing the array or object that is currently open.
1283 1284 1285 1286 1287 |
# File 'ext/oj/oj.c', line 1283
static VALUE
str_writer_pop(VALUE self) {
oj_str_writer_pop((StrWriter)DATA_PTR(self));
return Qnil;
}
|
#pop_all ⇒ Object
Pops all level in the JSON document closing all the array or object that is currently open.
1294 1295 1296 1297 1298 1299 |
# File 'ext/oj/oj.c', line 1294
static VALUE
str_writer_pop_all(VALUE self) {
oj_str_writer_pop_all((StrWriter)DATA_PTR(self));
return Qnil;
}
|
#push_array(key = nil) ⇒ Object
Pushes an array onto the JSON document. Future pushes will be to this object until a pop() is called.
1194 1195 1196 1197 1198 1199 1200 1201 1202 1203 1204 1205 1206 1207 1208 1209 1210 1211 1212 1213 1214 1215 1216 1217 1218 1219 |
# File 'ext/oj/oj.c', line 1194
static VALUE
str_writer_push_array(int argc, VALUE *argv, VALUE self) {
StrWriter sw = (StrWriter)DATA_PTR(self);
switch (argc) {
case 0:
oj_str_writer_push_array(sw, 0);
break;
case 1:
if (Qnil == argv[0]) {
oj_str_writer_push_array(sw, 0);
} else {
rb_check_type(argv[0], T_STRING);
oj_str_writer_push_array(sw, StringValuePtr(argv[0]));
}
break;
default:
rb_raise(rb_eArgError, "Wrong number of argument to 'push_object'.");
break;
}
if (rb_block_given_p()) {
rb_yield(Qnil);
oj_str_writer_pop(sw);
}
return Qnil;
}
|
#push_json(value, key = nil) ⇒ Object
Pushes a string onto the JSON document. The String must be a valid JSON encoded string. No additional checking is done to verify the validity of the string.
1256 1257 1258 1259 1260 1261 1262 1263 1264 1265 1266 1267 1268 1269 1270 1271 1272 1273 1274 1275 1276 |
# File 'ext/oj/oj.c', line 1256
static VALUE
str_writer_push_json(int argc, VALUE *argv, VALUE self) {
rb_check_type(argv[0], T_STRING);
switch (argc) {
case 1:
oj_str_writer_push_json((StrWriter)DATA_PTR(self), StringValuePtr(*argv), 0);
break;
case 2:
if (Qnil == argv[1]) {
oj_str_writer_push_json((StrWriter)DATA_PTR(self), StringValuePtr(*argv), 0);
} else {
rb_check_type(argv[1], T_STRING);
oj_str_writer_push_json((StrWriter)DATA_PTR(self), StringValuePtr(*argv), StringValuePtr(argv[1]));
}
break;
default:
rb_raise(rb_eArgError, "Wrong number of argument to 'push_json'.");
break;
}
return Qnil;
}
|
#push_key(key) ⇒ Object
Pushes a key onto the JSON document. The key will be used for the next push if currently in a JSON object and ignored otherwise. If a key is provided on the next push then that new key will be ignored.
1145 1146 1147 1148 1149 1150 1151 1152 1153 |
# File 'ext/oj/oj.c', line 1145
static VALUE
str_writer_push_key(VALUE self, VALUE key) {
StrWriter sw = (StrWriter)DATA_PTR(self);
rb_check_type(key, T_STRING);
oj_str_writer_push_key(sw, StringValuePtr(key));
return Qnil;
}
|
#push_object(key = nil) ⇒ Object
Pushes an object onto the JSON document. Future pushes will be to this object until a pop() is called.
1161 1162 1163 1164 1165 1166 1167 1168 1169 1170 1171 1172 1173 1174 1175 1176 1177 1178 1179 1180 1181 1182 1183 1184 1185 1186 |
# File 'ext/oj/oj.c', line 1161
static VALUE
str_writer_push_object(int argc, VALUE *argv, VALUE self) {
StrWriter sw = (StrWriter)DATA_PTR(self);
switch (argc) {
case 0:
oj_str_writer_push_object(sw, 0);
break;
case 1:
if (Qnil == argv[0]) {
oj_str_writer_push_object(sw, 0);
} else {
rb_check_type(argv[0], T_STRING);
oj_str_writer_push_object(sw, StringValuePtr(argv[0]));
}
break;
default:
rb_raise(rb_eArgError, "Wrong number of argument to 'push_object'.");
break;
}
if (rb_block_given_p()) {
rb_yield(Qnil);
oj_str_writer_pop(sw);
}
return Qnil;
}
|
#push_value(value, key = nil) ⇒ Object
Pushes a value onto the JSON document.
1227 1228 1229 1230 1231 1232 1233 1234 1235 1236 1237 1238 1239 1240 1241 1242 1243 1244 1245 1246 |
# File 'ext/oj/oj.c', line 1227
static VALUE
str_writer_push_value(int argc, VALUE *argv, VALUE self) {
switch (argc) {
case 1:
oj_str_writer_push_value((StrWriter)DATA_PTR(self), *argv, 0);
break;
case 2:
if (Qnil == argv[1]) {
oj_str_writer_push_value((StrWriter)DATA_PTR(self), *argv, 0);
} else {
rb_check_type(argv[1], T_STRING);
oj_str_writer_push_value((StrWriter)DATA_PTR(self), *argv, StringValuePtr(argv[1]));
}
break;
default:
rb_raise(rb_eArgError, "Wrong number of argument to 'push_value'.");
break;
}
return Qnil;
}
|
#reset ⇒ Object
Reset the writer back to the empty state.
1305 1306 1307 1308 1309 1310 1311 1312 1313 1314 1315 1316 |
# File 'ext/oj/oj.c', line 1305
static VALUE
str_writer_reset(VALUE self) {
StrWriter sw = (StrWriter)DATA_PTR(self);
sw->depth = 0;
*sw->types = '\0';
sw->keyWritten = 0;
sw->out.cur = sw->out.buf;
*sw->out.cur = '\0';
return Qnil;
}
|
#to_s ⇒ Object
Returns the JSON document string in what ever state the construction is at.
1322 1323 1324 1325 1326 1327 1328 |
# File 'ext/oj/oj.c', line 1322
static VALUE
str_writer_to_s(VALUE self) {
StrWriter sw = (StrWriter)DATA_PTR(self);
VALUE rstr = rb_str_new(sw->out.buf, sw->out.cur - sw->out.buf);
return oj_encode(rstr);
}
|