X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FMouse.pm;h=1f1e3866398e7e809b90c41fd2dd6b305120ee10;hb=a02698f11a62bdf881c1a00651c2426b95095b29;hp=35acad9b3c7e6af41fb938f405fa4433f6eac14b;hpb=dca275b57dc7268b59e9a4096fa70b319eb7b233;p=gitmo%2FMouse.git diff --git a/lib/Mouse.pm b/lib/Mouse.pm index 35acad9..1f1e386 100644 --- a/lib/Mouse.pm +++ b/lib/Mouse.pm @@ -3,12 +3,13 @@ package Mouse; use strict; use warnings; -our $VERSION = '0.01'; -use 5.6.0; +our $VERSION = '0.05'; +use 5.006; use Sub::Exporter; use Carp 'confess'; use Scalar::Util 'blessed'; +use Class::Method::Modifiers (); use Mouse::Meta::Attribute; use Mouse::Meta::Class; @@ -38,7 +39,12 @@ do { $names = [$names] if !ref($names); for my $name (@$names) { - Mouse::Meta::Attribute->create($package, $name, @_); + if ($name =~ s/^\+//) { + Mouse::Meta::Attribute->clone_parent($package, $name, @_); + } + else { + Mouse::Meta::Attribute->create($package, $name, @_); + } } }; }, @@ -50,6 +56,32 @@ do { blessed => sub { return \&blessed; }, + + before => sub { + return \&Class::Method::Modifiers::before; + }, + + after => sub { + return \&Class::Method::Modifiers::after; + }, + + around => sub { + return \&Class::Method::Modifiers::around; + }, + + with => sub { + my $caller = $CALLER; + + return sub { + my $role = shift; + my $class = $caller->meta; + + confess "Mouse::Role only supports 'with' on individual roles at a time" if @_; + + Mouse::load_class($role); + $role->meta->apply($class); + }; + }, ); my $exporter = Sub::Exporter::build_exporter({ @@ -137,10 +169,6 @@ __END__ Mouse - Moose minus the antlers -=head1 VERSION - -Version 0.01 released 10 Jun 08 - =head1 SYNOPSIS package Point; @@ -162,11 +190,10 @@ Version 0.01 released 10 Jun 08 has 'z' => (is => 'rw', isa => 'Int'); - # not implemented yet :) - #after 'clear' => sub { - # my $self = shift; - # $self->z(0); - #}; + after 'clear' => sub { + my $self = shift; + $self->z(0); + }; =head1 DESCRIPTION @@ -184,19 +211,18 @@ expert-level features. Compatibility with Moose has been the utmost concern. Fewer than 1% of the tests fail when run against Moose instead of Mouse. Mouse code coverage is also -over 99%. Even the error messages are taken from Moose. +over 99%. Even the error messages are taken from Moose. The Mouse code just +runs the test suite 3x-4x faster. The idea is that, if you need the extra power, you should be able to run -C on your codebase and have nothing break. +C on your codebase and have nothing break. To that end, +nothingmuch has written L (part of this distribution) which will act +as Mouse unless Moose is loaded, in which case it will act as Moose. Mouse also has the blessings of Moose's author, stevan. =head2 MISSING FEATURES -=head3 Method modifiers - -Fixing this one next, with a reimplementation of L. - =head3 Roles Fixing this one slightly less soon. stevan has suggested an implementation @@ -231,6 +257,21 @@ Returns this class' metaclass instance. Sets this class' superclasses. +=head2 before (method|methods) => Code + +Installs a "before" method modifier. See L or +L. + +=head2 after (method|methods) => Code + +Installs an "after" method modifier. See L or +L. + +=head2 around (method|methods) => Code + +Installs an "around" method modifier. See L or +L. + =head2 has (name|names) => parameters Adds an attribute (or if passed an arrayref of names, multiple attributes) to