Skip to content

Commit

Permalink
Store the items in a Javascrip array
Browse files Browse the repository at this point in the history
  • Loading branch information
davorg committed Feb 23, 2016
1 parent 8e59e1b commit ea3e37b
Show file tree
Hide file tree
Showing 40 changed files with 10,601 additions and 0 deletions.
1 change: 1 addition & 0 deletions step06/README
@@ -0,0 +1 @@
Step 06 - Data as a Javascript structure.
Empty file added step06/Todo/.dancer
Empty file.
24 changes: 24 additions & 0 deletions step06/Todo/MANIFEST
@@ -0,0 +1,24 @@
MANIFEST
cpanfile
Makefile.PL
MANIFEST.SKIP
config.yml
.dancer
public/dispatch.fcgi
public/500.html
public/dispatch.cgi
public/favicon.ico
public/404.html
public/images/perldancer-bg.jpg
public/images/perldancer.jpg
public/css/style.css
public/css/error.css
public/javascripts/jquery.js
t/001_base.t
t/002_index_route.t
lib/Todo.pm
views/index.tt
views/layouts/main.tt
environments/production.yml
environments/development.yml
bin/app.psgi
17 changes: 17 additions & 0 deletions step06/Todo/MANIFEST.SKIP
@@ -0,0 +1,17 @@
^\.git\/
maint
^tags$
.last_cover_stats
Makefile$
^blib
^pm_to_blib
^.*.bak
^.*.old
^t.*sessions
^cover_db
^.*\.log
^.*\.swp$
MYMETA.*
^.gitignore
^.svn\/
^Todo-
26 changes: 26 additions & 0 deletions step06/Todo/Makefile.PL
@@ -0,0 +1,26 @@
use strict;
use warnings;
use ExtUtils::MakeMaker;

# Normalize version strings like 6.30_02 to 6.3002,
# so that we can do numerical comparisons on it.
my $eumm_version = $ExtUtils::MakeMaker::VERSION;
$eumm_version =~ s/_//;

WriteMakefile(
NAME => 'Todo',
AUTHOR => q{YOUR NAME <youremail@example.com>},
VERSION_FROM => 'lib/Todo.pm',
ABSTRACT => 'YOUR APPLICATION ABSTRACT',
($eumm_version >= 6.3001
? ('LICENSE'=> 'perl')
: ()),
PL_FILES => {},
PREREQ_PM => {
'Test::More' => 0,
'YAML' => 0,
'Dancer2' => 0.166001,
},
dist => { COMPRESS => 'gzip -9f', SUFFIX => 'gz', },
clean => { FILES => 'Todo-*' },
);
17 changes: 17 additions & 0 deletions step06/Todo/bin/app.psgi
@@ -0,0 +1,17 @@
#!/usr/bin/env perl

use strict;
use warnings;
use FindBin;
use lib "$FindBin::Bin/../lib";

use Plack::Builder;

use Todo;

builder {
enable 'Plack::Middleware::Static',
path => qr{^/(javascripts|css)/} , root => './public/';
Todo->to_app;
};

61 changes: 61 additions & 0 deletions step06/Todo/config.yml
@@ -0,0 +1,61 @@
# This is the main configuration file of your Dancer2 app
# env-related settings should go to environments/$env.yml
# all the settings in this file will be loaded at Dancer's startup.

# Your application's name
appname: "Todo"

# The default layout to use for your application (located in
# views/layouts/main.tt)
layout: "main"

# when the charset is set to UTF-8 Dancer2 will handle for you
# all the magic of encoding and decoding. You should not care
# about unicode within your app when this setting is set (recommended).
charset: "UTF-8"

# template engine
# simple: default and very basic template engine
# template_toolkit: TT

# template: "simple"

template: "template_toolkit"
engines:
template:
template_toolkit:
start_tag: '<%'
end_tag: '%>'

# session engine
#
# Simple: in-memory session store - Dancer2::Session::Simple
# YAML: session stored in YAML files - Dancer2::Session::YAML
#
# Check out metacpan for other session storage options:
# https://metacpan.org/search?q=Dancer2%3A%3ASession&search_type=modules
#
# Default value for 'cookie_name' is 'dancer.session'. If you run multiple
# Dancer apps on the same host then you will need to make sure 'cookie_name'
# is different for each app.
#
#engines:
# session:
# Simple:
# cookie_name: testapp.session
#
#engines:
# session:
# YAML:
# cookie_name: eshop.session
# is_secure: 1
# is_http_only: 1

plugins:
DBIC:
default:
schema_class: Todo::Schema
dsn: dbi:mysql:dbname=todo
user: todouser
pass: sekr1t

11 changes: 11 additions & 0 deletions step06/Todo/cpanfile
@@ -0,0 +1,11 @@
requires "Dancer2" => "0.166001";

recommends "YAML" => "0";
recommends "URL::Encode::XS" => "0";
recommends "CGI::Deurl::XS" => "0";
recommends "HTTP::Parser::XS" => "0";

on "test" => sub {
requires "Test::More" => "0";
requires "HTTP::Request::Common" => "0";
};
23 changes: 23 additions & 0 deletions step06/Todo/environments/development.yml
@@ -0,0 +1,23 @@
# configuration file for development environment

# the logger engine to use
# console: log messages to STDOUT (your console where you started the
# application server)
# file: log message to a file in log/
logger: "console"

# the log level for this environment
# core is the lowest, it shows Dancer2's core log messages as well as yours
# (debug, info, warning and error)
log: "core"

# should Dancer2 consider warnings as critical errors?
warnings: 1

# should Dancer2 show a stacktrace when an 5xx error is caught?
# if set to yes, public/500.html will be ignored and either
# views/500.tt, 'error_template' template, or a default error template will be used.
show_errors: 1

# print the banner
startup_info: 1
16 changes: 16 additions & 0 deletions step06/Todo/environments/production.yml
@@ -0,0 +1,16 @@
# configuration file for production environment

# only log warning and error messsages
log: "warning"

# log message to a file in logs/
logger: "file"

# don't consider warnings critical
warnings: 0

# hide errors
show_errors: 0

# disable server tokens in production environments
no_server_tokens: 1
27 changes: 27 additions & 0 deletions step06/Todo/lib/Todo.pm
@@ -0,0 +1,27 @@
package Todo;
use Dancer2;

our $VERSION = '0.1';

use Dancer2::Plugin::DBIC;
use DateTime::Format::Strptime;
use DateTime;

get '/' => sub {
my $dt_parser = DateTime::Format::Strptime->new(
pattern => '%Y-%m-%d',
);

my @items = schema->resultset('Item')->all;

my $now = DateTime->now;

foreach my $item (@items) {
# $item->{due} = $dt_parser->parse_datetime($item->{due});
# $item->overdue} = $item->{due} <= $now;
}

template 'index', { items => \@items };
};

true;
20 changes: 20 additions & 0 deletions step06/Todo/lib/Todo/Schema.pm
@@ -0,0 +1,20 @@
use utf8;
package Todo::Schema;

# Created by DBIx::Class::Schema::Loader
# DO NOT MODIFY THE FIRST PART OF THIS FILE

use Moose;
use MooseX::MarkAsMethods autoclean => 1;
extends 'DBIx::Class::Schema';

__PACKAGE__->load_namespaces;


# Created by DBIx::Class::Schema::Loader v0.07045 @ 2016-02-20 15:34:03
# DO NOT MODIFY THIS OR ANYTHING ABOVE! md5sum:vVE+p7R6DZlode+faUm3PA


# You can replace this text with custom code or comments, and it will be preserved on regeneration
__PACKAGE__->meta->make_immutable(inline_constructor => 0);
1;
115 changes: 115 additions & 0 deletions step06/Todo/lib/Todo/Schema/Result/Item.pm
@@ -0,0 +1,115 @@
use utf8;
package Todo::Schema::Result::Item;

# Created by DBIx::Class::Schema::Loader
# DO NOT MODIFY THE FIRST PART OF THIS FILE

=head1 NAME
Todo::Schema::Result::Item
=cut

use strict;
use warnings;

use Moose;
use MooseX::NonMoose;
use MooseX::MarkAsMethods autoclean => 1;
extends 'DBIx::Class::Core';

=head1 COMPONENTS LOADED
=over 4
=item * L<DBIx::Class::InflateColumn::DateTime>
=back
=cut

__PACKAGE__->load_components("InflateColumn::DateTime");

=head1 TABLE: C<item>
=cut

__PACKAGE__->table("item");

=head1 ACCESSORS
=head2 id
data_type: 'integer'
is_auto_increment: 1
is_nullable: 0
=head2 title
data_type: 'varchar'
is_nullable: 0
size: 200
=head2 description
data_type: 'text'
is_nullable: 1
=head2 due
data_type: 'datetime'
datetime_undef_if_invalid: 1
is_nullable: 1
=head2 done
data_type: 'tinyint'
default_value: 0
is_nullable: 0
=cut

__PACKAGE__->add_columns(
"id",
{ data_type => "integer", is_auto_increment => 1, is_nullable => 0 },
"title",
{ data_type => "varchar", is_nullable => 0, size => 200 },
"description",
{ data_type => "text", is_nullable => 1 },
"due",
{
data_type => "datetime",
datetime_undef_if_invalid => 1,
is_nullable => 1,
},
"done",
{ data_type => "tinyint", default_value => 0, is_nullable => 0 },
);

=head1 PRIMARY KEY
=over 4
=item * L</id>
=back
=cut

__PACKAGE__->set_primary_key("id");


# Created by DBIx::Class::Schema::Loader v0.07045 @ 2016-02-20 15:34:39
# DO NOT MODIFY THIS OR ANYTHING ABOVE! md5sum:fHpHOJIO5XHllmEmagWVcA

use DateTime;

sub overdue {
my $self = shift;

return $self->due <= DateTime->now ? 1 : 0;
}

# You can replace this text with custom code or comments, and it will be preserved on regeneration
__PACKAGE__->meta->make_immutable;
1;
18 changes: 18 additions & 0 deletions step06/Todo/public/404.html
@@ -0,0 +1,18 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=yes">
<title>Error 404</title>
<link rel="stylesheet" href="/css/error.css">
</head>
<body>
<h1>Error 404</h1>
<div id="content">
<h2>Page Not Found</h2><p>Sorry, this is the void.</p>
</div>
<div id="footer">
Powered by <a href="http://perldancer.org/">Dancer2</a>.
</div>
</body>
</html>

0 comments on commit ea3e37b

Please sign in to comment.