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