0.02
[gitmo/MooseX-MetaDescription.git] / lib / MooseX / MetaDescription / Meta / Class.pm
index 3e0395c..5d1e2cc 100644 (file)
@@ -1,35 +1,26 @@
 package MooseX::MetaDescription::Meta::Class;
 use Moose;
 
-use MooseX::MetaDescription::Description::Class;
-
-our $VERSION   = '0.01';
+our $VERSION   = '0.02';
 our $AUTHORITY = 'cpan:STEVAN';
 
 extends 'Moose::Meta::Class';
-
-has 'description' => (
-    is      => 'ro',
-    isa     => 'HashRef',
-    lazy    => 1,   
-    default => sub { +{} },
-);
-
-has 'metadescription' => (
-    is      => 'ro',
-    isa     => 'MooseX::MetaDescription::Description',
-    lazy    => 1,   
-    default => sub {
-        my $self = shift;
-        
-        # TODO: handle traits ...
-        
-        MooseX::MetaDescription::Description::Class->new(
-            %{$self->description},
-            class => $self,
-        )
-    },
-);
+   with 'MooseX::MetaDescription::Meta::Trait';
+   
+has '+description' => (
+   default => sub {
+       my $self   = shift;
+       my @supers = $self->linearized_isa;
+       shift @supers;
+       my %desc;
+       foreach my $super (@supers) {
+            if ($super->meta->isa('MooseX::MetaDescription::Meta::Class')) {
+                %desc = (%{ $super->meta->description }, %desc)
+            }
+       }
+       \%desc;
+   },
+);   
 
 no Moose; 1;
 
@@ -39,25 +30,76 @@ __END__
 
 =head1 NAME
 
-MooseX::MetaDescription::Meta::Class - A Moosey solution to this problem
+MooseX::MetaDescription::Meta::Class - Custom class metaclass for meta-descriptions
 
 =head1 SYNOPSIS
 
-  use MooseX::MetaDescription::Meta::Class;
+  package Foo;
+  use metaclass 'MooseX::MetaDescription::Meta::Class' => (
+      description => {
+          'Hello' => 'World',
+      }
+  );
+  use Moose;
+  
+  package Bar;
+  use Moose;
+  
+  extends 'Foo';
+  
+  # always add it *after* the extends
+  __PACKAGE__->meta->description->{'Hello'} = 'Earth';
+  
+  package Baz;
+  use Moose;
+  
+  extends 'Bar';
+  
+  package Gorch;
+  use metaclass 'MooseX::MetaDescription::Meta::Class' => (
+      description => {
+          'Hello' => 'World'
+      }
+  );    
+  use Moose;
+
+  extends 'Baz';  
+
+  # ...
+  
+  Foo->meta->description # { 'Hello' => 'World', 'World' => 'Hello' }
+  Bar->meta->description # { 'Hello' => 'Earth', 'World' => 'Hello' } # change one, inherit the other  
+  Baz->meta->description # { 'Hello' => 'Earth', 'World' => 'Hello' } # inherit both 
+  Gorch->meta->description # { 'Hello' => 'World' } # overrides all, no inheritance   
 
 =head1 DESCRIPTION
 
+This module provides the custom metaclass to add Meta Descriptions 
+to your classes. It provides a limited degree of inheritance of 
+meta-descriptions, the details of which are shown above in the 
+SYNOPSIS section.
+
 =head1 METHODS 
 
+NOTE: these are methods composed into this class from 
+L<MooseX::MetaDescription::Meta::Trait> refer to that 
+module for the complete description.
+
 =over 4
 
-=item B<>
+=item B<description>
+
+=item B<metadescription_classname>
+
+=item B<metadescription>
+
+=item B<meta>
 
 =back
 
 =head1 BUGS
 
-All complex software has bugs lurking in it, and this module is no 
+All complex software has bugs lurking in it, and this module is no
 exception. If you find a bug please either email me, or add the bug
 to cpan-RT.