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; }