class Oj::StreamWriter
Public Class Methods
Creates a new StreamWriter. @param [Hash] options formating options
static VALUE
stream_writer_new(int argc, VALUE *argv, VALUE self) {
StreamWriterType type = STREAM_IO;
int fd = 0;
VALUE stream = argv[0];
VALUE clas = rb_obj_class(stream);
StreamWriter sw;
#if !IS_WINDOWS
VALUE s;
#endif
if (oj_stringio_class == clas) {
type = STRING_IO;
#if !IS_WINDOWS
} else if (rb_respond_to(stream, oj_fileno_id) &&
Qnil != (s = rb_funcall(stream, oj_fileno_id, 0)) &&
0 != (fd = FIX2INT(s))) {
type = FILE_IO;
#endif
} else if (rb_respond_to(stream, oj_write_id)) {
type = STREAM_IO;
} else {
rb_raise(rb_eArgError, "expected an IO Object.");
}
sw = ALLOC(struct _StreamWriter);
str_writer_init(&sw->sw);
if (2 == argc) {
oj_parse_options(argv[1], &sw->sw.opts);
}
sw->sw.out.indent = sw->sw.opts.indent;
sw->stream = stream;
sw->type = type;
sw->fd = fd;
return Data_Wrap_Struct(oj_stream_writer_class, 0, stream_writer_free, sw);
}
Public Instance Methods
Pops up a level in the JSON document closing the array or object that is currently open.
static VALUE
stream_writer_pop(VALUE self) {
StreamWriter sw = (StreamWriter)DATA_PTR(self);
stream_writer_reset_buf(sw);
oj_str_writer_pop(&sw->sw);
stream_writer_write(sw);
return Qnil;
}
Pops all level in the JSON document closing all the array or object that is currently open.
static VALUE
stream_writer_pop_all(VALUE self) {
StreamWriter sw = (StreamWriter)DATA_PTR(self);
stream_writer_reset_buf(sw);
oj_str_writer_pop_all(&sw->sw);
stream_writer_write(sw);
return Qnil;
}
Pushes an array onto the JSON document. Future pushes will be to this object until a pop() is called. @param [String] key the key if adding to an object in the JSON document
static VALUE
stream_writer_push_array(int argc, VALUE *argv, VALUE self) {
StreamWriter sw = (StreamWriter)DATA_PTR(self);
stream_writer_reset_buf(sw);
switch (argc) {
case 0:
oj_str_writer_push_array(&sw->sw, 0);
break;
case 1:
if (Qnil == argv[0]) {
oj_str_writer_push_array(&sw->sw, 0);
} else {
rb_check_type(argv[0], T_STRING);
oj_str_writer_push_array(&sw->sw, StringValuePtr(argv[0]));
}
break;
default:
rb_raise(rb_eArgError, "Wrong number of argument to 'push_object'.");
break;
}
stream_writer_write(sw);
return Qnil;
}
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. @param [Object] value value to add to the JSON document @param [String] key the key if adding to an object in the JSON document
static VALUE
stream_writer_push_json(int argc, VALUE *argv, VALUE self) {
StreamWriter sw = (StreamWriter)DATA_PTR(self);
rb_check_type(argv[0], T_STRING);
stream_writer_reset_buf(sw);
switch (argc) {
case 1:
oj_str_writer_push_json((StrWriter)DATA_PTR(self), StringValuePtr(*argv), 0);
break;
case 2:
if (Qnil == argv[0]) {
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;
}
stream_writer_write(sw);
return Qnil;
}
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. @param [String] key the key pending for the next push
static VALUE
stream_writer_push_key(VALUE self, VALUE key) {
StreamWriter sw = (StreamWriter)DATA_PTR(self);
rb_check_type(key, T_STRING);
stream_writer_reset_buf(sw);
oj_str_writer_push_key(&sw->sw, StringValuePtr(key));
stream_writer_write(sw);
return Qnil;
}
Pushes an object onto the JSON document. Future pushes will be to this object until a pop() is called. @param [String] key the key if adding to an object in the JSON document
static VALUE
stream_writer_push_object(int argc, VALUE *argv, VALUE self) {
StreamWriter sw = (StreamWriter)DATA_PTR(self);
stream_writer_reset_buf(sw);
switch (argc) {
case 0:
oj_str_writer_push_object(&sw->sw, 0);
break;
case 1:
if (Qnil == argv[0]) {
oj_str_writer_push_object(&sw->sw, 0);
} else {
rb_check_type(argv[0], T_STRING);
oj_str_writer_push_object(&sw->sw, StringValuePtr(argv[0]));
}
break;
default:
rb_raise(rb_eArgError, "Wrong number of argument to 'push_object'.");
break;
}
stream_writer_write(sw);
return Qnil;
}
Pushes a value onto the JSON document. @param [Object] value value to add to the JSON document @param [String] key the key if adding to an object in the JSON document
static VALUE
stream_writer_push_value(int argc, VALUE *argv, VALUE self) {
StreamWriter sw = (StreamWriter)DATA_PTR(self);
stream_writer_reset_buf(sw);
switch (argc) {
case 1:
oj_str_writer_push_value((StrWriter)DATA_PTR(self), *argv, 0);
break;
case 2:
if (Qnil == argv[0]) {
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;
}
stream_writer_write(sw);
return Qnil;
}