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