Class: Oj::Rails::Encoder

Inherits:
Object
  • Object
show all
Defined in:
ext/oj/rails.c,
ext/oj/rails.c

Overview

The Oj ActiveSupport compliant encoder.

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.new(options = nil) ⇒ Object

Creates a new Encoder.

  • options [Hash] formatting options



648
649
650
651
652
653
654
655
656
657
658
659
660
# File 'ext/oj/rails.c', line 648

static VALUE encoder_new(int argc, VALUE *argv, VALUE self) {
    Encoder e = OJ_R_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);
}

Instance Method Details

#deoptimize(*classes) ⇒ Object

Turn off Oj rails optimization on the specified classes.

  • classes [Class] a list of classes to deoptimize



806
807
808
809
810
811
812
# File 'ext/oj/rails.c', line 806

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) ⇒ Object

  • obj [Object] object to encode

Returns encoded object as a JSON string.



942
943
944
945
946
947
948
949
950
951
# File 'ext/oj/rails.c', line 942

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(*args) ⇒ Object

Document-method optimize call-seq: optimize(*classes)

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



750
751
752
753
754
755
756
# File 'ext/oj/rails.c', line 750

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) ⇒ Boolean

  • clas [Class] Class to check

Returns:

  • (Boolean)

    true if the class is being optimized for rails and false otherwise



835
836
837
838
839
840
841
842
843
# File 'ext/oj/rails.c', line 835

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