just a simple XSLoader for now
[gitmo/Mouse.git] / lib / Mouse.pm
index c529135..b8e8f97 100644 (file)
@@ -4,9 +4,28 @@ use strict;
 use warnings;
 use base 'Exporter';
 
-our $VERSION = '0.10';
+our $VERSION = '0.12';
 use 5.006;
 
+if ($ENV{SHIKA_DEBUG}) {
+    *DEBUG = sub (){ 1 };
+} else {
+    *DEBUG = sub (){ 0 };
+}
+
+our $PurePerl;
+$PurePerl = $ENV{SHIKA_PUREPERL} unless defined $PurePerl;
+
+
+if (! $PurePerl) {
+    local $@;
+    local $^W = 0;
+    require XSLoader;
+    $PurePerl = !eval{ XSLoader::load(__PACKAGE__, $VERSION); 1 };
+    warn "Failed to load XS mode: $@" if $@ && Mouse::DEBUG();
+}
+
+
 use Carp 'confess';
 use Mouse::Util 'blessed';
 
@@ -69,11 +88,12 @@ sub with {
     my $meta = Mouse::Meta::Class->initialize(caller);
 
     my $role  = shift;
+    my $args  = shift || {};
 
-    confess "Mouse::Role only supports 'with' on individual roles at a time" if @_;
+    confess "Mouse::Role only supports 'with' on individual roles at a time" if @_ || !ref $args;
 
     Mouse::load_class($role);
-    $role->meta->apply($meta);
+    $role->meta->apply($meta, %$args);
 }
 
 sub import {
@@ -299,9 +319,10 @@ Whether this attribute is required to have a value. If the attribute is lazy or
 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
 
@@ -359,6 +380,11 @@ context. In scalar context, the reference is returned (NOT the list length or
 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