Ambrosia

 view release on metacpan or  search on metacpan

lib/Ambrosia/DataProvider/ResourceDriver.pm  view on Meta::CPAN

package Ambrosia::DataProvider::ResourceDriver;
use strict;
use warnings;

use Ambrosia::core::Nil;
use Ambrosia::Meta;
class
{
    extends   => [qw/Ambrosia::DataProvider::BaseDriver/],
    private   => [qw/__start/],
};

sub _init
{
    my $self = shift;
    $self->SUPER::_init(@_);
    $self->_cache = new Ambrosia::core::Nil();
}

our $VERSION = 0.010;

sub reset
{
    my $self = shift;
    $self->SUPER::reset();
    $self->__start = 0;
    return $self;
}

################################################################################

sub begin_transaction
{
}

sub save_transaction
{
}

sub cancel_transaction
{
}

################################################################################

sub predicate
{
    my $self = shift;
    my ($f, $op, $v) = @_;

    my $old = $self->_cql_query->[&Ambrosia::DataProvider::BaseDriver::PREDICATE] || sub {1};
    $self->_cql_query->[&Ambrosia::DataProvider::BaseDriver::PREDICATE] = {
        '=' => sub {
            my $h = shift;
            $old->($h) && $h->{$f} eq $v
        },
        '<' => sub {
            my $h = shift;
            $old->($h) && $h->{$f} lt $v
        },
        '<=' => sub {
            my $h = shift;
            $old->($h) && $h->{$f} le $v
        },
        '>' => sub {
            my $h = shift;
            $old->($h) && $h->{$f} gt $v
        },
        '>=' => sub {
            my $h = shift;
            $old->($h) && $h->{$f} ge $v
        },
        '!=' => sub {
            my $h = shift;
            $old->($h) && $h->{$f} ne $v
        },
        'like' => sub {
            my $h = shift;
            $old->($h) && $h->{$f} =~ /$v/
        },
    }->{lc($op)};

    return $self;
}



( run in 0.800 second using v1.01-cache-2.11-cpan-5b529ec07f3 )