has +name from role officially supported
[gitmo/Moose.git] / lib / Moose.pm
1
2 package Moose;
3
4 use strict;
5 use warnings;
6
7 our $VERSION   = '0.39';
8 our $AUTHORITY = 'cpan:STEVAN';
9
10 use Scalar::Util 'blessed', 'reftype';
11 use Carp         'confess';
12 use Sub::Name    'subname';
13
14 use Sub::Exporter;
15
16 use Class::MOP 0.51;
17
18 use Moose::Meta::Class;
19 use Moose::Meta::TypeConstraint;
20 use Moose::Meta::TypeConstraint::Class;
21 use Moose::Meta::TypeCoercion;
22 use Moose::Meta::Attribute;
23 use Moose::Meta::Instance;
24
25 use Moose::Meta::Role;
26
27 use Moose::Object;
28 use Moose::Util::TypeConstraints;
29 use Moose::Util ();
30
31 {
32     my $CALLER;
33
34     sub init_meta {
35         my ( $class, $base_class, $metaclass ) = @_;
36         $base_class = 'Moose::Object'      unless defined $base_class;
37         $metaclass  = 'Moose::Meta::Class' unless defined $metaclass;
38
39         confess
40             "The Metaclass $metaclass must be a subclass of Moose::Meta::Class."
41             unless $metaclass->isa('Moose::Meta::Class');
42
43         # make a subtype for each Moose class
44         class_type($class)
45             unless find_type_constraint($class);
46
47         my $meta;
48         if ( $class->can('meta') ) {
49             # NOTE:
50             # this is the case where the metaclass pragma
51             # was used before the 'use Moose' statement to
52             # override a specific class
53             $meta = $class->meta();
54             ( blessed($meta) && $meta->isa('Moose::Meta::Class') )
55               || confess "You already have a &meta function, but it does not return a Moose::Meta::Class";
56         }
57         else {
58             # NOTE:
59             # this is broken currently, we actually need
60             # to allow the possiblity of an inherited
61             # meta, which will not be visible until the
62             # user 'extends' first. This needs to have
63             # more intelligence to it
64             $meta = $metaclass->initialize($class);
65             $meta->add_method(
66                 'meta' => sub {
67                     # re-initialize so it inherits properly
68                     $metaclass->initialize( blessed( $_[0] ) || $_[0] );
69                 }
70             );
71         }
72
73         # make sure they inherit from Moose::Object
74         $meta->superclasses($base_class)
75           unless $meta->superclasses();
76          
77         return $meta;
78     }
79
80     my %exports = (
81         extends => sub {
82             my $class = $CALLER;
83             return subname 'Moose::extends' => sub (@) {
84                 confess "Must derive at least one class" unless @_;
85                 Class::MOP::load_class($_) for @_;
86
87                 # this checks the metaclass to make sure
88                 # it is correct, sometimes it can get out
89                 # of sync when the classes are being built
90                 my $meta = $class->meta->_fix_metaclass_incompatability(@_);
91                 $meta->superclasses(@_);
92             };
93         },
94         with => sub {
95             my $class = $CALLER;
96             return subname 'Moose::with' => sub (@) {
97                 Moose::Util::apply_all_roles($class->meta, @_)
98             };
99         },
100         has => sub {
101             my $class = $CALLER;
102             return subname 'Moose::has' => sub ($;%) {
103                 my $name    = shift;
104                 die 'Usage: has \'name\' => ( key => value, ... )' if @_ == 1;
105                 my %options = @_;
106                 my $attrs = ( ref($name) eq 'ARRAY' ) ? $name : [ ($name) ];
107                 $class->meta->add_attribute( $_, %options ) for @$attrs;
108             };
109         },
110         before => sub {
111             my $class = $CALLER;
112             return subname 'Moose::before' => sub (@&) {
113                 my $code = pop @_;
114                 my $meta = $class->meta;
115                 $meta->add_before_method_modifier( $_, $code ) for @_;
116             };
117         },
118         after => sub {
119             my $class = $CALLER;
120             return subname 'Moose::after' => sub (@&) {
121                 my $code = pop @_;
122                 my $meta = $class->meta;
123                 $meta->add_after_method_modifier( $_, $code ) for @_;
124             };
125         },
126         around => sub {
127             my $class = $CALLER;
128             return subname 'Moose::around' => sub (@&) {
129                 my $code = pop @_;
130                 my $meta = $class->meta;
131                 $meta->add_around_method_modifier( $_, $code ) for @_;
132             };
133         },
134         super => sub {
135             {
136                 our %SUPER_SLOT;
137                 no strict 'refs';
138                 $SUPER_SLOT{$CALLER} = \*{"${CALLER}::super"};
139             }
140             return subname 'Moose::super' => sub { };
141         },
142         override => sub {
143             my $class = $CALLER;
144             return subname 'Moose::override' => sub ($&) {
145                 my ( $name, $method ) = @_;
146                 $class->meta->add_override_method_modifier( $name => $method );
147             };
148         },
149         inner => sub {
150             {
151                 our %INNER_SLOT;
152                 no strict 'refs';
153                 $INNER_SLOT{$CALLER} = \*{"${CALLER}::inner"};
154             }
155             return subname 'Moose::inner' => sub { };
156         },
157         augment => sub {
158             my $class = $CALLER;
159             return subname 'Moose::augment' => sub (@&) {
160                 my ( $name, $method ) = @_;
161                 $class->meta->add_augment_method_modifier( $name => $method );
162             };
163         },
164         make_immutable => sub {
165             my $class = $CALLER;
166             return subname 'Moose::make_immutable' => sub {
167                 $class->meta->make_immutable(@_);
168             };            
169         },        
170         confess => sub {
171             return \&Carp::confess;
172         },
173         blessed => sub {
174             return \&Scalar::Util::blessed;
175         },
176     );
177
178     my $exporter = Sub::Exporter::build_exporter(
179         {
180             exports => \%exports,
181             groups  => { default => [':all'] }
182         }
183     );
184
185     # 1 extra level because it's called by import so there's a layer of indirection
186     sub _get_caller{
187         my $offset = 1;
188         return
189             ref $_[1] && defined $_[1]->{into}
190             ? $_[1]->{into}
191             : ref $_[1] && defined $_[1]->{into_level}
192             ? caller($offset + $_[1]->{into_level})
193             : caller($offset);
194     }
195
196     sub import {
197         $CALLER = _get_caller(@_);
198
199         # this works because both pragmas set $^H (see perldoc perlvar)
200         # which affects the current compilation - i.e. the file who use'd
201         # us - which is why we don't need to do anything special to make
202         # it affect that file rather than this one (which is already compiled)
203
204         strict->import;
205         warnings->import;
206
207         # we should never export to main
208         return if $CALLER eq 'main';
209
210         init_meta( $CALLER, 'Moose::Object' );
211
212         goto $exporter;
213     }
214
215     sub unimport {
216         no strict 'refs';
217         my $class = _get_caller(@_);
218
219         # loop through the exports ...
220         foreach my $name ( keys %exports ) {
221
222             # if we find one ...
223             if ( defined &{ $class . '::' . $name } ) {
224                 my $keyword = \&{ $class . '::' . $name };
225
226                 # make sure it is from Moose
227                 my ($pkg_name) = Class::MOP::get_code_info($keyword);
228                 next if $@;
229                 next if $pkg_name ne 'Moose';
230
231                 # and if it is from Moose then undef the slot
232                 delete ${ $class . '::' }{$name};
233             }
234         }
235     }
236
237 }
238
239 ## make 'em all immutable
240
241 $_->meta->make_immutable(
242     inline_constructor => 0,
243     inline_accessors   => 1,  # these are Class::MOP accessors, so they need inlining
244   )
245   for (
246     'Moose::Meta::Attribute',
247     'Moose::Meta::Class',
248     'Moose::Meta::Instance',
249
250     'Moose::Meta::TypeConstraint',
251     'Moose::Meta::TypeConstraint::Union',
252     'Moose::Meta::TypeConstraint::Parameterized',
253     'Moose::Meta::TypeCoercion',
254
255     'Moose::Meta::Method',
256     'Moose::Meta::Method::Accessor',
257     'Moose::Meta::Method::Constructor',
258     'Moose::Meta::Method::Destructor',
259     'Moose::Meta::Method::Overriden',
260
261     'Moose::Meta::Role',
262     'Moose::Meta::Role::Method',
263     'Moose::Meta::Role::Method::Required',
264   );
265
266 1;
267
268 __END__
269
270 =pod
271
272 =head1 NAME
273
274 Moose - A postmodern object system for Perl 5
275
276 =head1 SYNOPSIS
277
278   package Point;
279   use Moose; # automatically turns on strict and warnings
280
281   has 'x' => (is => 'rw', isa => 'Int');
282   has 'y' => (is => 'rw', isa => 'Int');
283
284   sub clear {
285       my $self = shift;
286       $self->x(0);
287       $self->y(0);
288   }
289
290   package Point3D;
291   use Moose;
292
293   extends 'Point';
294
295   has 'z' => (is => 'rw', isa => 'Int');
296
297   after 'clear' => sub {
298       my $self = shift;
299       $self->z(0);
300   };
301
302 =head1 DESCRIPTION
303
304 Moose is an extension of the Perl 5 object system.
305
306 =head2 Another object system!?!?
307
308 Yes, I know there has been an explosion recently of new ways to
309 build object's in Perl 5, most of them based on inside-out objects
310 and other such things. Moose is different because it is not a new
311 object system for Perl 5, but instead an extension of the existing
312 object system.
313
314 Moose is built on top of L<Class::MOP>, which is a metaclass system
315 for Perl 5. This means that Moose not only makes building normal
316 Perl 5 objects better, but it also provides the power of metaclass
317 programming.
318
319 =head2 Is this for real? Or is this just an experiment?
320
321 Moose is I<based> on the prototypes and experiments I did for the Perl 6
322 meta-model. However, Moose is B<NOT> an experiment/prototype; it is for B<real>.
323
324 =head2 Is this ready for use in production?
325
326 Yes, I believe that it is.
327
328 Moose has been used successfully in production environemnts by several people
329 and companies (including the one I work for). There are Moose applications
330 which have been in production with little or no issue now for well over a year.
331 I consider it highly stable and we are commited to keeping it stable.
332
333 Of course, in the end, you need to make this call yourself. If you have
334 any questions or concerns, please feel free to email me, or even the list
335 or just stop by #moose and ask away.
336
337 =head2 Is Moose just Perl 6 in Perl 5?
338
339 No. While Moose is very much inspired by Perl 6, it is not itself Perl 6.
340 Instead, it is an OO system for Perl 5. I built Moose because I was tired of
341 writing the same old boring Perl 5 OO code, and drooling over Perl 6 OO. So
342 instead of switching to Ruby, I wrote Moose :)
343
344 =head2 Wait, I<post> modern, I thought it was just I<modern>?
345
346 So I was reading Larry Wall's talk from the 1999 Linux World entitled 
347 "Perl, the first postmodern computer language" in which he talks about how 
348 he picked the features for Perl because he thought they were cool and he 
349 threw out the ones that he thought sucked. This got me thinking about how 
350 we have done the same thing in Moose. For Moose, we have "borrowed" features 
351 from Perl 6, CLOS (LISP), Smalltalk, Java, BETA, OCaml, Ruby and more, and 
352 the bits we didn't like (cause they sucked) we tossed aside. So for this 
353 reason (and a few others) I have re-dubbed Moose a I<postmodern> object system.
354
355 Nuff Said. 
356
357 =head2 Moose Extensions
358
359 The L<MooseX::> namespace is the official place to find Moose extensions.
360 There are a number of these modules out on CPAN right now the best way to
361 find them is to search for MooseX:: on search.cpan.org.
362
363 =head1 BUILDING CLASSES WITH MOOSE
364
365 Moose makes every attempt to provide as much convenience as possible during
366 class construction/definition, but still stay out of your way if you want it
367 to. Here are a few items to note when building classes with Moose.
368
369 Unless specified with C<extends>, any class which uses Moose will
370 inherit from L<Moose::Object>.
371
372 Moose will also manage all attributes (including inherited ones) that are
373 defined with C<has>. And (assuming you call C<new>, which is inherited from
374 L<Moose::Object>) this includes properly initializing all instance slots,
375 setting defaults where appropriate, and performing any type constraint checking
376 or coercion.
377
378 =head1 EXPORTED FUNCTIONS
379
380 Moose will export a number of functions into the class's namespace which
381 may then be used to set up the class. These functions all work directly
382 on the current class.
383
384 =over 4
385
386 =item B<meta>
387
388 This is a method which provides access to the current class's metaclass.
389
390 =item B<extends (@superclasses)>
391
392 This function will set the superclass(es) for the current class.
393
394 This approach is recommended instead of C<use base>, because C<use base>
395 actually C<push>es onto the class's C<@ISA>, whereas C<extends> will
396 replace it. This is important to ensure that classes which do not have
397 superclasses still properly inherit from L<Moose::Object>.
398
399 =item B<with (@roles)>
400
401 This will apply a given set of C<@roles> to the local class. Role support
402 is currently under heavy development; see L<Moose::Role> for more details.
403
404 =item B<has $name =E<gt> %options>
405
406 This will install an attribute of a given C<$name> into the current class.
407 The C<%options> are the same as those provided by
408 L<Class::MOP::Attribute>, in addition to the list below which are provided
409 by Moose (L<Moose::Meta::Attribute> to be more specific):
410
411 =over 4
412
413 =item I<is =E<gt> 'rw'|'ro'>
414
415 The I<is> option accepts either I<rw> (for read/write) or I<ro> (for read
416 only). These will create either a read/write accessor or a read-only
417 accessor respectively, using the same name as the C<$name> of the attribute.
418
419 If you need more control over how your accessors are named, you can use the
420 I<reader>, I<writer> and I<accessor> options inherited from
421 L<Class::MOP::Attribute>.
422
423 =item I<isa =E<gt> $type_name>
424
425 The I<isa> option uses Moose's type constraint facilities to set up runtime
426 type checking for this attribute. Moose will perform the checks during class
427 construction, and within any accessors. The C<$type_name> argument must be a
428 string. The string may be either a class name or a type defined using
429 Moose's type definition features. (Refer to L<Moose::Util::TypeConstraints>
430 for information on how to define a new type, and how to retrieve type meta-data).
431
432 =item I<coerce =E<gt> (1|0)>
433
434 This will attempt to use coercion with the supplied type constraint to change
435 the value passed into any accessors or constructors. You B<must> have supplied
436 a type constraint in order for this to work. See L<Moose::Cookbook::Recipe5>
437 for an example.
438
439 =item I<does =E<gt> $role_name>
440
441 This will accept the name of a role which the value stored in this attribute
442 is expected to have consumed.
443
444 =item I<required =E<gt> (1|0)>
445
446 This marks the attribute as being required. This means a I<defined> value must be
447 supplied during class construction, and the attribute may never be set to
448 C<undef> with an accessor.
449
450 =item I<weak_ref =E<gt> (1|0)>
451
452 This will tell the class to store the value of this attribute as a weakened
453 reference. If an attribute is a weakened reference, it B<cannot> also be
454 coerced.
455
456 =item I<lazy =E<gt> (1|0)>
457
458 This will tell the class to not create this slot until absolutely necessary.
459 If an attribute is marked as lazy it B<must> have a default supplied.
460
461 =item I<auto_deref =E<gt> (1|0)>
462
463 This tells the accessor whether to automatically dereference the value returned.
464 This is only legal if your C<isa> option is either C<ArrayRef> or C<HashRef>.
465
466 =item I<metaclass =E<gt> $metaclass_name>
467
468 This tells the class to use a custom attribute metaclass for this particular
469 attribute. Custom attribute metaclasses are useful for extending the
470 capabilities of the I<has> keyword: they are the simplest way to extend the MOP,
471 but they are still a fairly advanced topic and too much to cover here. I will
472 try and write a recipe on them soon.
473
474 The default behavior here is to just load C<$metaclass_name>; however, we also
475 have a way to alias to a shorter name. This will first look to see if
476 B<Moose::Meta::Attribute::Custom::$metaclass_name> exists. If it does, Moose
477 will then check to see if that has the method C<register_implementation>, which
478 should return the actual name of the custom attribute metaclass. If there is no
479 C<register_implementation> method, it will fall back to using
480 B<Moose::Meta::Attribute::Custom::$metaclass_name> as the metaclass name.
481
482 =item I<trigger =E<gt> $code>
483
484 The I<trigger> option is a CODE reference which will be called after the value of
485 the attribute is set. The CODE ref will be passed the instance itself, the
486 updated value and the attribute meta-object (this is for more advanced fiddling
487 and can typically be ignored). You B<cannot> have a trigger on a read-only
488 attribute.
489
490 =item I<handles =E<gt> ARRAY | HASH | REGEXP | ROLE | CODE>
491
492 The I<handles> option provides Moose classes with automated delegation features.
493 This is a pretty complex and powerful option. It accepts many different option
494 formats, each with its own benefits and drawbacks.
495
496 B<NOTE:> This feature is no longer experimental, but it may still have subtle
497 bugs lurking in the deeper corners. If you think you have found a bug, you
498 probably have, so please report it to me right away.
499
500 B<NOTE:> The class being delegated to does not need to be a Moose based class,
501 which is why this feature is especially useful when wrapping non-Moose classes.
502
503 All I<handles> option formats share the following traits:
504
505 You cannot override a locally defined method with a delegated method; an
506 exception will be thrown if you try. That is to say, if you define C<foo> in
507 your class, you cannot override it with a delegated C<foo>. This is almost never
508 something you would want to do, and if it is, you should do it by hand and not
509 use Moose.
510
511 You cannot override any of the methods found in Moose::Object, or the C<BUILD>
512 and C<DEMOLISH> methods. These will not throw an exception, but will silently
513 move on to the next method in the list. My reasoning for this is that you would
514 almost never want to do this, since it usually breaks your class. As with
515 overriding locally defined methods, if you do want to do this, you should do it
516 manually, not with Moose.
517
518 You do not I<need> to have a reader (or accessor) for the attribute in order 
519 to delegate to it. Moose will create a means of accessing the value for you, 
520 however this will be several times B<less> efficient then if you had given 
521 the attribute a reader (or accessor) to use.
522
523 Below is the documentation for each option format:
524
525 =over 4
526
527 =item C<ARRAY>
528
529 This is the most common usage for I<handles>. You basically pass a list of
530 method names to be delegated, and Moose will install a delegation method
531 for each one.
532
533 =item C<HASH>
534
535 This is the second most common usage for I<handles>. Instead of a list of
536 method names, you pass a HASH ref where each key is the method name you
537 want installed locally, and its value is the name of the original method
538 in the class being delegated to.
539
540 This can be very useful for recursive classes like trees. Here is a
541 quick example (soon to be expanded into a Moose::Cookbook::Recipe):
542
543   package Tree;
544   use Moose;
545
546   has 'node' => (is => 'rw', isa => 'Any');
547
548   has 'children' => (
549       is      => 'ro',
550       isa     => 'ArrayRef',
551       default => sub { [] }
552   );
553
554   has 'parent' => (
555       is          => 'rw',
556       isa         => 'Tree',
557       weak_ref => 1,
558       handles     => {
559           parent_node => 'node',
560           siblings    => 'children',
561       }
562   );
563
564 In this example, the Tree package gets C<parent_node> and C<siblings> methods,
565 which delegate to the C<node> and C<children> methods (respectively) of the Tree
566 instance stored in the C<parent> slot.
567
568 =item C<REGEXP>
569
570 The regexp option works very similar to the ARRAY option, except that it builds
571 the list of methods for you. It starts by collecting all possible methods of the
572 class being delegated to, then filters that list using the regexp supplied here.
573
574 B<NOTE:> An I<isa> option is required when using the regexp option format. This
575 is so that we can determine (at compile time) the method list from the class.
576 Without an I<isa> this is just not possible.
577
578 =item C<ROLE>
579
580 With the role option, you specify the name of a role whose "interface" then
581 becomes the list of methods to handle. The "interface" can be defined as; the
582 methods of the role and any required methods of the role. It should be noted
583 that this does B<not> include any method modifiers or generated attribute
584 methods (which is consistent with role composition).
585
586 =item C<CODE>
587
588 This is the option to use when you really want to do something funky. You should
589 only use it if you really know what you are doing, as it involves manual
590 metaclass twiddling.
591
592 This takes a code reference, which should expect two arguments. The first is the
593 attribute meta-object this I<handles> is attached to. The second is the
594 metaclass of the class being delegated to. It expects you to return a hash (not
595 a HASH ref) of the methods you want mapped.
596
597 =back
598
599 =back
600
601 =item B<has +$name =E<gt> %options>
602
603 This is variation on the normal attibute creator C<has> which allows you to
604 clone and extend an attribute from a superclass or from a role. Here is an 
605 example of the superclass usage:
606
607   package Foo;
608   use Moose;
609
610   has 'message' => (
611       is      => 'rw',
612       isa     => 'Str',
613       default => 'Hello, I am a Foo'
614   );
615
616   package My::Foo;
617   use Moose;
618
619   extends 'Foo';
620
621   has '+message' => (default => 'Hello I am My::Foo');
622
623 What is happening here is that B<My::Foo> is cloning the C<message> attribute
624 from its parent class B<Foo>, retaining the C<is =E<gt> 'rw'> and C<isa =E<gt>
625 'Str'> characteristics, but changing the value in C<default>.
626
627 Here is another example, but within the context of a role:
628
629   package Foo::Role;
630   use Moose::Role;
631   
632   has 'message' => (
633       is      => 'rw',
634       isa     => 'Str',
635       default => 'Hello, I am a Foo'
636   );
637   
638   package My::Foo;
639   use Moose;
640   
641   with 'Foo::Role';
642   
643   has '+message' => (default => 'Hello I am My::Foo');
644
645 In this case, we are basically taking the attribute which the role supplied 
646 and altering it within the bounds of this feature.
647
648 This feature is restricted somewhat, so as to try and force at least I<some>
649 sanity into it. You are only allowed to change the following attributes:
650
651 =over 4
652
653 =item I<default>
654
655 Change the default value of an attribute.
656
657 =item I<coerce>
658
659 Change whether the attribute attempts to coerce a value passed to it.
660
661 =item I<required>
662
663 Change if the attribute is required to have a value.
664
665 =item I<documentation>
666
667 Change the documentation string associated with the attribute.
668
669 =item I<lazy>
670
671 Change if the attribute lazily initializes the slot.
672
673 =item I<isa>
674
675 You I<are> allowed to change the type, B<if and only if> the new type is a
676 subtype of the old type.
677
678 =item I<handles>
679
680 You are allowed to B<add> a new C<handles> definition, but you are B<not>
681 allowed to I<change> one.
682
683 =item I<builder>
684
685 You are allowed to B<add> a new C<builder> definition, but you are B<not>
686 allowed to I<change> one.
687
688 =back
689
690 =item B<before $name|@names =E<gt> sub { ... }>
691
692 =item B<after $name|@names =E<gt> sub { ... }>
693
694 =item B<around $name|@names =E<gt> sub { ... }>
695
696 This three items are syntactic sugar for the before, after, and around method
697 modifier features that L<Class::MOP> provides. More information on these may be
698 found in the L<Class::MOP::Class documentation|Class::MOP::Class/"Method
699 Modifiers"> for now.
700
701 =item B<super>
702
703 The keyword C<super> is a no-op when called outside of an C<override> method. In
704 the context of an C<override> method, it will call the next most appropriate
705 superclass method with the same arguments as the original method.
706
707 =item B<override ($name, &sub)>
708
709 An C<override> method is a way of explicitly saying "I am overriding this
710 method from my superclass". You can call C<super> within this method, and
711 it will work as expected. The same thing I<can> be accomplished with a normal
712 method call and the C<SUPER::> pseudo-package; it is really your choice.
713
714 =item B<inner>
715
716 The keyword C<inner>, much like C<super>, is a no-op outside of the context of
717 an C<augment> method. You can think of C<inner> as being the inverse of
718 C<super>; the details of how C<inner> and C<augment> work is best described in
719 the L<Moose::Cookbook>.
720
721 =item B<augment ($name, &sub)>
722
723 An C<augment> method, is a way of explicitly saying "I am augmenting this
724 method from my superclass". Once again, the details of how C<inner> and
725 C<augment> work is best described in the L<Moose::Cookbook>.
726
727 =item B<confess>
728
729 This is the C<Carp::confess> function, and exported here because I use it
730 all the time. This feature may change in the future, so you have been warned.
731
732 =item B<blessed>
733
734 This is the C<Scalar::Util::blessed> function, it is exported here because I
735 use it all the time. It is highly recommended that this is used instead of
736 C<ref> anywhere you need to test for an object's class name.
737
738 =back
739
740 =head1 UNIMPORTING FUNCTIONS
741
742 =head2 B<unimport>
743
744 Moose offers a way to remove the keywords it exports, through the C<unimport>
745 method. You simply have to say C<no Moose> at the bottom of your code for this
746 to work. Here is an example:
747
748     package Person;
749     use Moose;
750
751     has 'first_name' => (is => 'rw', isa => 'Str');
752     has 'last_name'  => (is => 'rw', isa => 'Str');
753
754     sub full_name {
755         my $self = shift;
756         $self->first_name . ' ' . $self->last_name
757     }
758
759     no Moose; # keywords are removed from the Person package
760
761 =head1 EXTENDING AND EMBEDDING MOOSE
762
763 Moose also offers some options for extending or embedding it into your own
764 framework. The basic premise is to have something that sets up your class'
765 metaclass and export the moose declarators (C<has>, C<with>, C<extends>,...).
766 Here is an example:
767
768     package MyFramework;
769     use Moose;
770
771     sub import {
772         my $CALLER = caller();
773
774         strict->import;
775         warnings->import;
776
777         # we should never export to main
778         return if $CALLER eq 'main';
779         Moose::init_meta( $CALLER, 'MyFramework::Base' );
780         Moose->import({into => $CALLER});
781
782         # Do my custom framework stuff
783
784         return 1;
785     }
786
787 =head2 B<import>
788
789 Moose's C<import> method supports the L<Sub::Exporter> form of C<{into =E<gt> $pkg}>
790 and C<{into_level =E<gt> 1}>
791
792 =head2 B<init_meta ($class, $baseclass, $metaclass)>
793
794 Moose does some boot strapping: it creates a metaclass object for your class,
795 and then injects a C<meta> accessor into your class to retrieve it. Then it
796 sets your baseclass to Moose::Object or the value you pass in unless you already
797 have one. This is all done via C<init_meta> which takes the name of your class
798 and optionally a baseclass and a metaclass as arguments.
799
800 =head1 CAVEATS
801
802 =over 4
803
804 =item *
805
806 It should be noted that C<super> and C<inner> B<cannot> be used in the same
807 method. However, they may be combined within the same class hierarchy; see
808 F<t/014_override_augment_inner_super.t> for an example.
809
810 The reason for this is that C<super> is only valid within a method
811 with the C<override> modifier, and C<inner> will never be valid within an
812 C<override> method. In fact, C<augment> will skip over any C<override> methods
813 when searching for its appropriate C<inner>.
814
815 This might seem like a restriction, but I am of the opinion that keeping these
816 two features separate (yet interoperable) actually makes them easy to use, since
817 their behavior is then easier to predict. Time will tell whether I am right or
818 not (UPDATE: so far so good).
819
820 =back
821
822 =head1 ACKNOWLEDGEMENTS
823
824 =over 4
825
826 =item I blame Sam Vilain for introducing me to the insanity that is meta-models.
827
828 =item I blame Audrey Tang for then encouraging my meta-model habit in #perl6.
829
830 =item Without Yuval "nothingmuch" Kogman this module would not be possible,
831 and it certainly wouldn't have this name ;P
832
833 =item The basis of the TypeContraints module was Rob Kinyon's idea
834 originally, I just ran with it.
835
836 =item Thanks to mst & chansen and the whole #moose poose for all the
837 early ideas/feature-requests/encouragement/bug-finding.
838
839 =item Thanks to David "Theory" Wheeler for meta-discussions and spelling fixes.
840
841 =back
842
843 =head1 SEE ALSO
844
845 =over 4
846
847 =item L<http://www.iinteractive.com/moose>
848
849 This is the official web home of Moose, it contains links to our public SVN repo
850 as well as links to a number of talks and articles on Moose and Moose related
851 technologies.
852
853 =item L<Class::MOP> documentation
854
855 =item The #moose channel on irc.perl.org
856
857 =item The Moose mailing list - moose@perl.org
858
859 =item Moose stats on ohloh.net - L<http://www.ohloh.net/projects/5788>
860
861 =item Several Moose extension modules in the L<MooseX::> namespace.
862
863 =back
864
865 =head2 Papers
866
867 =over 4
868
869 =item L<http://www.cs.utah.edu/plt/publications/oopsla04-gff.pdf>
870
871 This paper (suggested by lbr on #moose) was what lead to the implementation
872 of the C<super>/C<override> and C<inner>/C<augment> features. If you really
873 want to understand them, I suggest you read this.
874
875 =back
876
877 =head1 BUGS
878
879 All complex software has bugs lurking in it, and this module is no
880 exception. If you find a bug please either email me, or add the bug
881 to cpan-RT.
882
883 =head1 AUTHOR
884
885 Stevan Little E<lt>stevan@iinteractive.comE<gt>
886
887 B<with contributions from:>
888
889 Aankhen
890
891 Adam (Alias) Kennedy
892
893 Anders (Debolaz) Nor Berle
894
895 Nathan (kolibre) Gray
896
897 Christian (chansen) Hansen
898
899 Hans Dieter (confound) Pearcey
900
901 Eric (ewilhelm) Wilhelm
902
903 Guillermo (groditi) Roditi
904
905 Jess (castaway) Robinson
906
907 Matt (mst) Trout
908
909 Robert (phaylon) Sedlacek
910
911 Robert (rlb3) Boone
912
913 Scott (konobi) McWhirter
914
915 Shlomi (rindolf) Fish
916
917 Yuval (nothingmuch) Kogman
918
919 Chris (perigrin) Prather
920
921 Jonathan (jrockway) Rockway
922
923 Piotr (dexter) Roszatycki
924
925 Sam (mugwump) Vilain
926
927 Shawn (sartak) Moore
928
929 ... and many other #moose folks
930
931 =head1 COPYRIGHT AND LICENSE
932
933 Copyright 2006-2008 by Infinity Interactive, Inc.
934
935 L<http://www.iinteractive.com>
936
937 This library is free software; you can redistribute it and/or modify
938 it under the same terms as Perl itself.
939
940 =cut