class Oj::StreamWriter - oj-2.11.1 Documentation

# class Oj::StreamWriter

### Public Class Methods

new(options) click to toggle source

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

pop() click to toggle source

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

pop_all() click to toggle source

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

push_array(key=nil) click to toggle source

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

push_value(value, key=nil) click to toggle source

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

push_key(key) click to toggle source

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

push_object(key=nil) click to toggle source

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

push_value(value, key=nil) click to toggle source

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