X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FMoose.pm;h=f2f7b788e3c858cc44f9ae6b9cee6db88ab333cb;hb=7d93ec414e0d301292d89be61c5845152ab1b913;hp=ed4cf730ee9cb5ac383e2403668a0947d6040f4b;hpb=aead17e74252e3884f9f8e39912ca98fdf4b4dd5;p=gitmo%2FMoose.git diff --git a/lib/Moose.pm b/lib/Moose.pm index ed4cf73..f2f7b78 100644 --- a/lib/Moose.pm +++ b/lib/Moose.pm @@ -6,7 +6,7 @@ use warnings; use 5.008; -our $VERSION = '0.62'; +our $VERSION = '0.65'; $VERSION = eval $VERSION; our $AUTHORITY = 'cpan:STEVAN'; @@ -15,7 +15,7 @@ use Carp 'confess', 'croak', 'cluck'; use Moose::Exporter; -use Class::MOP 0.71; +use Class::MOP 0.76; 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; @@ -74,7 +81,7 @@ sub has { my $class = shift; my $name = shift; croak 'Usage: has \'name\' => ( key => value, ... )' if @_ == 1; - my %options = @_; + 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 +101,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 { @@ -237,24 +251,18 @@ sub _get_caller { ## make 'em all immutable -$_->meta->make_immutable( +$_->make_immutable( inline_constructor => 1, constructor_name => "_new", - inline_accessors => 1, # these are Class::MOP accessors, so they need inlining - ) - for (qw( + # these are Class::MOP accessors, so they need inlining + inline_accessors => 1 + ) for grep { $_->is_mutable } + map { $_->meta } + qw( Moose::Meta::Attribute Moose::Meta::Class Moose::Meta::Instance - Moose::Meta::TypeConstraint - Moose::Meta::TypeConstraint::Union - Moose::Meta::TypeConstraint::Parameterized - Moose::Meta::TypeConstraint::Parameterizable - Moose::Meta::TypeConstraint::Enum - Moose::Meta::TypeConstraint::Class - Moose::Meta::TypeConstraint::Role - Moose::Meta::TypeConstraint::Registry Moose::Meta::TypeCoercion Moose::Meta::TypeCoercion::Union @@ -276,7 +284,7 @@ $_->meta->make_immutable( Moose::Meta::Role::Application::ToClass Moose::Meta::Role::Application::ToRole Moose::Meta::Role::Application::ToInstance -)); +); 1; @@ -624,34 +632,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 @@ -970,6 +976,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 @@ -1001,26 +1019,18 @@ This is the official web home of Moose, it contains links to our public SVN repo 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 @@ -1122,11 +1132,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