-#!/usr/bin/env perl
+
package Mouse;
use strict;
use warnings;
+use 5.006;
use base 'Exporter';
-our $VERSION = '0.08';
+our $VERSION = '0.13';
use 5.006;
+BEGIN {
+ if ($ENV{MOUSE_DEBUG}) {
+ *DEBUG = sub (){ 1 };
+ } else {
+ *DEBUG = sub (){ 0 };
+ }
+}
+
use Carp 'confess';
-use Mouse::Util 'blessed';
+use Scalar::Util 'blessed';
+use Mouse::Util;
use Mouse::Meta::Attribute;
use Mouse::Meta::Class;
}
sub with {
- my $meta = Mouse::Meta::Class->initialize(caller);
-
- my $role = shift;
-
- confess "Mouse::Role only supports 'with' on individual roles at a time" if @_;
-
- Mouse::load_class($role);
- $role->meta->apply($meta);
+ Mouse::Util::apply_all_roles((caller)[0], @_);
}
sub import {
+ my $class = shift;
+
strict->import;
warnings->import;
no warnings 'redefine';
*{$caller.'::meta'} = sub { $meta };
- Mouse->export_to_level(1, @_);
+ if (@_) {
+ __PACKAGE__->export_to_level( 1, $class, @_);
+ } else {
+ # shortcut for the common case of no type character
+ no strict 'refs';
+ for my $keyword (@EXPORT) {
+ *{ $caller . '::' . $keyword } = *{__PACKAGE__ . '::' . $keyword};
+ }
+ }
}
sub unimport {
confess "Invalid class name ($display)";
}
+ return 1 if $class eq 'Mouse::Object';
return 1 if is_class_loaded($class);
(my $file = "$class.pm") =~ s{::}{/}g;
Installs a "before" method modifier. See L<Moose/before> or
L<Class::Method::Modifiers/before>.
+Use of this feature requires L<Class::Method::Modifiers>!
+
=head2 after (method|methods) => Code
Installs an "after" method modifier. See L<Moose/after> or
L<Class::Method::Modifiers/after>.
+Use of this feature requires L<Class::Method::Modifiers>!
+
=head2 around (method|methods) => Code
Installs an "around" method modifier. See L<Moose/around> or
L<Class::Method::Modifiers/around>.
+Use of this feature requires L<Class::Method::Modifiers>!
+
=head2 has (name|names) => parameters
Adds an attribute (or if passed an arrayref of names, multiple attributes) to
has a builder, then providing a value for the attribute in the constructor is
optional.
-=item init_arg => Str
+=item init_arg => Str | Undef
-Allows you to use a different key name in the constructor.
+Allows you to use a different key name in the constructor. If undef, the
+attribue can't be passed to the constructor.
=item default => Value | CodeRef
Lets you automatically weaken any reference stored in the attribute.
+Use of this feature requires L<Scalar::Util>!
+
=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.
-Mouse 0.05 supported more complex triggers, but this behavior is now deprecated.
+Mouse 0.05 supported more complex triggers, but this behavior is now removed.
=item builder => Str
bucket status). You must specify an appropriate type constraint to use
auto_deref.
+=item lazy_build => 0|1
+
+Automatically define lazy => 1 as well as builder => "_build_$attr", clearer =>
+"clear_$attr', predicate => 'has_$attr' unless they are already defined.
+
=back
=head2 confess error -> BOOM