Sha256: 045322064a19f732a59787a63286c9e7d1b1b0526aced1654c07248d58573397

Contents?: true

Size: 1.4 KB

Versions: 14

Compression:

Stored size: 1.4 KB

Contents

#include "writer.h"

static bool types_initialized = false;
static VALUE ar_base_type = Qundef;

void init_types(VALUE v) {
  if (types_initialized == true) {
    return;
  }

  types_initialized = true;

  volatile VALUE ar_type =
      rb_const_get_at(rb_cObject, rb_intern("ActiveRecord"));
  ar_base_type = rb_const_get_at(ar_type, rb_intern("Base"));
}

AttributesWriter create_attributes_writer(VALUE subject) {
  // If ActiveRecord::Base can't be found it will throw error
  int isErrored;
  rb_protect(init_types, Qnil, &isErrored);

  if (ar_base_type != Qundef &&
      rb_obj_is_kind_of(subject, ar_base_type) == Qtrue) {
    return (AttributesWriter){
        .object_type = ActiveRecord,
        .write_attributes = active_record_attributes_writer};
  } else {
    return (AttributesWriter){.object_type = Plain,
                              .write_attributes = plain_attributes_writer};
  }

  return create_empty_attributes_writer();
}

VALUE empty_write_attributes(VALUE obj,
                             VALUE attributes,
                             EachAttributeFunc func,
                             VALUE writer) {
  return Qnil;
}

AttributesWriter create_empty_attributes_writer() {
  return (AttributesWriter){.object_type = Unknown,
                            .write_attributes = empty_write_attributes};
}

void init_attributes_writer(VALUE mPanko) {
  init_active_record_attributes_writer(mPanko);
}

Version data entries

14 entries across 14 versions & 1 rubygems

Version Path
panko_serializer-0.5.5 ext/panko_serializer/attributes_writer/writer.c
panko_serializer-0.5.4 ext/panko_serializer/attributes_writer/writer.c
panko_serializer-0.5.3 ext/panko_serializer/attributes_writer/writer.c
panko_serializer-0.5.2 ext/panko_serializer/attributes_writer/writer.c
panko_serializer-0.5.1 ext/panko_serializer/attributes_writer/writer.c
panko_serializer-0.5.0 ext/panko_serializer/attributes_writer/writer.c
panko_serializer-0.4.4 ext/panko_serializer/attributes_writer/writer.c
panko_serializer-0.4.3 ext/panko_serializer/attributes_writer/writer.c
panko_serializer-0.4.2 ext/panko_serializer/attributes_writer/writer.c
panko_serializer-0.4.0 ext/panko_serializer/attributes_writer/writer.c
panko_serializer-0.3.9 ext/panko_serializer/attributes_writer/writer.c
panko_serializer-0.3.7 ext/panko_serializer/attributes_writer/writer.c
panko_serializer-0.3.6 ext/panko_serializer/attributes_writer/writer.c
panko_serializer-0.3.5 ext/panko_serializer/attributes_writer/writer.c