-#!perl
+#!/usr/bin/env perl
package Mouse;
use strict;
use warnings;
-our $VERSION = '0.02';
+our $VERSION = '0.07';
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;
},
has => sub {
+ my $caller = $CALLER;
+
return sub {
- my $package = caller;
+ my $meta = $caller->meta;
+
my $names = shift;
$names = [$names] if !ref($names);
for my $name (@$names) {
- Mouse::Meta::Attribute->create($package, $name, @_);
+ if ($name =~ s/^\+//) {
+ Mouse::Meta::Attribute->clone_parent($meta, $name, @_);
+ }
+ else {
+ Mouse::Meta::Attribute->create($meta, $name, @_);
+ }
}
};
},
},
before => sub {
- return \&Class::Method::Modifiers::before;
+ my $caller = $CALLER;
+
+ return sub {
+ my $code = pop;
+ my $class = $caller->meta;
+
+ for (@_) {
+ $class->add_before_method_modifier($_ => $code);
+ }
+ };
},
after => sub {
- return \&Class::Method::Modifiers::after;
+ my $caller = $CALLER;
+
+ return sub {
+ my $code = pop;
+ my $class = $caller->meta;
+
+ for (@_) {
+ $class->add_after_method_modifier($_ => $code);
+ }
+ };
},
around => sub {
- return \&Class::Method::Modifiers::around;
+ my $caller = $CALLER;
+
+ return sub {
+ my $code = pop;
+ my $class = $caller->meta;
+
+ for (@_) {
+ $class->add_around_method_modifier($_ => $code);
+ }
+ };
+ },
+
+ 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);
+ };
},
);
Mouse - Moose minus the antlers
-=head1 VERSION
-
-Version 0.02 released 11 Jun 08
-
=head1 SYNOPSIS
package Point;
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. The Mouse code just
+over 97%. 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
=head3 Roles
-Fixing this one slightly less soon. stevan has suggested an implementation
-strategy. Mouse currently mostly ignores methods.
+We're working on fixing this one! stevan has suggested an implementation
+strategy. Mouse currently ignores methods, so that needs to be fixed next.
+Roles that consist entirely of attributes may be usable in this very version.
=head3 Complex types
Lets you automatically weaken any reference stored in the attribute.
-=item trigger => Coderef
+=item trigger => CodeRef
+
+Any time the attribute's value is set (either through the accessor or the constructor), the trigger is called on it. The trigger receives as arguments the instance, the new value, and the attribute instance.
-Any time the attribute's value is set (either through the accessor or the
-constructor), the trigger is called on it. The trigger receives as arguments
-the instance, the new value, and the attribute instance.
+Mouse 0.05 supported more complex triggers, but this behavior is now deprecated.
=item builder => Str