X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FMoo.pm;h=19f53275c3d97f16d1569a3463618dd29c11b3b5;hb=5902c1fcd2ed52f78c6710638be7798fc3c05c8d;hp=b99f31fc2385cb08831e69f310e45c8b98b1ad99;hpb=7fae06c23dafe1424eea94db1fb33bb11eb1e81f;p=gitmo%2FRole-Tiny.git diff --git a/lib/Moo.pm b/lib/Moo.pm index b99f31f..19f5327 100644 --- a/lib/Moo.pm +++ b/lib/Moo.pm @@ -4,7 +4,7 @@ use strictures 1; use Moo::_Utils; use B 'perlstring'; -our $VERSION = '0.009009'; # 0.9.9 +our $VERSION = '0.009013'; # 0.9.13 $VERSION = eval $VERSION; our %MAKERS; @@ -97,6 +97,9 @@ sub _constructor_maker_for { } 1; +=pod + +=encoding utf-8 =head1 NAME @@ -188,14 +191,43 @@ or =head2 BUILDARGS -This feature from Moose is not yet supported. + around BUILDARGS => sub { + my $orig = shift; + my ( $class, @args ) = @_; + + unshift @args, "attr1" if @args % 2 == 1; + + return $class->$orig(@args); + }; + + Foo::Bar->new( 3 ); + +The default implementation of this method accepts a hash or hash reference of +named parameters. If it receives a single argument that isn't a hash reference +it throws an error. + +You can override this method in your class to handle other types of options +passed to the constructor. -=head2 BUILDALL +This method should always return a hash reference of named options. -Don't override (or probably even call) this method. Instead, you can define -a C method on your class and the constructor will automatically call the -C method from parent down to child after the object has been -instantiated. Typically this is used for object validation or possibly logging. +=head2 BUILD + +Define a C method on your class and the constructor will automatically +call the C method from parent down to child after the object has +been instantiated. Typically this is used for object validation or possibly +logging. + +=head2 DEMOLISH + +If you have a C method anywhere in your inheritance hierarchy, +a C method is created on first object construction which will call +C<< $instance->DEMOLISH($in_global_destruction) >> for each C +method from child upwards to parents. + +Note that the C method is created on first construction of an object +of your class in order to not add overhead to classes without C +methods; this may prove slightly surprising if you try and define your own. =head2 does @@ -268,6 +300,25 @@ Coerce does not require C to be defined. L +=item * handles + +Takes a string + + handles => 'RobotRole' + +Where C is a role (L) that defines an interface which +becomes the list of methods to handle. + +Takes a list of methods + + handles => [ qw( one two ) ] + +Takes a hashref + + handles => { + un => 'one', + } + =item * trigger Takes a coderef which will get called any time the attribute is set. Coderef @@ -323,6 +374,18 @@ another attribute to be set. B. Set this if the attribute must be passed on instantiation. +=item * reader + +The value of this attribute will be the name of the method to get the value of +the attribute. If you like Java style methods, you might set this to +C + +=item * writer + +The value of this attribute will be the name of the method to set the value of +the attribute. If you like Java style methods, you might set this to +C + =item * weak_ref B. Set this if you want the reference that the attribute contains to @@ -367,11 +430,28 @@ aware can take advantage of this. =head1 INCOMPATIBILITIES WITH MOOSE You can only compose one role at a time. If your application is large or -complex enough to warrant complex composition, you wanted L. +complex enough to warrant complex composition, you wanted L. Note that +this does not mean you can only compose one role per class - + + with 'FirstRole'; + with 'SecondRole'; + +is absolutely fine, there's just currently no equivalent of Moose's -There is no complex type system. C is verified with a coderef, if you + with 'FirstRole', 'SecondRole'; + +which composes the two roles together, and then applies them. + +There is no built in type system. C is verified with a coderef, if you need complex types, just make a library of coderefs, or better yet, functions -that return quoted subs. +that return quoted subs. L provides a similar API +to L so that you can write + + has days_to_live => (is => 'ro', isa => Int); + +and have it work with both; it is hoped that providing only subrefs as an +API will encourage the use of other type systems as well, since it's +probably the weakest part of Moose design-wise. C is not supported in core since the author considers it to be a bad idea but may be supported by an extension in future. @@ -394,6 +474,44 @@ C is not supported since the author considers it a bad idea. C is not supported since it's a very poor replacement for POD. +Handling of warnings: when you C we enable FATAL warnings. The nearest +similar invocation for L would be: + + use Moose; + use warnings FATAL => "all"; + +Additionally, L supports a set of attribute option shortcuts intended to +reduce common boilerplate. The set of shortcuts is the same as in the L +module L. So if you: + + package MyClass; + use Moo; + +The nearest L invocation would be: + + package MyClass; + + use Moose; + use warnings FATAL => "all"; + use MooseX::AttributeShortcuts; + +or, if you're inheriting from a non-Moose class, + + package MyClass; + + use Moose; + use MooseX::NonMoose; + use warnings FATAL => "all"; + use MooseX::AttributeShortcuts; + +Finally, Moose requires you to call + + __PACKAGE__->meta->make_immutable; + +at the end of your class to get an inlined (i.e. not horribly slow) +constructor. Moo does it automatically the first time ->new is called +on your class. + =head1 AUTHOR mst - Matt S. Trout (cpan:MSTROUT) @@ -412,6 +530,10 @@ ribasushi - Peter Rabbitson (cpan:RIBASUSHI) chip - Chip Salzenberg (cpan:CHIPS) +ajgb - Alex J. G. Burzyński (cpan:AJGB) + +doy - Jesse Luehrs (cpan:DOY) + =head1 COPYRIGHT Copyright (c) 2010-2011 the Moo L and L