# class PG::CompositeCoder

This is the base class for all type cast classes of PostgreSQL types, that are made up of some sub type.

### Attributes

elements_type[R]

### Public Instance Methods

delimiter → String click to toggle source

The character that separates values within the composite type.

    static VALUE
    pg_coder_delimiter_get(VALUE self)
    {
            t_pg_composite_coder *this = DATA_PTR(self);
            return rb_str_new(&this->delimiter, 1);
    }

delimiter = String click to toggle source

Specifies the character that separates values within the composite type. The default is a comma. This must be a single one-byte character.

    static VALUE
    pg_coder_delimiter_set(VALUE self, VALUE delimiter)
    {
            t_pg_composite_coder *this = DATA_PTR(self);
            StringValue(delimiter);
            if(RSTRING_LEN(delimiter) != 1)
                    rb_raise( rb_eArgError, "delimiter size must be one byte");
            this->delimiter = *RSTRING_PTR(delimiter);
            return delimiter;
    }

elements_type = coder click to toggle source

Specifies the `PG::Coder` object that is used to encode or decode the single elementes of this composite type.

If set to `nil` all values are encoded and decoded as String objects.

    static VALUE
    pg_coder_elements_type_set(VALUE self, VALUE elem_type)
    {
            t_pg_composite_coder *this = DATA_PTR( self );

            if ( NIL_P(elem_type) ){
                    this->elem = NULL;
            } else if ( rb_obj_is_kind_of(elem_type, rb_cPG_Coder) ){
                    this->elem = DATA_PTR( elem_type );
            } else {
                    rb_raise( rb_eTypeError, "wrong elements type %s (expected some kind of PG::Coder)",
                                    rb_obj_classname( elem_type ) );
            }

            rb_iv_set( self, "@elements_type", elem_type );
            return elem_type;
    }

inspect() click to toggle source
Calls superclass method `PG::Coder#inspect`

    # File lib/pg/coder.rb, line 65
    def inspect
            str = super
            str[-1,0] = " elements_type=#{elements_type.inspect} #{needs_quotation? ? 'needs' : 'no'} quotation"
            str
    end

needs_quotation = Boolean click to toggle source

Specifies whether the assigned `elements_type` requires quotation marks to be transferred safely. Encoding with `needs_quotation=`false is somewhat faster.

The default is `true`. This option is ignored for decoding of values.

    static VALUE
    pg_coder_needs_quotation_set(VALUE self, VALUE needs_quotation)
    {
            t_pg_composite_coder *this = DATA_PTR(self);
            this->needs_quotation = RTEST(needs_quotation);
            return needs_quotation;
    }

needs_quotation → Boolean click to toggle source

Specifies whether the assigned `elements_type` requires quotation marks to be transferred safely.

    static VALUE
    pg_coder_needs_quotation_get(VALUE self)
    {
            t_pg_composite_coder *this = DATA_PTR(self);
            return this->needs_quotation ? Qtrue : Qfalse;
    }

to_h() click to toggle source
Calls superclass method `PG::Coder#to_h`

    # File lib/pg/coder.rb, line 57
    def to_h
            super.merge!({
                    elements_type: elements_type,
                    needs_quotation: needs_quotation?,
                    delimiter: delimiter,
            })
    end