NAME
Aniki::Filter::Declare - DSL for declaring actions on sometimes
SYNOPSIS
package MyApp::DB::Filter;
use strict;
use warnings;
use Aniki::Filter::Declare;
use Scalar::Util qw/blessed/;
use Time::Moment;
use Data::GUID::URLSafe;
# apply callback to row before insert
trigger insert => sub {
my ($row, $next) = @_;
$row->{created_at} = Time::Moment->now;
return $next->($row);
};
# define trigger/inflate/deflate filters in table context.
table author => sub {
trigger insert => sub {
my ($row, $next) = @_;
$row->{guid} = Data::GUID->new->as_base64_urlsafe;
return $next->($row);
};
inflate name => sub {
my $name = shift;
return uc $name;
};
deflate name => sub {
my $name = shift;
return lc $name;
};
};
# define inflate/deflate filters in global context. (apply to all tables)
inflate qr/_at$/ => sub {
my $datetime = shift;
return Time::Moment->from_string($datetime.'Z', lenient => 1);
};
deflate qr/_at$/ => sub {
my $datetime = shift;
return $datetime->at_utc->strftime('%F %T') if blessed $datetime and $datetime->isa('Time::Moment');
return $datetime;
};
FUNCTIONS
table
inflate
deflate
trigger
SEE ALSO
LICENSE
Copyright (C) karupanerura.
This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself.
AUTHOR
karupanerura <karupa@cpan.org>