From 38e2e091dc35e3fb3f8e490915a5d49675ee9eff Mon Sep 17 00:00:00 2001 From: Graham Knop Date: Tue, 2 Mar 2010 18:31:16 -0600 Subject: [PATCH] apply correct roles/metaroles to roles --- lib/WebGUI/Definition.pm | 33 ++++++++++++++++++++++----------- lib/WebGUI/Definition/Asset.pm | 34 ++++++++++++++++++++++------------ 2 files changed, 44 insertions(+), 23 deletions(-) diff --git a/lib/WebGUI/Definition.pm b/lib/WebGUI/Definition.pm index 70bb33928..6734d883e 100644 --- a/lib/WebGUI/Definition.pm +++ b/lib/WebGUI/Definition.pm @@ -74,17 +74,28 @@ sub init_meta { my $class = shift; my %args = @_; - Moose::Util::MetaRole::apply_base_class_roles( - for => $args{for_class}, - roles => [ 'WebGUI::Definition::Role::Object' ], - ); - Moose::Util::MetaRole::apply_metaroles( - for => $args{for_class}, - class_metaroles => { - class => ['WebGUI::Definition::Meta::Class'], - }, - ); - return $args{for_class}->meta; + my $for_class = $args{for_class}; + if ($for_class->meta->isa('Moose::Meta::Class')) { + Moose::Util::MetaRole::apply_base_class_roles( + for => $for_class, + roles => [ 'WebGUI::Definition::Role::Object' ], + ); + Moose::Util::MetaRole::apply_metaroles( + for => $for_class, + class_metaroles => { + class => ['WebGUI::Definition::Meta::Class'], + }, + ); + } + else { + Moose::Util::MetaRole::apply_metaroles( + for => $for_class, + role_metaroles => { + role => ['WebGUI::Definition::Meta::Class'], + }, + ); + } + return $for_class->meta; } #------------------------------------------------------------------- diff --git a/lib/WebGUI/Definition/Asset.pm b/lib/WebGUI/Definition/Asset.pm index 8d9807e49..cd82902f1 100644 --- a/lib/WebGUI/Definition/Asset.pm +++ b/lib/WebGUI/Definition/Asset.pm @@ -76,18 +76,28 @@ sub import { sub init_meta { my $class = shift; my %args = @_; - - Moose::Util::MetaRole::apply_base_class_roles( - for => $args{for_class}, - roles => [ 'WebGUI::Definition::Role::Asset' ], - ); - Moose::Util::MetaRole::apply_metaroles( - for => $args{for_class}, - class_metaroles => { - class => ['WebGUI::Definition::Meta::Asset'], - }, - ); - return $args{for_class}->meta; + my $for_class = $args{for_class}; + if ($for_class->meta->isa('Moose::Meta::Class')) { + Moose::Util::MetaRole::apply_base_class_roles( + for => $for_class, + roles => [ 'WebGUI::Definition::Role::Asset' ], + ); + Moose::Util::MetaRole::apply_metaroles( + for => $for_class, + class_metaroles => { + class => ['WebGUI::Definition::Meta::Asset'], + }, + ); + } + else { + Moose::Util::MetaRole::apply_metaroles( + for => $for_class, + role_metaroles => { + role => ['WebGUI::Definition::Meta::Asset'], + }, + ); + } + return $for_class->meta; } 1;