package Mojolicious::Plugin::Mango;
use Modern::Perl;
use Mango;
use Mojo::Base 'Mojolicious::Plugin';
use namespace::clean;
our $VERSION = '0.0.2'; # VERSION
# ABSTRACT: provide mango helpers to Mojolicious
sub register {
my $self = shift;
my $app = shift;
my $conf = shift || {};
$conf->{helper} ||= 'db';
$conf->{default_db} ||= 'test';
$app->attr('_mango' => sub {
my $m = Mango->new($conf->{mango});
$m->default_db($conf->{default_db});
$m->hosts($conf->{hosts}) if $conf->{hosts};
$m;
}
);
$app->helper('mango' => sub { shift; Mango->new(@_) });
$app->helper($conf->{helper} => sub {
my $self = shift;
return $self->app->_mango->db(@_);
}
);
$app->helper('hosts' => sub {
my $self = shift;
return $self->app->_mango->hosts(@_);
});
$app->helper('default_db' => sub {
my $self = shift;
return $self->app->_mango->default_db(@_);
});
$app->helper('coll' => sub {
my $self = shift;
return $self->app->_mango->db->collection(@_);
});
for my $helper (qw/get_more kill_cursors query/) {
next if (defined ($conf->{"no_$helper"}));
$app->helper($helper => sub {
my $self = shift;
$self->app->_mango->$helper(@_);
})
}
for my $helper (qw/collection collection_names command dereference gridfs stats/) {
next if (defined ($conf->{"no_$helper"}));
$app->helper($helper => sub {
my $self = shift;
$self->app->_mango->db->$helper(@_);
})
}
}
1;
__END__
=pod
=encoding UTF-8
=head1 NAME
Mojolicious::Plugin::Mango - provide mango helpers to Mojolicious
=head1 VERSION
version 0.0.2
=head1 SYNOPSIS
For quick use:
In your Mojolicious app:
use Mojolicious::Lite;
plugin 'Mango', {default_db => 'mymongo'};
Then in your code:
sub foo {
my $self = shift;
$self->coll('coll');
$self->command();
$self->db('other')->collection('othercoll');
}
There's a more manually plugin step:
use Mojolicious::Lite;
plugin 'Mango', {
mango => 'mangodb://name:pass@host:port/db',
helper => 'foo',
default_db => 'default_db',
hosts => [ [localhost => 3000], [localhost => 4000] ],
no_query => 1,
no_command => 1,
};
=head1 HELPERS
=over 4
=item * mango
Just call C<Mango-E<gt>new(@_)>.
=item * db or foo
The helper name is setted manually, default is db.
You could call this like: C<$self-E<gt>db>, it will allways
return a L<Mango::Database> object by C<default_db>
=item * coll/collection
Short for C<$self-E<gt>db-E<gt>collection>
=item * default_db
Reset default_db as you want, suggest no.
=item * hosts
May set the hosts to listen.
=item * kill_cursors
Delegated to C<Mango-E<gt>kill_cursors>.
=item * query
Deleaget to C<Mango-E<gt>query>.
=back
=head1 SEE ALSO
L<Mango>, L<Mango::Database>, L<Mango::Collection>
=head1 AUTHOR
Huo Linhe <huolinhe@berrygenomics.com>
=head1 COPYRIGHT AND LICENSE
This software is copyright (c) 2015 by Berry Genomics.
This is free software; you can redistribute it and/or modify it under
the same terms as the Perl 5 programming language system itself.
=cut