additional docs
[gitmo/MooseX-MetaDescription.git] / lib / MooseX / MetaDescription / Meta / Trait.pm
index 1c92218..11ccb01 100644 (file)
@@ -14,6 +14,7 @@ has 'description' => (
 has 'metadescription_classname' => (
     is      => 'ro',
     isa     => 'Str', 
+    lazy    => 1,  
     default => sub {
         'MooseX::MetaDescription::Description'
     }  
@@ -25,10 +26,20 @@ has 'metadescription' => (
     lazy    => 1,   
     default => sub {
         my $self = shift;
-        $self->metadescription_classname->new(
-            %{ $self->description },
-            descriptor => $self,
-        )
+        
+        my $metadesc_class = $self->metadescription_classname;
+        my $desc           = $self->description;
+        
+        if (my $traits = delete $desc->{traits}) {
+            my $meta = Moose::Meta::Class->create_anon_class(
+                superclasses => [ $metadesc_class ],
+                roles        => $traits,
+            );
+            $meta->add_method('meta' => sub { $meta });
+            $metadesc_class = $meta->name;
+        }
+        
+        return $metadesc_class->new(%$desc, descriptor => $self);
     },
 );
 
@@ -40,19 +51,22 @@ __END__
 
 =head1 NAME
 
-MooseX::MetaDescription::Meta::Trait - A Moosey solution to this problem
-
-=head1 SYNOPSIS
-
-  use MooseX::MetaDescription::Meta::Trait;
+MooseX::MetaDescription::Meta::Trait - Custom class meta-trait for meta-descriptions
 
 =head1 DESCRIPTION
 
+Nothing worth saying yet actually, mostly internal usage only. See the 
+SYNPOSIS in L<MooseX::MetaDescription> for an example of usage.
+
 =head1 METHODS 
 
 =over 4
 
-=item B<>
+=item B<description>
+
+=item B<metadescription_classname>
+
+=item B<metadescription>
 
 =back