1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145
|
package MongoDBx::Class::Cursor;
# ABSTRACT: A MongoDBx::Class cursor/iterator object for query results
our $VERSION = "1.030002";
$VERSION = eval $VERSION;
use Moose;
use namespace::autoclean;
use version;
extends 'MongoDB::Cursor';
=head1 NAME
MongoDBx::Class::Cursor - A MongoDBx::Class cursor/iterator object for query results
=head1 VERSION
version 1.030002
=head1 EXTENDS
L<MongoDB::Cursor>
=head1 SYNOPSIS
my $cursor = $coll->find({ author => 'Conan Doyle' });
print "Novels by Arthur Conan Doyle:\n";
foreach ($cursor->sort({ year => 1 })->all) {
print $_->title, '( ', $_->year, ")\n";
}
=head1 DESCRIPTION
MongoDBx::Class::Cursor extends L<MongoDB::Cursor>. At its basis, it
adds automatic document expansion when traversing cursor results.
=head1 ATTRIBUTES
No special attributes are added.
=head1 OBJECT METHODS
Aside from methods provided by L<MongoDB::Cursor>, the following method
modifications are performed:
=head2 next( [ $do_not_expand ] )
Returns the next document in the cursor, if any. Automatically expands that
document to the appropriate class (if '_class' attribute exists, otherwise
document is returned as is). If C<$do_not_expand> is true, the document
will not be expanded and simply returned as is (i.e. as a hash-ref).
=cut
around 'next' => sub {
my ($orig, $self, $do_not_expand) = (shift, shift);
my $doc = $self->$orig || return;
return $do_not_expand ? $doc : $self->_connection->expand($self->_ns, $doc);
};
=head2 sort( $rules )
Adds a sort to the cursor and returns the cursor itself for chaining.
C<$rules> can either be an unordered hash-ref, an ordered L<Tie::IxHash>
object, or an ordered array reference such as this:
$cursor->sort([ date => -1, time => -1, subject => 1 ])
=cut
around 'sort' => sub {
my ($orig, $self, $rules) = @_;
if (ref $rules eq 'ARRAY') {
return $self->$orig(Tie::IxHash->new(@$rules));
} else {
return $self->$orig($rules);
}
};
sub _connection {
version->parse($MongoDB::VERSION) < v0.502.0 ? $_[0]->SUPER::_connection : $_[0]->_client;
}
=head1 AUTHOR
Ido Perlmuter, C<< <ido at ido50.net> >>
=head1 BUGS
Please report any bugs or feature requests to C<bug-mongodbx-class at rt.cpan.org>, or through
the web interface at L<http://rt.cpan.org/NoAuth/ReportBug.html?Queue=MongoDBx-Class>. I will be notified, and then you'll
automatically be notified of progress on your bug as I make changes.
=head1 SUPPORT
You can find documentation for this module with the perldoc command.
perldoc MongoDBx::Class::Cursor
You can also look for information at:
=over 4
=item * RT: CPAN's request tracker
L<http://rt.cpan.org/NoAuth/Bugs.html?Dist=MongoDBx::Class>
=item * AnnoCPAN: Annotated CPAN documentation
L<http://annocpan.org/dist/MongoDBx::Class>
=item * CPAN Ratings
L<http://cpanratings.perl.org/d/MongoDBx::Class>
=item * Search CPAN
L<http://search.cpan.org/dist/MongoDBx::Class/>
=back
=head1 SEE ALSO
L<MongoDBx::Class::Collection>, L<MongoDB::Cursor>.
=head1 LICENSE AND COPYRIGHT
Copyright 2010-2014 Ido Perlmuter.
This program is free software; you can redistribute it and/or modify it
under the terms of either: the GNU General Public License as published
by the Free Software Foundation; or the Artistic License.
See http://dev.perl.org/licenses/ for more information.
=cut
__PACKAGE__->meta->make_immutable;
|