package Venus::Role::Unacceptable; use 5.018; use strict; use warnings; use Venus::Role 'raise'; # BUILDERS sub BUILD { my ($self) = @_; my $class = ref $self || $self; my %attrs = map +($_, $_), $self->META->attrs; my @unknowns = sort grep !exists($attrs{$_}), keys %$self; raise 'Venus::Role::Unacceptable::Error', { name => 'on.build', '$stash' => {unknowns => [@unknowns]}, message => "$class was passed unknown attribute(s): " . join ', ', map "'$_'", @unknowns, } if @unknowns; return $self; } 1; =head1 NAME Venus::Role::Unacceptable - Unacceptable Role =cut =head1 ABSTRACT Unacceptable Role for Perl 5 =cut =head1 SYNOPSIS package ExampleAccept; use Venus::Class 'attr'; attr 'name'; package ExampleDeny; use Venus::Class 'attr', 'with'; with 'Venus::Role::Unacceptable'; attr 'name'; package main; my $example = ExampleDeny->new(name => 'example', test => 12345); # Exception! (isa Venus::Role::Unacceptable::Error) =cut =head1 DESCRIPTION This package provides a mechanism for raising an exception when unexpected constructor arguments are encountered. =cut