UR::Object::Inheritance


UR documentation Contained in the UR distribution.

Index


Code Index:

use UR;

UR::Object::Type->define( class_name => 'UR::Object::Inheritance', english_name => 'type is a', id_properties => [qw/type_name parent_type_name/], properties => [ parent_type_name => { type => 'VARCHAR2', len => 64 }, type_name => { type => 'VARCHAR2', len => 64 }, class_name => { type => 'VARCHAR2', len => 64 }, inheritance_priority => { type => 'NUMBER', len => 2 }, parent_class_name => { type => 'VARCHAR2', len => 64 }, ], );


UR documentation Contained in the UR distribution.

package UR::Object::Inheritance;

use warnings;
use strict;

sub create {
    my $class = shift;
    my %params = $class->preprocess_params(@_);

    my $class_object;
    if (!$params{type_name}) {
        if (my $class_name = $params{class_name}) {
            $class_object = UR::Object::Type->get(class_name => $class_name);
            unless ($class_object) {
                Carp::confess("Failed to find a class object for class $class_name!");
            }
            $params{type_name} = $class_object->type_name;
        }
        else {
            Carp::confess("Missing type_name!");
        }
    }
    if (!$params{parent_type_name}) {
        if (my $parent_class_name = $params{parent_class_name}) {
            my $parent_class_object = UR::Object::Type->get(class_name => $parent_class_name);
            unless ($parent_class_object) {
                Carp::confess("Failed to find a class object for class $parent_class_name!");
            }
            $params{parent_type_name} = $parent_class_object->type_name;
        }
        else {
            Carp::confess("Missing type_name!");
        }
    }
    $class->SUPER::create(%params);
}

1;