class Oj::Rails::Encoder

The Oj ActiveSupport compliant encoder.

Public Class Methods

new(options=nil) click to toggle source

Creates a new Encoder.

  • options [Hash] formatting options

static VALUE
encoder_new(int argc, VALUE *argv, VALUE self) {
    Encoder     e = ALLOC(struct _Encoder);

    e->opts = oj_default_options;
    e->arg = Qnil;
    copy_opts(&ropts, &e->ropts);
    
    if (1 <= argc && Qnil != *argv) {
        oj_parse_options(*argv, &e->opts);
        e->arg = *argv;
    }
    return Data_Wrap_Struct(encoder_class, encoder_mark, encoder_free, e);
}

Public Instance Methods

deoptimize(*classes) click to toggle source

Turn off Oj rails optimization on the specified classes.

  • classes [Class] a list of classes to deoptimize

static VALUE
encoder_deoptimize(int argc, VALUE *argv, VALUE self) {
    Encoder     e = (Encoder)DATA_PTR(self);

    optimize(argc, argv, &e->ropts, false);

    return Qnil;
}
encode(obj) click to toggle source
  • obj [Object] object to encode

Returns encoded object as a JSON string.

static VALUE
encoder_encode(VALUE self, VALUE obj) {
    Encoder     e = (Encoder)DATA_PTR(self);

    if (Qnil != e->arg) {
        VALUE  argv[1] = { e->arg };
        
        return encode(obj, &e->ropts, &e->opts, 1, argv);
    }
    return encode(obj, &e->ropts, &e->opts, 0, NULL);
}
optimize(*classes) click to toggle source

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

static VALUE
encoder_optimize(int argc, VALUE *argv, VALUE self) {
    Encoder     e = (Encoder)DATA_PTR(self);

    optimize(argc, argv, &e->ropts, true);

    return Qnil;
}
optimized?(clas) click to toggle source

Returns true if the specified Class is being optimized.

static VALUE
encoder_optimized(VALUE self, VALUE clas) {
    Encoder     e = (Encoder)DATA_PTR(self);
    ROpt        ro = oj_rails_get_opt(&e->ropts, clas);

    if (NULL == ro) {
        return Qfalse;
    }
    return (ro->on) ? Qtrue : Qfalse;
}