I began work on open-ils.supercat this weekend, and things are going swimmingly so far. I created the open-ils.supercat.record.marcxml.retrieve and open-ils.supercat.metarecord.mods.retrieve methods with no problem, and added open-ils.supercat.record.mods.retrieve as well. The metarecord building code is mostly a big pile of DOM, but you can see the code here in the sub called retrieve_metarecord_mods if you are so inclined. The record methods, both marcxml and MODS, are much leaner, so I’ll show those inline:
sub retrieve_record_marcxml {
my $self = shift;
my $client = shift;
my $rid = shift;
return
entityize(
$_storage
->request( 'open-ils.storage.direct.biblio.record_entry.retrieve' => $rid )
->gather(1)
->marc
);
}
__PACKAGE__->register_method(
method => 'retrieve_record_marcxml',
api_name => 'open-ils.supercat.record.marcxml.retrieve',
api_level => 1,
argc => 1,
signature =>
{ desc => < <" DESC",
Returns the MARCXML representation of the requested bibliographic record
DESC
params =>
[
{ name => 'bibId',
desc => 'An OpenILS biblio::record_entry id',
type => 'number' },
],
'return' =>
{ desc => 'The bib record in MARCXML',
type => 'string' }
}
);
sub retrieve_record_mods {
my $self = shift;
my $client = shift;
my $rid = shift;
my $marc = $_storage->request(
'open-ils.storage.direct.biblio.record_entry.retrieve',
$rid
)->gather(1)->marc;
return entityize($_mods_sheet->transform( $_parser->parse_string( $marc ) )->toString);
}
__PACKAGE__->register_method(
method => 'retrieve_record_mods',
api_name => 'open-ils.supercat.record.mods.retrieve',
api_level => 1,
argc => 1,
signature =>
{ desc => < <" DESC",
Returns the MODS representation of the requested bibliographic record
DESC
params =>
[
{ name => 'bibId',
desc => 'An OpenILS biblio::record_entry id',
type => 'number' },
],
'return' =>
{ desc => 'The bib record in MODS',
type => 'string' }
}
);
As you can see, in both cases the method registration call containing the method signature is larger than the actual sub even with a great deal of whitespace in the code. I will take that as a good sign, since that signature allows scripted API documentation, basic argument checking (that I don’t have to handle inside the method) and quick-glance documentation inline in the code.
