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 )