Nephia-Setup-Plugin-Relax
view release on metacpan or search on metacpan
lib/Nephia/Setup/Plugin/Relax.pm view on Meta::CPAN
use File::Basename 'dirname';
use File::Spec;
my $common = require(File::Spec->catfile(dirname(__FILE__), 'common.pl'));
my $conf = {
%$common,
'Cache' => {
servers => ['127.0.0.1:11211'],
namespace => '{{ $self->appname }}',
},
'DBI' => {
connect_info => [
'dbi:SQLite:dbname={{ $self->{dbfile} }}',
'',
'',
],
},
};
$conf;
@@ MyClass.pm
package {{ $self->appname }};
use strict;
use warnings;
use Data::Dumper ();
use URI;
use Nephia::Incognito;
use Nephia plugins => [
'FillInForm',
'FormValidator::Lite',
'JSON' => {
enable_api_status_header => 1,
},
'View::Xslate' => {
syntax => 'TTerse',
path => [ qw/view/ ],
function => {
c => \&c,
dump => sub {
local $Data::Dumper::Terse = 1;
Data::Dumper::Dumper(shift);
},
uri_for => sub {
my $path = shift;
my $env = c()->req->env;
my $uri = URI->new(sprintf(
'%s://%s%s',
$env->{'psgi.url_scheme'},
$env->{'HTTP_HOST'},
$path
));
$uri->as_string;
},
},
},
'ErrorPage',
'ResponseHandler',
'Dispatch',
];
sub c () {Nephia::Incognito->unmask(__PACKAGE__)}
### To avoid to create duplicate cookies.
c->action_chain->delete('Nephia::Action::CookieImprinter');
app {
get '/' => Nephia->call('C::Root#index');
get '/api/member/create' => Nephia->call('C::API::Member#create');
get '/api/member/:id' => Nephia->call('C::API::Member#fetch');
};
1;
@@ C::Root
package {{ $self->{tmpclass} }};
use strict;
use warnings;
use utf8;
sub index {
my $c = shift;
{ template => 'index.tt' };
}
1;
@@ C::API::Member
package {{ $self->{tmpclass} }};
use strict;
use warnings;
use utf8;
use {{ $self->appname }}::M::DB::Member;
use {{ $self->appname }}::M::Cache;
sub create {
my $c = shift;
my $valid = $c->form(
name => ['NOT_NULL', ['LENGTH', 1, 16]],
email => ['NOT_NULL', 'EMAIL_LOOSE'],
);
return {status => 400, message => $valid->get_error_messages} if $valid->has_error;
my $member = {{ $self->appname }}::M::DB::Member->create(
name => $c->param('name'),
email => $c->param('email'),
);
return {member => $member};
}
sub fetch {
my $c = shift;
my $id = $c->path_param('id');
return {status => 403, message => 'id is required'} unless $id;
my $member = {{ $self->appname }}::M::Cache->get("member:$id") || {{ $self->appname }}::M::DB::Member->fetch($id);
{{ $self->appname }}::M::Cache->set("member:$id", $member, 300) if $member;
return $member ? {member => $member} : {status => 404, message => 'member not found'};
}
( run in 0.441 second using v1.01-cache-2.11-cpan-524268b4103 )