Guest User

Untitled

a guest
Jul 23rd, 2018
72
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.10 KB | None | 0 0
  1. #!/usr/bin/env perl
  2.  
  3. use strict;
  4. use warnings;
  5. use feature ':5.10';
  6.  
  7. use FindBin qw($Bin);
  8. use lib "$Bin/../lib";
  9.  
  10. package Client;
  11. use Moose;
  12. has name => ( isa => 'Str', is => 'ro' );
  13. has server => (
  14. isa => 'Server',
  15. is => 'ro',
  16. required => 1
  17. );
  18.  
  19. sub execute_capability {
  20. my $self = shift;
  21. $self->server->execute_capability($self, @_);
  22. }
  23.  
  24. package Server::Permission;
  25. use Moose::Role;
  26.  
  27. requires 'execute_capability';
  28.  
  29. override execute_capability => sub {
  30. my $self = shift;
  31. $self->ensure_permission(@_);
  32. return super();
  33. };
  34.  
  35. sub ensure_permission {
  36. my ( $self, $client ) = @_;
  37. $client->name eq 'Foo'
  38. or die qq{Can't execute capability for client named ${\$client->name}};
  39. }
  40.  
  41. package Server;
  42. use Moose;
  43.  
  44. sub execute_capability {
  45. print "executing capability\n";
  46. }
  47.  
  48. package main;
  49. use Moose::Util ();
  50.  
  51. my $server = Server->new;
  52. $server->Moose::Util::ensure_all_roles(qw(Server::Permission));
  53.  
  54. my $client = Client->new( name => 'Foo', server => $server );
  55. $client->execute_capability;
  56.  
  57. $client = Client->new( name => 'Bar', server => $server );
  58. $client->execute_capability;
Add Comment
Please, Sign In to add comment