Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #!/usr/bin/env perl
- use strict;
- use warnings;
- use feature ':5.10';
- use FindBin qw($Bin);
- use lib "$Bin/../lib";
- package Client;
- use Moose;
- has name => ( isa => 'Str', is => 'ro' );
- has server => (
- isa => 'Server',
- is => 'ro',
- required => 1
- );
- sub execute_capability {
- my $self = shift;
- $self->server->execute_capability($self, @_);
- }
- package Server::Permission;
- use Moose::Role;
- requires 'execute_capability';
- override execute_capability => sub {
- my $self = shift;
- $self->ensure_permission(@_);
- return super();
- };
- sub ensure_permission {
- my ( $self, $client ) = @_;
- $client->name eq 'Foo'
- or die qq{Can't execute capability for client named ${\$client->name}};
- }
- package Server;
- use Moose;
- sub execute_capability {
- print "executing capability\n";
- }
- package main;
- use Moose::Util ();
- my $server = Server->new;
- $server->Moose::Util::ensure_all_roles(qw(Server::Permission));
- my $client = Client->new( name => 'Foo', server => $server );
- $client->execute_capability;
- $client = Client->new( name => 'Bar', server => $server );
- $client->execute_capability;
Add Comment
Please, Sign In to add comment