X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FRole%2FTiny.pm;h=ee75997c488974355b872f9efaaf8404d01a30af;hb=4db3a7403e42fab35d8814fca3ad4192547bb997;hp=74f83f64f3940f22b8903ac5c2e2cc53848d274c;hpb=68a51c0010322ed330838b455460d2774abdbf39;p=gitmo%2FMoo.git diff --git a/lib/Role/Tiny.pm b/lib/Role/Tiny.pm index 74f83f6..ee75997 100644 --- a/lib/Role/Tiny.pm +++ b/lib/Role/Tiny.pm @@ -139,12 +139,10 @@ sub _check_requires { } } -sub _install_methods { - my ($me, $to, $role) = @_; - +sub _concrete_methods_of { + my ($me, $role) = @_; my $info = $INFO{$role}; - - my $methods = $info->{methods} ||= do { + $info->{methods} ||= do { # grab role symbol table my $stash = do { no strict 'refs'; \%{"${role}::"}}; my $not_methods = $info->{not_methods}; @@ -157,6 +155,20 @@ sub _install_methods { } grep !(ref($stash->{$_}) eq 'SCALAR'), keys %$stash }; }; +} + +sub methods_provided_by { + my ($me, $role) = @_; + die "${role} is not a Role::Tiny" unless my $info = $INFO{$role}; + (keys %{$me->_concrete_methods_of($role)}, @{$info->{requires}||[]}); +} + +sub _install_methods { + my ($me, $to, $role) = @_; + + my $info = $INFO{$role}; + + my $methods = $me->_concrete_methods_of($role); # grab target symbol table my $stash = do { no strict 'refs'; \%{"${to}::"}};