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.