/*
* Copyright (C) 2005 Laurent Sansonetti <lrz@gnome.org>
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
#include "rbzoom.h"
/* Class: ZOOM::Record
* A record object is a retrieval record on the client side - created from
* result sets.
*/
static VALUE cZoomRecord;
VALUE
rbz_record_make (ZOOM_record record)
{
return record != NULL
? Data_Wrap_Struct (cZoomRecord,
NULL,
ZOOM_record_destroy,
record)
: Qnil;
}
static ZOOM_record
rbz_record_get (VALUE obj)
{
ZOOM_record record;
Data_Get_Struct (obj, struct ZOOM_record_p, record);
assert (record != NULL);
return record;
}
static char _type [128];
static const char *
rbz_record_type (const char *form, int argc, VALUE *argv)
{
VALUE charset_from;
VALUE charset_to;
if (argc == 0)
return form;
rb_scan_args (argc, argv, "11", &charset_from, &charset_to);
memset (_type, 0, sizeof _type);
if (NIL_P (charset_to))
snprintf (_type, sizeof _type, "%s; charset=%s", form,
RVAL2CSTR (charset_from));
else
snprintf (_type, sizeof _type, "%s; charset=%s,%s", form,
RVAL2CSTR (charset_from), RVAL2CSTR (charset_to));
return _type;
}
/*
* Method: database(charset_from=nil, charset_to=nil)
* charset_from: the name of the charset to convert from (optional).
* charset_to: the name of the charset to convert to (optional).
*
* Returns: the database name of the record.
*/
static VALUE
rbz_record_database (int argc, VALUE *argv, VALUE self)
{
return CSTR2RVAL (ZOOM_record_get (rbz_record_get (self),
rbz_record_type ("database", argc, argv),
NULL));
}
/*
* Method: syntax(charset_from=nil, charset_to=nil)
* charset_from: the name of the charset to convert from (optional).
* charset_to: the name of the charset to convert to (optional).
*
* Returns: the symbolic transfer syntax name of the record.
*/
static VALUE
rbz_record_syntax (int argc, VALUE *argv, VALUE self)
{
return CSTR2RVAL (ZOOM_record_get (rbz_record_get (self),
rbz_record_type ("syntax", argc, argv),
NULL));
}
/*
* Method: render(charset_from=nil, charset_to=nil)
* charset_from: the name of the charset to convert from (optional).
* charset_to: the name of the charset to convert to (optional).
*
* Returns: a display friendly description of the record.
*/
static VALUE
rbz_record_render (int argc, VALUE *argv, VALUE self)
{
return CSTR2RVAL (ZOOM_record_get (rbz_record_get (self),
rbz_record_type ("render", argc, argv),
NULL));
}
/*
* Method: xml(charset_from=nil, charset_to=nil)
* charset_from: the name of the charset to convert from (optional).
* charset_to: the name of the charset to convert to (optional).
*
* Returns an XML description of the record. SRW/SRU and Z39.50 records with
* transfer syntax XML are returned verbatim. MARC records are returned in
* MARCXML (converted from ISO2709 to MARCXML by YAZ). GRS-1 and OPAC records are
* not supported for this form.
*
* Returns: an XML description of the record.
*/
static VALUE
rbz_record_xml (int argc, VALUE *argv, VALUE self)
{
return CSTR2RVAL (ZOOM_record_get (rbz_record_get (self),
rbz_record_type ("xml", argc, argv),
NULL));
}
void
Init_zoom_record (VALUE mZoom)
{
VALUE c;
c = rb_define_class_under (mZoom, "Record", rb_cObject);
rb_undef_method (CLASS_OF (c), "new");
rb_define_method (c, "database", rbz_record_database, -1);
rb_define_method (c, "syntax", rbz_record_syntax, -1);
rb_define_method (c, "render", rbz_record_render, -1);
rb_define_alias (c, "to_s", "render");
rb_define_method (c, "xml", rbz_record_xml, -1);
cZoomRecord = c;
}
syntax highlighted by Code2HTML, v. 0.9.1