From af2a5672918f67eef5c62148a3a394335314f621 Mon Sep 17 00:00:00 2001 From: mokko Date: Thu, 29 Nov 2012 22:27:25 -0500 Subject: [PATCH] adapt tutorial for Dancer 2 --- README | 3 + dancr.pl | 163 +++++++++++++++++++++--------------------- views/layouts/main.tt | 20 +++--- views/login.tt | 4 +- views/show_entries.tt | 18 ++--- 5 files changed, 104 insertions(+), 104 deletions(-) create mode 100644 README diff --git a/README b/README new file mode 100644 index 0000000..7bd6ce9 --- /dev/null +++ b/README @@ -0,0 +1,3 @@ +This is the code from Dancer::Tutorial as a working example for your convenience. This version of the tutorial is intended for Dancer 2.x. + +(There are not so many differences between Dancer 1 and 2 for the application developer, so Dancer::Tutorial remains largely the same as in Dancer 1.x.) \ No newline at end of file diff --git a/dancr.pl b/dancr.pl index 760e331..973069a 100755 --- a/dancr.pl +++ b/dancr.pl @@ -1,117 +1,114 @@ #!/usr/bin/perl -use Dancer; +use Dancer 2.0; use DBI; use File::Spec; use File::Slurp; use Template; - + set 'database' => File::Spec->catfile(File::Spec->tmpdir(), 'dancr.db'); set 'session' => 'Simple'; set 'template' => 'template_toolkit'; -set 'logger' => 'console'; -set 'log' => 'debug'; -set 'show_errors' => 1; -set 'startup_info' => 1; -set 'warnings' => 1; +set 'logger' => 'console'; #not default value? +set 'log' => 'info'; +set 'show_errors' => 1; #not yet implemented in D2 +set 'startup_info' => 1; #not yet implemented in D2 +set 'warnings' => 1; #? set 'username' => 'admin'; set 'password' => 'password'; set 'layout' => 'main'; - + my $flash; - + sub set_flash { - my $message = shift; - - $flash = $message; + my $message = shift; + $flash = $message; } - + sub get_flash { - - my $msg = $flash; - $flash = ""; - - return $msg; + my $msg = $flash; + $flash = ""; + + return $msg; } - + sub connect_db { - my $dbh = DBI->connect("dbi:SQLite:dbname=".setting('database')) or - die $DBI::errstr; - - return $dbh; + my $dbh = DBI->connect("dbi:SQLite:dbname=" . setting('database')) + or die $DBI::errstr; + + return $dbh; } - + sub init_db { - my $db = connect_db(); - my $schema = read_file('./schema.sql'); - $db->do($schema) or die $db->errstr; + my $db = connect_db(); + my $schema = read_file('./schema.sql'); + $db->do($schema) or die $db->errstr; } - + hook before_template => sub { - my $tokens = shift; - - $tokens->{'css_url'} = request->base . 'css/style.css'; - $tokens->{'login_url'} = uri_for('/login'); - $tokens->{'logout_url'} = uri_for('/logout'); + my $tokens = shift; + + $tokens->{'css_url'} = request->base . 'css/style.css'; + $tokens->{'login_url'} = uri_for('/login'); + $tokens->{'logout_url'} = uri_for('/logout'); }; - + get '/' => sub { - my $db = connect_db(); - my $sql = 'select id, title, text from entries order by id desc'; - my $sth = $db->prepare($sql) or die $db->errstr; - $sth->execute or die $sth->errstr; - template 'show_entries.tt', { - 'msg' => get_flash(), - 'add_entry_url' => uri_for('/add'), - 'entries' => $sth->fetchall_hashref('id'), - }; + my $db = connect_db(); + my $sql = 'select id, title, text from entries order by id desc'; + my $sth = $db->prepare($sql) or die $db->errstr; + $sth->execute or die $sth->errstr; + template 'show_entries.tt', + { 'msg' => get_flash(), + 'add_entry_url' => uri_for('/add'), + 'entries' => $sth->fetchall_hashref('id'), + }; }; - + post '/add' => sub { - if ( not session('logged_in') ) { - send_error("Not logged in", 401); - } - - my $db = connect_db(); - my $sql = 'insert into entries (title, text) values (?, ?)'; - my $sth = $db->prepare($sql) or die $db->errstr; - $sth->execute(params->{'title'}, params->{'text'}) or die $sth->errstr; - - set_flash('New entry posted!'); - redirect '/'; + if (not session('logged_in')) { + send_error("Not logged in", 401); + } + + my $db = connect_db(); + my $sql = 'insert into entries (title, text) values (?, ?)'; + my $sth = $db->prepare($sql) or die $db->errstr; + $sth->execute(params->{'title'}, params->{'text'}) or die $sth->errstr; + + set_flash('New entry posted!'); + redirect '/'; }; - + any ['get', 'post'] => '/login' => sub { - my $err; - - if ( request->method() eq "POST" ) { - # process form input - if ( params->{'username'} ne setting('username') ) { - $err = "Invalid username"; - } - elsif ( params->{'password'} ne setting('password') ) { - $err = "Invalid password"; - } - else { - session 'logged_in' => true; - set_flash('You are logged in.'); - return redirect '/'; - } - } - - # display login form - template 'login.tt', { - 'err' => $err, - }; - + my $err; + + if (request->method() eq "POST") { + + # process form input + if (params->{'username'} ne setting('username')) { + $err = "Invalid username"; + } + elsif (params->{'password'} ne setting('password')) { + $err = "Invalid password"; + } + else { + session 'logged_in' => true; + set_flash('You are logged in.'); + return redirect '/'; + } + } + + # display login form + template 'login.tt', {'err' => $err,}; + }; - + get '/logout' => sub { - session->destroy; - set_flash('You are logged out.'); - redirect '/'; + session->destroy; + set_flash('You are logged out.'); + redirect '/'; }; - + init_db(); start; diff --git a/views/layouts/main.tt b/views/layouts/main.tt index 9069880..c2dcacc 100644 --- a/views/layouts/main.tt +++ b/views/layouts/main.tt @@ -2,22 +2,22 @@ Dancr - +

Dancr

- <% IF not session.logged_in %> - log in - <% ELSE %> - log out - <% END %> + [% IF not session.logged_in %] + log in + [% ELSE %] + log out + [% END %]
- <% IF msg %> -
<% msg %>
- <% END %> - <% content %> + [% IF msg %] +
[% msg %]
+ [% END %] + [% content %]
diff --git a/views/login.tt b/views/login.tt index 161b80a..7fd77bd 100644 --- a/views/login.tt +++ b/views/login.tt @@ -1,6 +1,6 @@

Login

-<% IF err %>

Error: <% err %><% END %> -

+[% IF err %]

Error: [% err %][% END %] +

Username:
diff --git a/views/show_entries.tt b/views/show_entries.tt index a8bdc1f..7a50e13 100644 --- a/views/show_entries.tt +++ b/views/show_entries.tt @@ -1,5 +1,5 @@ -<% IF session.logged_in %> - +[% IF session.logged_in %] +
Title:
@@ -8,13 +8,13 @@
-<% END %> +[% END %]
    -<% IF entries.size %> - <% FOREACH id IN entries.keys.nsort %> -
  • <% entries.$id.title %>

    <% entries.$id.text %> - <% END %> -<% ELSE %> +[% IF entries.size %] + [% FOREACH id IN entries.keys.nsort %] +
  • [% entries.$id.title %]

    [% entries.$id.text %] + [% END %] +[% ELSE %]
  • Unbelievable. No entries here so far -<% END %> +[% END %]