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 )