The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
package ObjectDB::Factory;

use strict;
use warnings;

our $VERSION = '3.18';

require Carp;
use ObjectDB::Util qw(load_class);

sub new {
    my $class = shift;

    my $self = {};
    bless $self, $class;

    return $self;
}

sub namespace { Carp::croak('implement') }

sub build {
    my $self   = shift;
    my $type   = shift;
    my %params = @_;

    Carp::croak('type is required') unless $type;

    my @parts = map { ucfirst } split q{ }, $type;
    my $rel_class = $self->namespace . join q{}, @parts;

    load_class $rel_class;

    return $rel_class->new(%params);
}

1;