package Venus::Role::Rejectable;
use 5.018;
use strict;
use warnings;
use Venus::Role 'with';
# BUILDERS
sub BUILD {
my ($self) = @_;
my %attrs = map +($_, $_), $self->META->attrs;
my @unknowns = sort grep !exists($attrs{$_}), keys %$self;
delete $self->{$_} for @unknowns;
return $self;
}
1;
=head1 NAME
Venus::Role::Rejectable - Rejectable Role
=cut
=head1 ABSTRACT
Rejectable Role for Perl 5
=cut
=head1 SYNOPSIS
package ExampleAccept;
use Venus::Class 'attr';
attr 'name';
package ExampleReject;
use Venus::Class 'attr', 'with';
with 'Venus::Role::Rejectable';
attr 'name';
package main;
my $example = ExampleReject->new(name => 'example', test => 12345);
# bless({name => 'example'}, "Example")
=cut
=head1 DESCRIPTION
This package provides a mechanism for rejecting unexpected constructor arguments.
=cut