Galileo

 view release on metacpan or  search on metacpan

Changes  view on Meta::CPAN


0.024 2013-03-12
    - Fix some setup bugs
    - Deprecated files config key (use extra_static_paths)
    - Deprecated functionality will be removed by 0.1 release
    - Added mostly hidden/useless 'upload_path' system

0.023 2013-03-04
    - Removed CLI config/setup commands
    - Added web-based setup command
    - Page and Menu controllers are now properly distinct
    - Added expires helper (from being a controller method)
    - Deprecated db_connect config key
    - Added db_* keys (dsn, username, password, options)
    - Deprecated string use of files config key (use arrayref)
        - Deprecated functionality will be removed by 0.1 release

0.022 2013-02-16
    - Bump ::Humane version to 0.04

0.021 2013-02-16

MANIFEST  view on Meta::CPAN

bin/galileo
Build.PL
Changes
lib/Galileo.pm
lib/Galileo/Admin.pm
lib/Galileo/Command/dump.pm
lib/Galileo/Command/setup.pm
lib/Galileo/DB/Deploy.pm
lib/Galileo/DB/Schema.pm
lib/Galileo/DB/Schema/Result/Menu.pm
lib/Galileo/DB/Schema/Result/Page.pm
lib/Galileo/DB/Schema/Result/User.pm
lib/Galileo/File.pm
lib/Galileo/files/public/assets/bootstrap/css/bootstrap-responsive.min.css
lib/Galileo/files/public/assets/bootstrap/css/bootstrap.min.css
lib/Galileo/files/public/assets/bootstrap/img/glyphicons-halflings-white.png
lib/Galileo/files/public/assets/bootstrap/img/glyphicons-halflings.png
lib/Galileo/files/public/assets/bootstrap/js/bootstrap.min.js
lib/Galileo/files/public/assets/html.sortable.0.3.0.min.js
lib/Galileo/files/public/assets/jquery-1.9.1.min.js

MANIFEST  view on Meta::CPAN

lib/Galileo/files/templates/menu/edit.html.ep
lib/Galileo/files/templates/nav_menu.html.ep
lib/Galileo/files/templates/page/edit.html.ep
lib/Galileo/files/templates/page/show.html.ep
lib/Galileo/files/templates/setup/configure.html.ep
lib/Galileo/files/templates/setup/control_group.html.ep
lib/Galileo/files/templates/setup/database.html.ep
lib/Galileo/files/templates/setup/finish.html.ep
lib/Galileo/files/templates/setup/welcome.html.ep
lib/Galileo/files/templates/user_menu.html.ep
lib/Galileo/Menu.pm
lib/Galileo/Page.pm
lib/Galileo/Plugin/Deploy.pm
lib/Galileo/Plugin/Modal.pm
lib/Galileo/User.pm
MANIFEST			This list of files
t/basic.t
t/commands.t
t/locations.t
t/locations/static/test.html
t/locations/uploads/image1.jpg

META.json  view on Meta::CPAN

      "Galileo::Command::setup" : {
         "file" : "lib/Galileo/Command/setup.pm"
      },
      "Galileo::DB::Deploy" : {
         "file" : "lib/Galileo/DB/Deploy.pm"
      },
      "Galileo::DB::Schema" : {
         "file" : "lib/Galileo/DB/Schema.pm",
         "version" : "2"
      },
      "Galileo::DB::Schema::Result::Menu" : {
         "file" : "lib/Galileo/DB/Schema/Result/Menu.pm"
      },
      "Galileo::DB::Schema::Result::Page" : {
         "file" : "lib/Galileo/DB/Schema/Result/Page.pm"
      },
      "Galileo::DB::Schema::Result::User" : {
         "file" : "lib/Galileo/DB/Schema/Result/User.pm"
      },
      "Galileo::File" : {
         "file" : "lib/Galileo/File.pm"
      },
      "Galileo::Menu" : {
         "file" : "lib/Galileo/Menu.pm"
      },
      "Galileo::Page" : {
         "file" : "lib/Galileo/Page.pm"
      },
      "Galileo::Plugin::Deploy" : {
         "file" : "lib/Galileo/Plugin/Deploy.pm"
      },
      "Galileo::Plugin::Modal" : {
         "file" : "lib/Galileo/Plugin/Modal.pm"
      },

META.yml  view on Meta::CPAN

    file: lib/Galileo/Admin.pm
  Galileo::Command::dump:
    file: lib/Galileo/Command/dump.pm
  Galileo::Command::setup:
    file: lib/Galileo/Command/setup.pm
  Galileo::DB::Deploy:
    file: lib/Galileo/DB/Deploy.pm
  Galileo::DB::Schema:
    file: lib/Galileo/DB/Schema.pm
    version: '2'
  Galileo::DB::Schema::Result::Menu:
    file: lib/Galileo/DB/Schema/Result/Menu.pm
  Galileo::DB::Schema::Result::Page:
    file: lib/Galileo/DB/Schema/Result/Page.pm
  Galileo::DB::Schema::Result::User:
    file: lib/Galileo/DB/Schema/Result/User.pm
  Galileo::File:
    file: lib/Galileo/File.pm
  Galileo::Menu:
    file: lib/Galileo/Menu.pm
  Galileo::Page:
    file: lib/Galileo/Page.pm
  Galileo::Plugin::Deploy:
    file: lib/Galileo/Plugin/Deploy.pm
  Galileo::Plugin::Modal:
    file: lib/Galileo/Plugin/Modal.pm
  Galileo::User:
    file: lib/Galileo/User.pm
requires:
  Crypt::Eksblowfish::Bcrypt: '0'

lib/Galileo/DB/Deploy.pm  view on Meta::CPAN

~~Mistaken text.~~
```

*result*:

~~Mistaken text.~~
MARKDOWN
    author_id => $admin->user_id,
  });

  $schema->resultset('Menu')->create({
    name => 'main',
    list => j( [ $syntax->page_id, $about->page_id ] ),
  });
}

sub create_test_object {
  my $class = shift;
  my $opts = ref $_[-1] eq 'HASH' ? pop : {};

  require Galileo;

lib/Galileo/DB/Schema/Result/Menu.pm  view on Meta::CPAN

package Galileo::DB::Schema::Result::Menu;

use DBIx::Class::Candy
  -autotable => v1;

primary_column menu_id => {
  data_type => 'INT',
  is_auto_increment => 1,
};

unique_column name => { 

lib/Galileo/Menu.pm  view on Meta::CPAN

package Galileo::Menu;
use Mojo::Base 'Mojolicious::Controller';

use Mojo::JSON 'j';
use Mojo::ByteStream 'b';

sub edit {
  my $self = shift;
  my $name = 'main';
  my $schema = $self->schema;

  my @active = @{ j(
    $schema->resultset('Menu')->single({name => $name})->list
  ) };
  my %active =
    map { $_ => '' }
    @active;

  my @inactive;

  my @pages = $schema->resultset('Page')->all;
  for my $page ( @pages ) {
    next unless $page;

lib/Galileo/Menu.pm  view on Meta::CPAN

    my $id   = $page->page_id;
    next if $name eq 'home';
    my $li = sprintf qq{<li id="pages-%s"><span class="label label-info">%s</span></li>\n}, $id, $page->title;
    if (exists $active{$id}) {
      $active{$id} = $li;
    } else {
      push @inactive, $li;
    }
  }

  $self->title( 'Setup Main Navigation Menu' );
  $self->content_for( banner => 'Setup Main Navigation Menu' );
  $self->render(
    active   => Mojo::ByteStream->new( join '', @active{@active} ),
    inactive => Mojo::ByteStream->new( join '', @inactive ),
  );
}

sub store {
  my $self = shift;
  $self->on( json => sub {
    my ($self, $data) = @_;
    my $name = $data->{name};
    my $list = $data->{list};

    my $schema = $self->schema;

    my @pages =
      map { my $page = $_; $page =~ s/^pages-//; $page}
      grep { ! /^header-/ }
      @$list;

    $schema->resultset('Menu')->update(
      {
        list => j(\@pages),
      },
      { key => $name }
    );

    $self->memorize->expire($name);
    my $content = $self->include('nav_menu') || '';
    $self->send({ json => {
      message => 'Changes saved',

lib/Galileo/files/sql/_source/deploy/1/001-auto-__VERSION.yml  view on Meta::CPAN

translator:
  add_drop_table: 0
  filename: ~
  no_comments: 0
  parser_args:
    DBIx::Class::Schema: ~
    DBIx::Schema: ~
    package: &1 !!perl/hash:Galileo::DB::Schema
      class_mappings:
        DBIx::Class::DeploymentHandler::VersionStorage::Standard::VersionResult: __VERSION
        Galileo::DB::Schema::Result::Menu: Menu
        Galileo::DB::Schema::Result::Page: Page
        Galileo::DB::Schema::Result::User: User
      source_registrations:
        Menu: !!perl/hash:DBIx::Class::ResultSource::Table
          _columns:
            list:
              data_type: VARCHAR
            menu_id:
              data_type: INT
              is_auto_increment: 1
            name:
              data_type: VARCHAR
          _columns_info_loaded: 0
          _ordered_columns:

lib/Galileo/files/sql/_source/deploy/1/001-auto-__VERSION.yml  view on Meta::CPAN

            - name
            - list
          _primaries: &2
            - menu_id
          _relationships: {}
          _unique_constraints:
            menus_name:
              - name
            primary: *2
          name: menus
          result_class: Galileo::DB::Schema::Result::Menu
          resultset_attributes: {}
          resultset_class: DBIx::Class::ResultSet
          schema: *1
          source_name: Menu
        Page: !!perl/hash:DBIx::Class::ResultSource::Table
          _columns:
            author_id:
              data_type: INT
            html:
              data_type: VARCHAR
            md:
              data_type: VARCHAR
            name:
              data_type: VARCHAR

lib/Galileo/files/sql/_source/deploy/1/001-auto.yml  view on Meta::CPAN

translator:
  add_drop_table: 0
  filename: ~
  no_comments: 0
  parser_args:
    DBIx::Class::Schema: ~
    DBIx::Schema: ~
    package: &1 !!perl/hash:Galileo::DB::Schema
      class_mappings:
        DBIx::Class::DeploymentHandler::VersionStorage::Standard::VersionResult: __VERSION
        Galileo::DB::Schema::Result::Menu: Menu
        Galileo::DB::Schema::Result::Page: Page
        Galileo::DB::Schema::Result::User: User
      source_registrations:
        Menu: !!perl/hash:DBIx::Class::ResultSource::Table
          _columns:
            list:
              data_type: VARCHAR
            menu_id:
              data_type: INT
              is_auto_increment: 1
            name:
              data_type: VARCHAR
          _columns_info_loaded: 0
          _ordered_columns:

lib/Galileo/files/sql/_source/deploy/1/001-auto.yml  view on Meta::CPAN

            - name
            - list
          _primaries: &2
            - menu_id
          _relationships: {}
          _unique_constraints:
            menus_name:
              - name
            primary: *2
          name: menus
          result_class: Galileo::DB::Schema::Result::Menu
          resultset_attributes: {}
          resultset_class: DBIx::Class::ResultSet
          schema: *1
          source_name: Menu
        Page: !!perl/hash:DBIx::Class::ResultSource::Table
          _columns:
            author_id:
              data_type: INT
            html:
              data_type: VARCHAR
            md:
              data_type: VARCHAR
            name:
              data_type: VARCHAR

lib/Galileo/files/sql/_source/deploy/1/001-auto.yml  view on Meta::CPAN

            - handler: _where_op_VALUE
              regex: !!perl/regexp (?^ix:^ value                  $)
            - *7
            - *8
        _sql_maker_opts: {}
        savepoints: []
        schema: *1
        transaction_depth: 0
    sources:
      - User
      - Menu
      - Page
  parser_type: SQL::Translator::Parser::DBIx::Class
  producer_args: {}
  producer_type: SQL::Translator::Producer::YAML
  show_warnings: 0
  trace: 0
  version: 0.11012

lib/Galileo/files/sql/_source/deploy/2/001-auto-__VERSION.yml  view on Meta::CPAN

translator:
  add_drop_table: 0
  filename: ~
  no_comments: 0
  parser_args:
    DBIx::Class::Schema: ~
    DBIx::Schema: ~
    package: &1 !!perl/hash:Galileo::DB::Schema
      class_mappings:
        DBIx::Class::DeploymentHandler::VersionStorage::Standard::VersionResult: __VERSION
        Galileo::DB::Schema::Result::Menu: Menu
        Galileo::DB::Schema::Result::Page: Page
        Galileo::DB::Schema::Result::User: User
      source_registrations:
        Menu: !!perl/hash:DBIx::Class::ResultSource::Table
          _columns:
            list:
              data_type: TEXT
            menu_id:
              data_type: INT
              is_auto_increment: 1
            name:
              data_type: VARCHAR
              size: 255
          _columns_info_loaded: 0

lib/Galileo/files/sql/_source/deploy/2/001-auto-__VERSION.yml  view on Meta::CPAN

            - name
            - list
          _primaries: &2
            - menu_id
          _relationships: {}
          _unique_constraints:
            menus_name:
              - name
            primary: *2
          name: menus
          result_class: Galileo::DB::Schema::Result::Menu
          resultset_attributes: {}
          resultset_class: DBIx::Class::ResultSet
          schema: *1
          source_name: Menu
        Page: !!perl/hash:DBIx::Class::ResultSource::Table
          _columns:
            author_id:
              data_type: INT
            html:
              data_type: TEXT
            md:
              data_type: TEXT
            name:
              data_type: VARCHAR

lib/Galileo/files/sql/_source/deploy/2/001-auto.yml  view on Meta::CPAN

translator:
  add_drop_table: 0
  filename: ~
  no_comments: 0
  parser_args:
    DBIx::Class::Schema: ~
    DBIx::Schema: ~
    package: &1 !!perl/hash:Galileo::DB::Schema
      class_mappings:
        DBIx::Class::DeploymentHandler::VersionStorage::Standard::VersionResult: __VERSION
        Galileo::DB::Schema::Result::Menu: Menu
        Galileo::DB::Schema::Result::Page: Page
        Galileo::DB::Schema::Result::User: User
      source_registrations:
        Menu: !!perl/hash:DBIx::Class::ResultSource::Table
          _columns:
            list:
              data_type: TEXT
            menu_id:
              data_type: INT
              is_auto_increment: 1
            name:
              data_type: VARCHAR
              size: 255
          _columns_info_loaded: 0

lib/Galileo/files/sql/_source/deploy/2/001-auto.yml  view on Meta::CPAN

            - name
            - list
          _primaries: &2
            - menu_id
          _relationships: {}
          _unique_constraints:
            menus_name:
              - name
            primary: *2
          name: menus
          result_class: Galileo::DB::Schema::Result::Menu
          resultset_attributes: {}
          resultset_class: DBIx::Class::ResultSet
          schema: *1
          source_name: Menu
        Page: !!perl/hash:DBIx::Class::ResultSource::Table
          _columns:
            author_id:
              data_type: INT
            html:
              data_type: TEXT
            md:
              data_type: TEXT
            name:
              data_type: VARCHAR

lib/Galileo/files/sql/_source/deploy/2/001-auto.yml  view on Meta::CPAN

            - handler: _where_op_VALUE
              regex: !!perl/regexp (?^ix:^ value                  $)
            - *7
            - *8
        _sql_maker_opts: {}
        savepoints: []
        schema: *1
        transaction_depth: 0
    sources:
      - User
      - Menu
      - Page
  parser_type: SQL::Translator::Parser::DBIx::Class
  producer_args: {}
  producer_type: SQL::Translator::Producer::YAML
  show_warnings: 0
  trace: 0
  version: 0.11012

lib/Galileo/files/templates/nav_menu.html.ep  view on Meta::CPAN

%= memorize main => begin
  % my $menu = schema->resultset('Menu')->single({name => 'main'});
  % my @pages = @{ Mojo::JSON::decode_json($menu->list) };
  % my $rs = schema->resultset('Page');
  <div class="well" id="nav_menu" style="padding: 8px 0;">
    <ul id="main" class="nav nav-list">
      <li class="nav-header">Navigation</li>
      <li><a href="/">Home</a></li>
      % for my $id (@pages) {
        % my $page = $rs->single({page_id => $id});
        % next unless $page;
        <li>

lib/Galileo/files/templates/user_menu.html.ep  view on Meta::CPAN

% if (my $user = session 'username') {
<div class="well" style="padding: 8px 0;">
  <ul class="nav nav-list" id="user-menu">
    <li class="nav-header">Hello <%== $user %></li>
    % if ( is_author($user) && current_route 'show_page' ) {
      <li><a href="#" onclick="add_page()">Add New Page</a></li>
      <li><a href="<%= url_for 'edit_page', name => stash('name') %>">Edit This Page</a></li>
    % }
    <li><a href="/admin/menu">Edit Nav Menu</a></li>
    <li><a href="/logout">Log Out</a></li>
    % if ( is_admin $user ) {
      <li class="nav-header">Administration</li>
      <li><a href="#" onclick="add_user()">Add New User</a></li>
      <li><a href="/admin/users">All Users</a></li>
      <li><a href="/admin/pages">All Pages</a></li>
    % }
  </ul>
</div>

t/basic.t  view on Meta::CPAN

    ->finish_ok;

  # see that the changes are reflected
  $t->get_ok('/page/snow❄flake')
    ->status_is(200)
    ->text_is( h1 => 'New Home for ☃' )
    ->text_like( '#content p' => qr/$text/ );

};

subtest 'Edit Main Navigation Menu' => sub {
  my $title = 'About Galileo';

  # check about page is in nav
  $t->get_ok('/admin/menu')
    ->status_is(200)
    ->$trimmed_text_is( 'ul#main > li:nth-of-type(4) > a' => $title )
    ->text_is( '#list-active-pages > #pages-2 > span' => $title );

  # remove about page from list
  my $data = {



( run in 0.917 second using v1.01-cache-2.11-cpan-49f99fa48dc )