X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FMoose.pm;h=f9be77e8c2dee99265ac524e7b475eba3231cedc;hb=7e9900b6abb738737c0ed4536ef1fc01f022cabb;hp=12403ff3927f4bd8551e35fed29ee97be8710af5;hpb=df8260e9a27a9d7532a21525223975fcf8e26562;p=gitmo%2FMoose.git diff --git a/lib/Moose.pm b/lib/Moose.pm index 12403ff..f9be77e 100644 --- a/lib/Moose.pm +++ b/lib/Moose.pm @@ -6,16 +6,16 @@ use warnings; use 5.008; -our $VERSION = '0.63'; +our $VERSION = '0.71_01'; $VERSION = eval $VERSION; our $AUTHORITY = 'cpan:STEVAN'; use Scalar::Util 'blessed'; -use Carp 'confess', 'croak', 'cluck'; +use Carp 'confess'; use Moose::Exporter; -use Class::MOP 0.71_02; +use Class::MOP 0.77_01; use Moose::Meta::Class; use Moose::Meta::TypeConstraint; @@ -36,6 +36,13 @@ use Moose::Meta::Role::Application::ToInstance; use Moose::Util::TypeConstraints; use Moose::Util (); +sub _caller_info { + my $level = @_ ? ($_[0] + 1) : 2; + my %info; + @info{qw(package file line)} = caller($level); + return \%info; +} + sub throw_error { # FIXME This shift; @@ -45,12 +52,12 @@ sub throw_error { sub extends { my $class = shift; - croak "Must derive at least one class" unless @_; + Moose->throw_error("Must derive at least one class") unless @_; my @supers = @_; foreach my $super (@supers) { Class::MOP::load_class($super); - croak "You cannot inherit from a Moose Role ($super)" + Moose->throw_error("You cannot inherit from a Moose Role ($super)") if $super->can('meta') && blessed $super->meta && $super->meta->isa('Moose::Meta::Role') @@ -73,8 +80,11 @@ sub with { sub has { my $class = shift; my $name = shift; - croak 'Usage: has \'name\' => ( key => value, ... )' if @_ == 1; - my %options = @_; + + Moose->throw_error('Usage: has \'name\' => ( key => value, ... )') + if @_ == 1; + + my %options = ( definition_context => _caller_info(), @_ ); my $attrs = ( ref($name) eq 'ARRAY' ) ? $name : [ ($name) ]; Class::MOP::Class->initialize($class)->add_attribute( $_, %options ) for @$attrs; } @@ -94,8 +104,15 @@ sub around { Moose::Util::add_method_modifier($class, 'around', \@_); } +our $SUPER_PACKAGE; +our $SUPER_BODY; +our @SUPER_ARGS; + sub super { - return unless our $SUPER_BODY; $SUPER_BODY->(our @SUPER_ARGS); + # This check avoids a recursion loop - see + # t/100_bugs/020_super_recursion.t + return if defined $SUPER_PACKAGE && $SUPER_PACKAGE ne caller(); + return unless $SUPER_BODY; $SUPER_BODY->(@SUPER_ARGS); } sub override { @@ -256,7 +273,7 @@ $_->make_immutable( Moose::Meta::Method::Accessor Moose::Meta::Method::Constructor Moose::Meta::Method::Destructor - Moose::Meta::Method::Overriden + Moose::Meta::Method::Overridden Moose::Meta::Method::Augmented Moose::Meta::Role @@ -457,11 +474,10 @@ This is only legal if your C option is either C or C. =item I $code> -The I option is a CODE reference which will be called after the value of -the attribute is set. The CODE ref will be passed the instance itself, the -updated value and the attribute meta-object (this is for more advanced fiddling -and can typically be ignored). You B have a trigger on a read-only -attribute. +The I option is a CODE reference which will be called after +the value of the attribute is set. The CODE ref will be passed the +instance itself and the updated value. You B have a trigger on +a read-only attribute. B Triggers will only fire when you B to the attribute, either in the constructor, or using the writer. Default and built values will @@ -618,34 +634,32 @@ See the L for more information. -=item I => Str - -This may be a method name (referring to a method on the class with -this attribute) or a CODE ref. The initializer is used to set the -attribute value on an instance when the attribute is set during -instance initialization (but not when the value is being assigned -to). See the L for more -information. - =item I => Str -Allows you to clear the value, see the L for more +Creates a method allowing you to clear the value, see the L for more information. =item I => Str -Basic test to see if a value has been set in the attribute, see the -L for more -information. +Creates a method to perform a basic test to see if a value has been set in the +attribute, see the L for more information. =item I => (0|1) Automatically define lazy => 1 as well as builder => "_build_$attr", clearer => "clear_$attr', predicate => 'has_$attr' unless they are already defined. +=item I => Str + +This may be a method name (referring to a method on the class with +this attribute) or a CODE ref. The initializer is used to set the +attribute value on an instance when the attribute is set during +instance initialization (but not when the value is being assigned +to). See the L for more +information. =back @@ -750,7 +764,7 @@ B allowed to I one. =item I You are allowed to B additional traits to the C definition. -These traits will be composed into the attribute, but pre-existing traits +These traits will be composed into the attribute, but preexisting traits B overridden, or removed. =back @@ -870,7 +884,7 @@ specified by C. This method injects a a C accessor into the class so you can get at this object. It also sets the class's superclass to C, with L as the default. -You can specify an alternate metaclass with the C parameter. +You can specify an alternate metaclass with the C option. For more detail on this topic, see L. @@ -964,6 +978,18 @@ not (UPDATE: so far so good). =back +=head1 GETTING HELP + +We offer both a mailing list and a very active IRC channel. + +The mailing list is L. You must be subscribed to send +a message. To subscribe, send an empty message to +L + +You can also visit us at L<#moose on +irc.perl.org|irc://irc.perl.org/#moose>. This channel is quite active, +and questions at all levels (on Moose-related topics ;) are welcome. + =head1 ACKNOWLEDGEMENTS =over 4 @@ -991,30 +1017,22 @@ early ideas/feature-requests/encouragement/bug-finding. =item L -This is the official web home of Moose, it contains links to our public SVN repo +This is the official web home of Moose, it contains links to our public SVN repository as well as links to a number of talks and articles on Moose and Moose related technologies. -=item L - How to cook a Moose - =item The Moose is flying, a tutorial by Randal Schwartz Part 1 - L Part 2 - L -=item L documentation - -=item The #moose channel on irc.perl.org - -=item The Moose mailing list - moose@perl.org - -=item Moose stats on ohloh.net - L - =item Several Moose extension modules in the C namespace. See L for extensions. +=item Moose stats on ohloh.net - L + =back =head2 Books @@ -1084,7 +1102,7 @@ Adam (Alias) Kennedy Anders (Debolaz) Nor Berle -Nathan (kolibre) Gray +Nathan (kolibrie) Gray Christian (chansen) Hansen @@ -1116,11 +1134,13 @@ Piotr (dexter) Roszatycki Sam (mugwump) Vilain +Cory (gphat) Watson + ... and many other #moose folks =head1 COPYRIGHT AND LICENSE -Copyright 2006-2008 by Infinity Interactive, Inc. +Copyright 2006-2009 by Infinity Interactive, Inc. L