Ambrosia

 view release on metacpan or  search on metacpan

lib/Ambrosia/EntityDataModel.pm  view on Meta::CPAN

package Ambrosia::EntityDataModel;
use strict;
use warnings;

use Ambrosia::Assert;
use Ambrosia::core::Nil;
use Ambrosia::error::Exceptions;
use Ambrosia::QL;
use Ambrosia::Utils::Util qw/pare_list/;
use Ambrosia::DataProvider;

use Ambrosia::Utils::Enumeration property => _state => NEW => 0, LOADED => 1, UPDATED => 2, SAVED => 3;
#NEW      Новый объект. Информация в storage не отправлялась.
#LOADED   Объект прочитан из storage.
#UPDATED  Объект взят из хранилища и изменен.
#SAVED    Информация об объекте сохранена в storage.

use Ambrosia::Meta;
class abstract
{
    private => [qw/_state/],
};

our $VERSION = 0.010;

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

sub _map() { return shift->__AMBROSIA_ALIAS_FIELDS__ || {} }

sub _init
{
    my $self = shift;
    $self->SUPER::_init(@_);
    if ( $self->key_value() )
    {
        $self->SET_LOADED;
    }
    else
    {
        $self->SET_NEW;
    }
}

################################################################################
#  statics
################################################################################
sub handler
{
    storage()->driver($_[0]->driver_type(), $_[0]->source_name())->handler()
}

sub driver_type
{
    return 'DBI';
}

sub source_name
{
}

sub table
{
}

sub source_path
{
    my $driver = storage()->driver($_[0]->driver_type(), $_[0]->source_name());
    return $driver->catalog, $driver->schema, $_[0]->table();
}

#Редактируемые поля (сохраняемые в БД). По умолчанию все public поля класса
#Edited fields (storage in Data Source). Default all publick fields of class.
sub edit_fields
{
    return $_[0]->fields();
}

sub fields_mapping()
{
    my $proto = shift;
    return map { $proto->_map->{$_} || $_ } $proto->edit_fields();
}

#Возвращает имя ключа класса.
#Соответствует автоинкрементному полю в БД.
#Если поле не автоинкрементное используем key
sub primary_key
{
}

#Сотставной ключ
#Поведение по-умолчанию. Может быть переопределено в дочернем классе.
sub key



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