Implement basic guestbook signing and reading
This commit is contained in:
parent
9c0d077266
commit
edca297f78
|
@ -27,5 +27,6 @@ Add the `-v` option for more verbose output
|
||||||
|
|
||||||
## TODOs
|
## TODOs
|
||||||
|
|
||||||
1. Create hostname k/v pair in conf file
|
1. Add tests for `/post` route
|
||||||
1. Create rows in table
|
1. Probably rename `/post` to `/sign`
|
||||||
|
1. Remove the Test model and clean up
|
||||||
|
|
|
@ -7,6 +7,8 @@ use Mojolicious::Lite -signatures;
|
||||||
use Mojo::Pg;
|
use Mojo::Pg;
|
||||||
use lib 'lib';
|
use lib 'lib';
|
||||||
use GuestbookNg::Model::Test;
|
use GuestbookNg::Model::Test;
|
||||||
|
use GuestbookNg::Model::Message;
|
||||||
|
use Data::Dumper; # Uncomment for debugging
|
||||||
|
|
||||||
# Plugins
|
# Plugins
|
||||||
plugin 'Config';
|
plugin 'Config';
|
||||||
|
@ -30,7 +32,7 @@ helper test => sub {
|
||||||
};
|
};
|
||||||
|
|
||||||
helper message => sub {
|
helper message => sub {
|
||||||
state $test = GuestbookNg::Model::Message->new(pg => shift->pg)
|
state $message = GuestbookNg::Model::Message->new(pg => shift->pg)
|
||||||
};
|
};
|
||||||
|
|
||||||
# Routes
|
# Routes
|
||||||
|
@ -39,7 +41,9 @@ under sub ($c) {
|
||||||
};
|
};
|
||||||
|
|
||||||
get '/' => sub ($c) {
|
get '/' => sub ($c) {
|
||||||
$c->render()
|
my $posts = $c->message->get_posts();
|
||||||
|
|
||||||
|
$c->render(posts => $posts);
|
||||||
} => 'index';
|
} => 'index';
|
||||||
|
|
||||||
any '/test' => sub ($c) {
|
any '/test' => sub ($c) {
|
||||||
|
@ -55,5 +59,18 @@ any '/test' => sub ($c) {
|
||||||
);
|
);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
any '/post' => sub ($c) {
|
||||||
|
if ($c->req->method() eq 'POST') {
|
||||||
|
my $name = $c->param('name');
|
||||||
|
my $message = $c->param('message');
|
||||||
|
|
||||||
|
$c->message->send_post($name, $message);
|
||||||
|
$c->redirect_to('index');
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
$c->render()
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
# Send it
|
# Send it
|
||||||
app->start();
|
app->start();
|
||||||
|
|
|
@ -10,4 +10,15 @@ sub new($class, $pg, $object) {
|
||||||
bless {$pg => $object}
|
bless {$pg => $object}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
sub get_posts($self) {
|
||||||
|
$self->pg->db->query('SELECT date, name, msg FROM messages;')->arrays()
|
||||||
|
}
|
||||||
|
|
||||||
|
sub send_post($self, $name, $msg) {
|
||||||
|
$self->pg->db->query(
|
||||||
|
'INSERT INTO messages (date, name, msg)
|
||||||
|
VALUES (NOW(), ?, ?);', $name, $msg
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
1;
|
1;
|
||||||
|
|
|
@ -1,3 +1,20 @@
|
||||||
% layout 'default';
|
% layout 'default';
|
||||||
% title 'Home';
|
% title 'Home';
|
||||||
<h2>Welcome to the Mojolicious real-time web framework!</h2>
|
<h2>Messages from the World Wide Web</h2>
|
||||||
|
<% for my $row (reverse @$posts) { %>
|
||||||
|
<table>
|
||||||
|
<tr>
|
||||||
|
<th>Date:</th>
|
||||||
|
<td><%= @$row[0] %></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<th>Name:</th>
|
||||||
|
<td><%= @$row[1] %></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<th>Message:</th>
|
||||||
|
<td><%= @$row[2] %></td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
<br>
|
||||||
|
<% } %>
|
||||||
|
|
|
@ -5,7 +5,7 @@
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
<center>
|
<center>
|
||||||
<h1><%= title %></h1>
|
<h1>Guestbook-NG</h1>
|
||||||
<!-- Nav table -->
|
<!-- Nav table -->
|
||||||
<table>
|
<table>
|
||||||
<tr>
|
<tr>
|
||||||
|
@ -13,10 +13,14 @@
|
||||||
<td> </td>
|
<td> </td>
|
||||||
<td><%= link_to Test => 'test' %></td>
|
<td><%= link_to Test => 'test' %></td>
|
||||||
<td> </td>
|
<td> </td>
|
||||||
<td><%= link_to Post => 'post' %></td>
|
<td><%= link_to Sign => 'post' %></td>
|
||||||
</tr>
|
</tr>
|
||||||
</table>
|
</table>
|
||||||
<%= content %>
|
<%= content %>
|
||||||
|
<footer>
|
||||||
|
<p><i>Maximize your dynamic innovation using battle-tested deep
|
||||||
|
learning models.</i></p>
|
||||||
|
</footer>
|
||||||
</center>
|
</center>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
|
19
templates/post.html.ep
Normal file
19
templates/post.html.ep
Normal file
|
@ -0,0 +1,19 @@
|
||||||
|
% layout 'default';
|
||||||
|
% title 'New Post';
|
||||||
|
<h2>Create a New Post</h2>
|
||||||
|
<form method="post">
|
||||||
|
<table>
|
||||||
|
<tr>
|
||||||
|
<th>Name:</th>
|
||||||
|
<td><%= input_tag 'name' %></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<th>Message:</th>
|
||||||
|
<td><%= text_area 'message', cols => 40, rows => 6 %></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<th> </th>
|
||||||
|
<td><%= submit_button 'Send it' %></td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
</form>
|
Loading…
Reference in a new issue