Nephia-Setup-Plugin-Relax
view release on metacpan or search on metacpan
lib/Nephia/Setup/Plugin/Relax.pm view on Meta::CPAN
sub create_some_classes {
my ($setup, $context) = @_;
for my $subclass ( qw/C::Root C::API::Member M M::DB M::DB::Member M::Cache/ ) {
$setup->{tmpclass} = join('::', $setup->appname, $subclass);
my $data = __PACKAGE__->load_data($setup, $subclass);
$setup->spew('lib', split('::', $setup->{tmpclass}.'.pm'), $data);
}
}
sub create_templates {
my ($setup, $context) = @_;
for my $template ( qw/index include::layout include::navbar error/ ) {
my $file = File::Spec->catfile( split('::', $template) ). '.tt';
my $data = __PACKAGE__->load_data($setup, $file);
$setup->makepath('view', dirname($file));
$setup->spew('view', $file, $data);
}
}
sub create_sql {
my ($setup, $context) = @_;
for my $type ( qw/ mysql sqlite / ) {
my $data = __PACKAGE__->load_data($setup, $type.'.sql');
$setup->spew('sql', $type.'.sql', $data);
}
}
sub create_setup {
my ($setup, $context) = @_;
my $data = __PACKAGE__->load_data($setup, 'setup.sh');
$setup->spew('script', 'setup.sh', $data);
chmod 0755, File::Spec->catfile($setup->approot, qw/script setup.sh/);
}
sub create_cpanfile {
my ($setup, $context) = @_;
$setup->spew('cpanfile', $setup->cpanfile);
}
1;
__DATA__
@@ app.psgi
use strict;
use warnings;
use File::Spec;
use File::Basename 'dirname';
use lib (
File::Spec->catdir(dirname(__FILE__), 'lib'),
);
use {{ $self->appname }};
use Plack::Builder;
use Plack::Session::Store::Cache;
use Cache::Memcached::Fast;
my $run_env = $ENV{PLACK_ENV} eq 'development' ? 'local' : $ENV{PLACK_ENV};
my $basedir = dirname(__FILE__);
my $config_file = File::Spec->catfile($basedir, 'config', $run_env.'.pl');
my $config = require($config_file);
my $cache = Cache::Memcached::Fast->new($config->{'Cache'});
my $session_store = Plack::Session::Store::Cache->new(cache => $cache);
my $app = {{ $self->appname }}->run(%$config);
builder {
enable_if { $ENV{PLACK_ENV} =~ /^($:local|dev)$/ } 'StackTrace', force => 1;
enable 'Static', (
root => $basedir,
path => qr{^/static/},
);
enable 'Session', (cache => $session_store);
enable 'CSRFBlock';
$app;
};
@@ common.pl
{
appname => '{{ $self->appname }}',
'Plugin::FormValidator::Lite' => {
function_message => 'en',
constants => [qw/Email/],
},
ErrorPage => {
template => 'error.tt',
},
};
@@ config.pl
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.
( run in 1.086 second using v1.01-cache-2.11-cpan-39bf76dae61 )