AproJo
view release on metacpan or search on metacpan
lib/AproJo.pm view on Meta::CPAN
package AproJo;
use Mojo::Base 'Mojolicious';
use Data::Dumper;
our $VERSION = '0.015';
use File::Basename 'dirname';
use File::Spec;
use File::Spec::Functions qw'rel2abs catdir';
use File::ShareDir 'dist_dir';
use Cwd;
use Mojo::Home;
has db => sub {
my $self = shift;
my $schema_class = $self->config->{db_schema}
or die "Unknown DB Schema Class";
eval "require $schema_class"
or die "Could not load Schema Class ($schema_class), $@\n";
my $db_connect = $self->config->{db_connect}
or die "No DBI connection string provided";
my @db_connect = ref $db_connect ? @$db_connect : ($db_connect);
my $schema = $schema_class->connect(@db_connect)
or die "Could not connect to $schema_class using $db_connect[0]";
return $schema;
};
has app_debug => 0;
has home => sub {
my $path = $ENV{MOJO_HOME} || getcwd;
return Mojo::Home->new(File::Spec->rel2abs($path));
};
has config_file => sub {
my $self = shift;
return $ENV{APROJO_CONFIG} if $ENV{APROJO_CONFIG};
return $self->home->rel_file('aprojo.conf');
};
sub startup {
my $app = shift;
$app->plugin(
Config => {
file => $app->config_file,
default => {
'db_connect' => [
'dbi:SQLite:dbname=' . $app->home->rel_file('aprojo.db'),
undef,
undef,
{'sqlite_unicode' => 1}
],
'db_schema' => 'AproJo::DB::Schema',
'secret' => '47110815'
},
}
);
{
# use content from directories under share/files or using File::ShareDir
my $lib_base = catdir(dirname(rel2abs(__FILE__)), '..', 'share','files');
my $public = catdir($lib_base, 'public');
$app->static->paths->[0] = -d $public ? $public : catdir(dist_dir('AproJo'), 'files','public');
my $static_path = $app->static->paths->[0];
#print STDERR '$static_path: ',$static_path,"\n";
my $templates = catdir($lib_base, 'templates');
$app->renderer->paths->[0] = -d $templates ? $templates : catdir(dist_dir('AproJo'), 'files', 'templates');
}
$app->plugin('I18N');
$app->plugin('Mojolicious::Plugin::ServerInfo');
$app->plugin('Mojolicious::Plugin::DBInfo');
$app->plugin('Mojolicious::Plugin::Form');
push @{$app->commands->namespaces}, 'AproJo::Command';
#DEPRECATED: $app->secret( $app->config->{secret} );
$app->secrets([$app->config->{secret}]);
$app->helper(schema => sub { shift->app->db });
$app->helper('home_page' => sub {'/'});
$app->helper(
'auth_fail' => sub {
my $self = shift;
my $message = shift || "Not Authorized";
$self->flash(onload_message => $message);
$self->redirect_to($self->home_page);
return 0;
}
);
$app->helper(
'source_id' => sub {
my ($self, $source) = @_;
return undef unless $source;
my @columns = $self->schema->source($source)->columns;
my $table_name = $self->schema->class($source)->table;
my $source_id = $table_name . '_id';
return $source_id if (grep {/$source_id/} @columns);
return $columns[0] if (scalar @columns);
}
);
$app->helper(
'get_user' => sub {
my ($self, $name) = @_;
( run in 1.176 second using v1.01-cache-2.11-cpan-cdf2f3d4e48 )