MongoDBx-Tiny
view release on metacpan or search on metacpan
lib/MongoDBx/Tiny/Document.pm view on Meta::CPAN
$tiny->insert($class->collection_name,$validator->document);
}
package My::Data::Bar;
use strict;
use MongoDBx::Tiny::Document;
COLLECTION_NAME 'bar';
ESSENTIAL qw/foo_id code/;
FIELD 'foo_id', OID, DEFAULT(''), REQUIRED;
FIELD 'code', INT(10), DEFAULT('0'),REQUIRED;
FIELD 'name', VARCHAR(30), DEFAULT('noname'),&MY_ATTRIBUTE;
RELATION 'foo', RELATION_DEFAULT('single','id','foo_id');
TRIGGER 'before_insert', sub {
my ($document_class,$tiny,$document,$opt) = @_;
};
# before_update,after_update,before_remove,after_remove
TRIGGER 'after_insert', sub {
my ($document_class,$object,$opt) = @_;
};
QUERY_ATTRIBUTES {
# no support in update and delete
single => { del_flag => "off" },
search => { del_flag => "off" }
};
sub MY_ATTRIBUTE {
return {
name => 'MY_ATTRIBUTE',
callback => sub {
return 1;
}
};
}
=cut
use Data::Dumper;
use Scalar::Util qw(blessed);
use Class::Trigger;
use Carp qw/carp confess/;
use MongoDBx::Tiny::Util;
use Params::Validate;
use overload
'""' => \&id,
'fallback' => 1;
sub import {
my $class = shift || __PACKAGE__;
my $caller = (caller(0))[0];
{
no strict 'refs';
push @{"${caller}::ISA"}, $class;
}
strict->import;
warnings->import;
__PACKAGE__->export_to_level(1, @_);
if (__PACKAGE__ ne $class) {
$class->export_to_level(1,@_);
}
}
=head1 EXPORT
A list of functions that can be exported.
=head2 COLLECTION_NAME
# define collection name.
COLLECTION_NAME 'collection_name';
=head2 ESSENTIAL
# define essential field always fetched.
ESSENTIAL qw/field1 field2 field3/;
=head2 FIELD
# define field name and validation.
FIELD 'field_name', CODE, CODE;
=head2 RELATION
RELATION 'relation_name', RELATION_NAME;
sub RELATION_NAME {
my $self = shift;
my $c_name = shift; # relation
my $tiny = $self->tiny;
# xxx
}
=head2 TRIGGER
[EXPERIMENTAL]
TRIGGER 'phase', CODE;
=head2 QUERY_ATTRIBUTES
[EXPERIMENTAL]
QUERY_ATTRIBUTES {
# no support in update and delete
single => { del_flag => "off" },
search => { del_flag => "off" }
};
TODO: no_query option for condition
=head2 INDEX
[EXPERIMENTAL]
INDEX 'field_1';
( run in 3.029 seconds using v1.01-cache-2.11-cpan-0d23b851a93 )