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