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