Dancer-Plugin-Catmandu-OAI

 view release on metacpan or  search on metacpan

lib/Dancer/Plugin/Catmandu/OAI.pm  view on Meta::CPAN

package Dancer::Plugin::Catmandu::OAI;

=head1 NAME

Dancer::Plugin::Catmandu::OAI - OAI-PMH provider backed by a searchable Catmandu::Store

=cut

our $VERSION = '0.0508';

use Catmandu::Sane;
use Catmandu::Util qw(is_string is_array_ref hash_merge);
use Catmandu;
use Catmandu::Fix;
use Catmandu::Exporter::Template;
use Data::MessagePack;
use MIME::Base64 qw(encode_base64url decode_base64url);
use Dancer::Plugin;
use Dancer qw(:syntax);
use DateTime;
use DateTime::Format::ISO8601;
use DateTime::Format::Strptime;

my $DEFAULT_LIMIT = 100;

my $VERBS = {
    GetRecord => {
        valid    => {metadataPrefix => 1, identifier => 1},
        required => [qw(metadataPrefix identifier)],
    },
    Identify        => {valid => {}, required => [],},
    ListIdentifiers => {
        valid => {
            metadataPrefix  => 1,
            from            => 1,
            until           => 1,
            set             => 1,
            resumptionToken => 1
        },
        required => [qw(metadataPrefix)],
    },
    ListMetadataFormats =>
        {valid => {identifier => 1, resumptionToken => 1}, required => [],},
    ListRecords => {
        valid => {
            metadataPrefix  => 1,
            from            => 1,
            until           => 1,
            set             => 1,
            resumptionToken => 1
        },
        required => [qw(metadataPrefix)],
    },
    ListSets => {valid => {resumptionToken => 1}, required => [],},
};

{
    state $mp = Data::MessagePack->new->utf8;

    sub _deserialize {
        $mp->unpack(decode_base64url($_[0]));
    }

    sub _serialize {
        encode_base64url($mp->pack($_[0]));
    }

}

sub _new_token {
    my ($settings, $hits, $params, $from, $until, $old_token) = @_;

    my $n = $old_token && $old_token->{_n} ? $old_token->{_n} : 0;
    $n += $hits->size;

 view all matches for this distribution
 view release on metacpan -  search on metacpan

( run in 0.550 second using v1.00-cache-2.02-grep-82fe00e-cpan-1925d2aa809 )