package Nose;
use XML::LibXML;
use Moo::Role;
my $xml = sub {
my ( $self, $params ) = @_; # you really need $self
my $doc = XML::LibXML::Document->new( '1.0', 'utf-8' );
my $root = $doc->createElement("myapp");
my $tag = $doc->createElement("nose");
my $value = $params->{"nose"};
$tag->appendTextNode($value);
$root->appendChild($tag);
$doc->setDocumentElement($root);
$doc->toString();
};
sub nose {
my ( $self, $params ) = @_;
$self->$xml($params);
}
1;
__END__
####
package Karl;
use Moo;
with qw(Nose);
1;
__END__
####
#!/usr/bin/env perl
use Mojolicious::Lite;
use Karl;
my $moo = Karl->new();
get '/foo' => sub {
my $c = shift;
my $params->{nose} = $c->param('nose');
$c->render( text => $moo->nose($params) );
};
app->start;
__END__
####
#!/usr/bin/env perl
use strict;
use warnings;
use Mojo::Server::Hypnotoad;
my $app = q(/Users/karl/Documents/workspace/monks/MyMoo/MyMojo/myapp.psgi);
my $hypnotoad = Mojo::Server::Hypnotoad->new;
$hypnotoad->run($app)
__END__
####
package Connector;
use DBIx::Connector;
use Types::Standard qw(InstanceOf);
use Moo::Role;
has 'connector' => (
is => 'ro',
builder => '_build_connector',
handles => [qw(dbh txn)],
isa => InstanceOf( ['DBIx::Connector'] ),
);
sub _build_connector {
my $dsn = qq(dbi:SQLite:dbname=db/myDB.sqlite);
my $conn = DBIx::Connector->new(
$dsn,
{
RaiseError => 1,
AutoCommit => 1,
}
);
$conn->mode('fixup');
$conn;
}
1;
__END__
####
package MyApp;
use Moo;
with qw(Connector);
1;
__END__
####
use Mojolicious::Lite;
use MyApp;
my $moo = MyApp->new();
get '/foo' => sub {
my $c = shift;
my $query = qq(select nose from myTable);
my $dbh = $moo->dbh;
my $sth = $moo->txn(
sub {
my $sth = $dbh->prepare($query);
$sth->execute;
$sth;
}
);
my $row = $sth->fetch;
$c->render( text => "$row->[0]
" );
};
get '/bar' => sub {
my $c = shift;
my $query = qq(select monk from myTable);
my $dbh = $moo->dbh;
my $sth = $moo->txn(
sub {
my $sth = $dbh->prepare($query);
$sth->execute;
$sth;
}
);
my $row = $sth->fetch;
$c->render( text => "$row->[0]
" );
};
app->start;
__END__