The London Perl and Raku Workshop takes place on 26th Oct 2024. If your company depends on Perl, please consider sponsoring and/or attending.

NAME

PONAPI::Repository - Interface role for PONAPI::DAO repositories

VERSION

version 0.003003

SYNOPSIS

    package My::PONAPI::Repository {
        use Moose;
        with 'PONAPI::Repository';

        sub has_type { ... }

        ...
    }

DESCRIPTION

A repository is an abstracted set of collections of resources, in the "Uniform Resource Locator" sense, which may or may not directly reflect your data source model. Your repository class merely needs to define sensible behaviours for the required methods defined here in PONAPI::Repository and that may be as simple as a direct reflection of your data source model or it may allow for more useful abtractions. Classes implementing repositories for PONAPI::DAO must consume the PONAPI::Repository role; this ensures that the methods required by the DAO to fullfil the implementation are all present.

The arguments that each method can receive are expanded on in PONAPI::DAO; some differences are explained below. Keep in mind that, with the exceptions of the has_* methods, all methods will receive a document argument, which is always an instance of PONAPI::Document, but not necessarily a new instance.

REQUIRES

$obj->has_type( $type )

Must return true if the repository handles $type

$obj->has_relationship( $type1, $type2 )

Must return true if $type1 has a relationship to $type2.

    # Do articles have comments?
    $obj->has_relationship('articles', 'comments');

$obj->has_one_to_many_relationship($type1, $type2)

Must return true if $type1 has a relationship to $type2, and that relationship is one-to-many.

retrieve

retrieve_all

retrieve_relationships

retrieve_by_relationship

create

update

Return value MUST be one of the PONAPI_UPDATE_* constants provided by PONAPI::Constants, like PONAPI_UPDATED_EXTENDED.

If the update operation updated more than what was requested (for example, an updated column in the table, and that column is part of the resource), then it must return PONAPI_UPDATED_EXTENDED; if the update on the primary resource did nothing, then it must return PONAPI_UPDATED_NOTHING. In all other non-error situations, it must return PONAPI_UPDATED_NORMAL instead.

delete

create_relationships

See "update".

data will be an arrayref of resources.

update_relationships

See "update".

data will be either undef, a hashref, or an arrayref, depending on what sort of relationship the request is trying to update.

delete_relationships

See "update".

data will be an arrayref of resources.

AUTHORS

  • Mickey Nasriachi <mickey@cpan.org>

  • Stevan Little <stevan@cpan.org>

  • Brian Fraser <hugmeir@cpan.org>

COPYRIGHT AND LICENSE

This software is copyright (c) 2019 by Mickey Nasriachi, Stevan Little, Brian Fraser.

This is free software; you can redistribute it and/or modify it under the same terms as the Perl 5 programming language system itself.