MongoDBx-Tiny
view release on metacpan or search on metacpan
lib/MongoDBx/Tiny.pm view on Meta::CPAN
=head1 NAME
MongoDBx::Tiny - Simple Mongo ORM for Perl
=head1 VERSION
Version 0.04
=cut
our $VERSION = '0.04';
=head1 SYNOPSIS
# --------------------
package My::Data;
use MongoDBx::Tiny;
CONNECT_INFO host => 'localhost', port => 27017;
DATABASE_NAME 'my_data';
# --------------------
package My::Data::Foo;
use MongoDBx::Tiny::Document;
COLLECTION_NAME 'foo';
ESSENTIAL qw/code/;
FIELD 'code', INT, LENGTH(10), DEFAULT('0'), REQUIRED;
FIELD 'name', STR, LENGTH(30), DEFAULT('noname');
# --------------------
package main;
my $tiny = My::Data->new;
$tiny->insert(foo => { code => 123, name => "foo_123"}) or die $!;
my $foo = $tiny->single(foo => { code => 123});
$foo->name('foo_321');
$foo->update;
$foo->remove;
=cut
use MongoDB;
use Carp qw/carp confess/;
use Data::Dumper;
use MongoDBx::Tiny::Util;
use Params::Validate ();
use Scalar::Util qw(blessed);
sub import {
my $caller = (caller(0))[0];
{
no strict 'refs';
push @{"${caller}::ISA"}, __PACKAGE__;
}
strict->import;
warnings->import;
__PACKAGE__->export_to_level(1, @_);
}
require Exporter;
use base qw/Exporter/;
our @EXPORT = qw/CONNECT_INFO DATABASE_NAME LOAD_PLUGIN/;
our $_CONNECT_INFO;
our $_DATABASE_NAME;
=head1 EXPORT
A list of functions that can be exported.
=head2 CONNECT_INFO
CONNECT_INFO host => 'localhost', port => 27017;
=head2 DATABASE_NAME
DATABASE_NAME 'my_data';
=head2 LOAD_PLUGIN
LOAD_PLUGIN 'One'; # MongoDBx::Tiny::Plugin::One
LOAD_PLUGIN 'Two';
LOAD_PLUGIN '+Class::Name';
=cut
{
no warnings qw(once);
*CONNECT_INFO = \&install_connect_info;
*DATABASE_NAME = \&install_database_name;
*LOAD_PLUGIN = \&install_plugin;
}
sub install_connect_info { util_class_attr('CONNECT_INFO', @_) }
sub install_database_name { util_class_attr('DATABASE_NAME',@_) }
sub install_plugin {
my $class = (caller(0))[0];
$class->load_plugin(shift)
}
=head1 SUBROUTINES/METHODS
=head2 new
my $tiny = My::Data->new();
# or you can specify connect_info, database_name.
my $tiny = My::Data->new({
connect_info => [ host => 'localhost', port => 27017 ],
database_name => 'my_data',
});
=cut
( run in 1.581 second using v1.01-cache-2.11-cpan-8f98c5d2c55 )