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