Eixo-Queue
view release on metacpan or search on metacpan
lib/Eixo/Queue/MongoDriver.pm view on Meta::CPAN
package Eixo::Queue::MongoDriver;
use strict;
use MongoDB;
use Eixo::Base::Clase;
use Eixo::Queue::Job;
has(
db=>undef,
collection=>undef,
host=>'localhost',
port=>27017,
__connection=>undef,
);
sub addJob{
my ($self, $job, $collection) = @_;
unless($job->isa('Eixo::Queue::Job')){
die(ref($self) . '::addJob: an Eixo::Queue::Job was expected');
}
$self->getCollection($collection)->insert_one({
_id => $job->id,
%{$job->to_hash}
});
}
sub updateJob{
my ($self, $job, $collection) = @_;
$self->getCollection($collection)->update(
{_id=>$job->id} ,
$job->to_hash
);
}
sub getJob{
my ($self, $id, $collection, $class) = @_;
my $method = ($class) ? "__formatClass" : "__format";
$self->$method(
[
$self->getCollection($collection)->find({
_id=>$id
})->next
],
$class
);
}
sub find{
my ($self, $query, $sort, $collection, $class) = @_;
my $method = ($class) ? "__formatClass" : "__format";
$self->$method(
[
$self->getCollection($collection)
->find($query)
->sort($sort)
->all
],
$class
);
}
sub getPendingJob{
my ($self, %args) = @_;
my $query = {
status=>"WAITING"
};
$query->{queue} = $args{queue} if(defined $args{queue});
( run in 0.435 second using v1.01-cache-2.11-cpan-524268b4103 )