Raisin::Entity(3)

NAME
Raisin::Entity - A simple facade to use with your API

VERSION
version 0.94

SYNOPSIS
    package MusicApp::Entity::Artist;

    use strict;
    use warnings;

    use Raisin::Entity;

    expose 'id';
    expose 'name', as => 'artist';
    expose 'website', if => sub {
        my $artist = shift;
        $artist->website;
    };
    expose 'albums', using => 'MusicApp::Entity::Album';
    expose 'hash', sub {
        my $artist = shift;
        my $hash = 0;
        my $name = blessed($artist) ? $artist->name : $artist->{name};
        foreach (split //, $name) {
            $hash = $hash * 42 + ord($_);
        }
        $hash;
    };

    1;

DESCRIPTION
Supports DBIx::Class, Rose::DB::Object and basic Perl data structures like "SCALAR", "ARRAY" & "HASH".

METHODS

  expose
Define a fields that will be exposed.

The field lookup requests specified name

•   as an object method if it is a DBIx::Class or a Rose::DB::Object;

•   as a hash key;

•   die.

Basic exposure

    expose 'id';

Exposing with a presenter

Use "using" to expose a field with a presenter.

    expose 'albums', using => 'MusicApp::Entity::Album';

Conditional exposure

You can use "if" to expose fields conditionally.

    expose 'website', if => sub {
        my $artist = shift;
        blessed($artist) && $artist->can('website');
    };

Nested exposure

Supply a block to define a hash using nested exposures.

    expose 'contact_info', sub {
        expose 'phone';
        expose 'address', using => 'API::Address';
    };

Runtime exposure

Use a subroutine to evaluate exposure at runtime.

    expose 'hash', sub {
        my $artist = shift;
        my $hash;
        foreach (split //, $artist->name) {
            $hash = $hash * 42 + ord($_);
        }
        $hash;
    };

Aliases exposure

Expose under an alias with "as".

    expose 'name', as => 'artist';

Type

    expose 'name', documentation => { type => 'String', desc => 'Artists name' };

  OpenAPI
OpenAPI compatible specification generates automatically if OpenAPI/Swagger plugin enabled.

AUTHOR
Artur Khabibullin

COPYRIGHT AND LICENSE
This software is copyright (c) 2019 by Artur Khabibullin.

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