diff options
author | Jesse Luehrs <doy@tozt.net> | 2009-05-28 19:55:56 -0500 |
---|---|---|
committer | Jesse Luehrs <doy@tozt.net> | 2009-05-28 19:58:24 -0500 |
commit | b6754f9c83d813eb0429fafd45bd5dd75f341f61 (patch) | |
tree | a763a97f213029247dfbb90fff9601b9ec4028c9 /lib/MooseX/ABC | |
download | moosex-abc-b6754f9c83d813eb0429fafd45bd5dd75f341f61.tar.gz moosex-abc-b6754f9c83d813eb0429fafd45bd5dd75f341f61.zip |
initial commit
Diffstat (limited to 'lib/MooseX/ABC')
-rw-r--r-- | lib/MooseX/ABC/Trait/Class.pm | 31 |
1 files changed, 31 insertions, 0 deletions
diff --git a/lib/MooseX/ABC/Trait/Class.pm b/lib/MooseX/ABC/Trait/Class.pm new file mode 100644 index 0000000..c8b7341 --- /dev/null +++ b/lib/MooseX/ABC/Trait/Class.pm @@ -0,0 +1,31 @@ +package MooseX::ABC::Trait::Class; +use Moose::Role; +use MooseX::AttributeHelpers; + +has required_methods => ( + metaclass => 'Collection::Array', + is => 'ro', + isa => 'ArrayRef[Str]', + default => sub { [] }, + provides => { + push => 'add_required_method', + }, +); + +after _superclasses_updated => sub { + my $self = shift; + for my $superclass ($self->linearized_isa) { + my $super_meta = Class::MOP::class_of($superclass); + next unless $super_meta->does_role('MooseX::ABC::Trait::Class'); + for my $method ($super_meta->required_methods) { + if (!$self->find_method_by_name($method)) { + my $classname = $self->name; + die "$superclass requires $classname to implement $method"; + } + } + } +}; + +no Moose::Role; + +1; |