Skip to content

Instantly share code, notes, and snippets.

View benvanstaveren's full-sized avatar

Ben van Staveren benvanstaveren

View GitHub Profile
ref($_) eq 'HASH" && defined($_->{'$id'}) && defined($_->{'$ref'})
foreach my $object_type ($self->objectmanager->registered_types) {
$self->objectmanager->meta_for($object_type => Moose::Meta::Class->create(
'App::Object::' . $object_type,
{
methods => $self->objectmanager->get_methods_for($object_type),
attributes => $self->objectmanager->get_attributes_for($object_type),
superclasses => ['App::Object'],
roles => [ 'App::Object::Generated', $self->objectmanager->roles_for($object_type) ],
}
);
$self->objectmanager->add_sub_for(
object => $object_type,
object_method => $method_name,
method => sub {
if(my $m = shift->app->jsp->can($method_name)) {
return $m->(@_);
}
},
);
@benvanstaveren
benvanstaveren / gist:1044959
Created June 24, 2011 14:59
file upload to mongodb
if(my $upload = $self->req->upload('myfile')) {
my $filename = $upload->filename;
my $asset;
if(ref($upload->asset) ne 'Mojo::Upload::File') {
$asset = Mojo::Asset::File->new(path => POSIX::tmpnam);
$asset->add_chunk($upload->asset->slurp);
} else {
$asset = $upload->asset;
}
package My::Object;
use Moose ();
use Moose::Exporter;
use namespace::autoclean;
use My::Meta::Types;
use My::Meta::AttributeTraits;
Moose::Exporter->setup_import_methods(
also => 'Moose',
);
# If you look at my Monger repository, imagine the following snippet being stuck in
# Monger.pm
BEGIN {
Moose::Meta::Class->meta->make_mutable;
Moose::Meta::Class->meta->add_before_method_modifier('make_immutable', sub {
my $self = shift;
my $name = $self->name;
# apply the dbref role if, and only if, we're a monger::document
@benvanstaveren
benvanstaveren / gist:1007128
Created June 3, 2011 20:41
deflating Moose class to something suitable for using in MongoDB
use Data::Dumper;
sub deflate {
my $self = shift;
my $doc = {};
foreach my $attribute ($self->meta->get_all_attributes) {
# here be dragons, type checks, trait checks, and more
$doc->{$attribute->name} = $attribute->get_value($self);
}
sub somecontroller {
my $self = shift;
my $foo = My::App::PaintBucket->new();
$foo->paint(what => 'wall') || die My::App::Exception::NoPaintException->new(caller(1));
}
var myPlugin = new Extension({ 'foo': 'bar'});
myPlugin.hook('render_filter', function(output) {
output.replace('foo','bar');
return output;
});
app.register(myPlugin);
package My::Plugin;
use strict;
use warnings;
use base 'TheApp::Plugin::Base';
sub register {
my $self = shift;
my $app = shift;
$self->hook(render_filter => sub { s/foo/bar/ and return $_ });