If I'm using override might as well use super() too.
[gitmo/MooseX-StrictConstructor.git] / lib / MooseX / Object / StrictConstructor.pm
1 package MooseX::Object::StrictConstructor;
2
3 use strict;
4 use warnings;
5
6 use Moose;
7
8 use Carp 'confess';
9
10 use metaclass 'MooseX::StrictConstructor::Meta::Class';
11
12
13 extends 'Moose::Object';
14
15 after 'BUILDALL' => sub
16 {
17     my $self   = shift;
18     my $params = shift;
19
20     my %attrs = map { $_->name() => 1 } $self->meta()->compute_all_applicable_attributes();
21
22     my @bad = sort grep { ! $attrs{$_} }  keys %{ $params };
23
24     if (@bad)
25     {
26         confess "Found unknown attribute(s) passed to the constructor: @bad";
27     }
28
29     return;
30 };
31
32
33 1;
34
35 __END__
36
37 =pod
38
39 =head1 NAME
40
41 MooseX::Object::StrictConstructor - Implements strict constructors as a Moose::Object subclass
42
43 =head1 DESCRIPTION
44
45 This class has no external interface. When you use
46 C<MooseX::StrictConstructor>, your objects will subclass this class
47 rather than Moose::Object.
48
49 =head1 AUTHOR
50
51 Dave Rolsky, C<< <autarch@urth.org> >>
52
53 =head1 COPYRIGHT & LICENSE
54
55 Copyright 2007 Dave Rolsky, All Rights Reserved.
56
57 This program is free software; you can redistribute it and/or modify
58 it under the same terms as Perl itself.
59
60 =cut