Skip to content

Instantly share code, notes, and snippets.

View jberger's full-sized avatar

Joel Berger jberger

View GitHub Profile
@jberger
jberger / app.pl
Last active August 29, 2015 02:46
use Mojolicious::Lite;
use DBM::Deep;
use Mojo::JWT;
plugin 'Bcrypt';
plugin 'Minion' => {File => 'minion.db'};
app->minion->add_task(send_email => sub {
my ($job, $address, $subject, $body) = @_;
@jberger
jberger / techempower.pl
Last active August 29, 2015 13:56
Mojolicious entry for http://www.techempower.com/
use Mojolicious::Lite;
use Mango;
use JSON::XS 'encode_json';
use Scalar::Util 'looks_like_number';
helper mango => sub { state $mango = Mango->new('mongodb://localhost:27017') };
helper world => sub { shift->mango->db('test')->collection('World') };
helper fortune => sub { shift->mango->db('test')->collection('Fortune') };
helper render_json => sub { shift->render( data => encode_json(shift), format => 'json' ) };
@jberger
jberger / cycle.pl
Created July 12, 2014 14:47
Demonstrate the cycle fixes in Mojolicious4.95
use Mojo::Base -strict;
use Mojo::UserAgent;
use Mojo::IOLoop;
use Devel::Cycle;
my $ua = Mojo::UserAgent->new;
my $delay = Mojo::IOLoop->delay;
$delay->steps(
@jberger
jberger / cycle_output
Created July 12, 2014 14:57
Cycle.pl output
Cycle (1):
$Mojo::UserAgent::A->{'connections'} => \%B
$B->{'6706b717d80b56a349b904c61e129fbf'} => \%C
$C->{'cb'} => \&D
$D variable $self => \$E
$$E => \%Mojo::IOLoop::Delay::F
$Mojo::IOLoop::Delay::F->{'remaining'} => \@G
$G->[0] => \&H
$H variable $ua => \$I
$$I => \%Mojo::UserAgent::A
@jberger
jberger / old_delay.pl
Last active August 29, 2015 14:03
Pre 5.0 delay webapps
#!/usr/bin/env perl
use Mojolicious::Lite;
use Mojo::IOLoop;
get '/error' => sub {
my $c = shift;
$c->render_later;
my $delay = Mojo::IOLoop->delay(
sub { die 'Argh' },
@jberger
jberger / delay_helper.pl
Last active August 29, 2015 14:03
Mojolicious apps with delay helper (from version 5.11)
#!/usr/bin/env perl
use Mojolicious::Lite;
use Mojo::IOLoop;
get '/error' => sub {
my $c = shift;
$c->delay(
sub { die 'Argh' },
sub { $c->render( text => 'Lived!') },
@jberger
jberger / fortunes.t
Last active August 29, 2015 14:05
Use Mojo::UserAgent/Mojo::DOM to verify /fortunes test
use Mojo::Base -strict;
use Test::More;
use Test::Mojo;
my $url = shift or die "Usage: $0 <url>\n";
my $t = Test::Mojo->new;
$t->get_ok($url)
@jberger
jberger / websocket.pl
Last active August 29, 2015 14:05
Updated WebSocket DBI Example
#!/usr/bin/env perl
use Mojolicious::Lite;
use DBIx::Connector;
my $dbname = $ENV{MOJO_DBNAME} || 'database.db';
# add helper methods for interacting with database
helper connector => sub {
state $db = DBIx::Connector->new("dbi:SQLite:$dbname","","") or die "Could not connect";
@jberger
jberger / leaderboard.pl
Last active August 29, 2015 14:05
A golf leaderboard websocket app
#!/usr/bin/env perl
use Mojolicious::Lite;
use Mango;
use Mojo::IOLoop;
use DDP;
use feature 'current_sub';
plugin 'Config' => {
file => 'leaderboard.conf',
@jberger
jberger / player.pl
Last active August 29, 2015 14:06
First cut at a streaming audio player using Mojolicious
#!/usr/bin/env perl
use Mojolicious::Lite;
use experimental qw'signatures postderef';
use Cwd;
app->attr( 'music_root' => sub { return $ENV{MUSIC_ROOT} || Cwd::cwd() } );
push app->static->paths->@*, app->music_root;