X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FMouse%2FRole.pm;h=e60776001d9fa37410f4577b9e7e59fdbe52faa4;hb=9df6f0cd390fd74f63dc8985bf9e9c765c941ae9;hp=99170c20933316fe489465aa3804f363500e9986;hpb=b32e8fb9860b5e46b8409f603a34c76f9465e644;p=gitmo%2FMouse.git diff --git a/lib/Mouse/Role.pm b/lib/Mouse/Role.pm index 99170c2..e607760 100644 --- a/lib/Mouse/Role.pm +++ b/lib/Mouse/Role.pm @@ -1,4 +1,3 @@ -#!/usr/bin/env perl package Mouse::Role; use strict; use warnings; @@ -49,11 +48,23 @@ sub has { sub extends { confess "Roles do not support 'extends'" } -sub with { confess "Mouse::Role does not currently support 'with'" } +sub with { + my $meta = Mouse::Meta::Role->initialize(caller); + my $role = shift; + my $args = shift || {}; + confess "Mouse::Role only supports 'with' on individual roles at a time" if @_ || !ref $args; + + Mouse::load_class($role); + $role->meta->apply($meta, %$args); +} -sub requires {} +sub requires { + my $meta = Mouse::Meta::Role->initialize(caller); + Carp::croak "Must specify at least one method" unless @_; + $meta->add_required_methods(@_); +} -sub excludes {} +sub excludes { confess "Mouse::Role does not currently support 'excludes'" } sub import { strict->import;