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