OpenERP-OOM
view release on metacpan or search on metacpan
lib/OpenERP/OOM/Schema.pm view on Meta::CPAN
This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself.
=cut
use 5.010;
use Moose;
use OpenERP::XMLRPC::Client;
with 'OpenERP::OOM::DynamicUtils';
with 'OpenERP::OOM::Link::Provider';
has 'openerp_connect' => (
isa => 'HashRef',
is => 'ro',
);
has 'link_config' => (
isa => 'HashRef',
is => 'ro',
);
has link_provider => (
isa => 'OpenERP::OOM::Link::Provider',
is => 'ro',
lazy_build => 1,
);
has 'client' => (
isa => 'OpenERP::XMLRPC::Client',
is => 'ro',
lazy => 1,
builder => '_build_client',
);
has lang => (
isa => 'Str',
is => 'ro',
default => 'en_GB',
);
sub _build_link_provider
{
# we are also a link provider
# so use that if one isn't provided.
my $self = shift;
return $self;
}
#-------------------------------------------------------------------------------
sub _build_client {
my $self = shift;
die 'Your config file has not been loaded or wired up correctly.' unless $self->openerp_connect;
return OpenERP::XMLRPC::Client->new(%{$self->openerp_connect});
}
#-------------------------------------------------------------------------------
has _class_cache => (is => 'ro', isa => 'HashRef', default => sub { {} } );
sub class {
my ($self, $class) = @_;
if(exists $self->_class_cache->{$class})
{
return $self->_class_cache->{$class};
}
my $package = $self->meta->name . "::Class::$class";
my $object_package = $self->meta->name . "::Object::$class";
$self->ensure_class_loaded($package);
$self->ensure_class_loaded($object_package);
$self->_class_cache->{$class} = $package->new(
schema => $self,
);
return $self->_class_cache->{$class};
}
#-------------------------------------------------------------------------------
sub link
{
my ($self, $class) = @_;
return $self->link_provider->provide_link($class);
}
sub provide_link {
my ($self, $class) = @_;
my $package = ($class =~ /^\+/) ? $class : "OpenERP::OOM::Link::$class";
$self->ensure_class_loaded($package);
return $package->new(
schema => $self,
config => $self->link_config->{$class},
);
}
sub timeout {
my $self = shift;
return $self->client->openerp_rpc->timeout(@_);
}
1;
( run in 3.086 seconds using v1.01-cache-2.11-cpan-97f6503c9c8 )