Docs for MM::TC::TypeRegistry
[gitmo/Moose.git] / lib / Moose / Object.pm
CommitLineData
fcd84ca9 1
2package Moose::Object;
3
4use strict;
5use warnings;
648e79ae 6
9922fa6f 7use if ( not our $__mx_is_compiled ), 'Moose::Meta::Class';
8use if ( not our $__mx_is_compiled ), metaclass => 'Moose::Meta::Class';
bc1e29b5 9
4b2189ce 10our $VERSION = '0.72';
e606ae5f 11$VERSION = eval $VERSION;
d44714be 12our $AUTHORITY = 'cpan:STEVAN';
fcd84ca9 13
14sub new {
2c0cbef7 15 my $class = shift;
e606ae5f 16 my $params = $class->BUILDARGS(@_);
17 my $self = $class->meta->new_object($params);
18 $self->BUILDALL($params);
19 return $self;
20}
21
22sub BUILDARGS {
23 my $class = shift;
a62dcd43 24 if ( scalar @_ == 1 ) {
25 unless ( defined $_[0] && ref $_[0] eq 'HASH' ) {
26 $class->meta->throw_error(
27 "Single parameters to new() must be a HASH ref",
28 data => $_[0] );
86629f93 29 }
a62dcd43 30 return { %{ $_[0] } };
31 }
8a157bab 32 else {
e606ae5f 33 return {@_};
8a157bab 34 }
fcd84ca9 35}
36
c0e30cf5 37sub BUILDALL {
d44714be 38 # NOTE: we ask Perl if we even
39 # need to do this first, to avoid
40 # extra meta level calls
fb1e11d5 41 return unless $_[0]->can('BUILD');
42 my ($self, $params) = @_;
43 foreach my $method (reverse $self->meta->find_all_methods_by_name('BUILD')) {
b8f014e7 44 $method->{code}->execute($self, $params);
fb1e11d5 45 }
c0e30cf5 46}
47
48sub DEMOLISHALL {
3a0c064a 49 my $self = shift;
cb5c79c9 50 # NOTE: we ask Perl if we even
51 # need to do this first, to avoid
52 # extra meta level calls
53 return unless $self->can('DEMOLISH');
3a0c064a 54 foreach my $method ($self->meta->find_all_methods_by_name('DEMOLISH')) {
b8f014e7 55 $method->{code}->execute($self);
3a0c064a 56 }
57}
58
59sub DESTROY {
3a0c064a 60 # if we have an exception here ...
ca0e380d 61 if ($@) {
62 # localize the $@ ...
63 local $@;
3a0c064a 64 # run DEMOLISHALL ourselves, ...
ca0e380d 65 $_[0]->DEMOLISHALL;
3a0c064a 66 # and return ...
67 return;
68 }
ca0e380d 69 # otherwise it is normal destruction
f93f7be9 70 $_[0]->DEMOLISHALL;
c0e30cf5 71}
72
e606ae5f 73# support for UNIVERSAL::DOES ...
74BEGIN {
75 my $does = UNIVERSAL->can("DOES") ? "SUPER::DOES" : "isa";
76 eval 'sub DOES {
77 my ( $self, $class_or_role_name ) = @_;
78 return $self->'.$does.'($class_or_role_name)
79 || $self->does($class_or_role_name);
80 }';
81}
82
ef333f17 83# new does() methods will be created
50bc108b 84# as appropiate see Moose::Meta::Role
0677220d 85sub does {
bdabd620 86 my ($self, $role_name) = @_;
bdabd620 87 my $meta = $self->meta;
be05faea 88 (defined $role_name)
89 || $meta->throw_error("You much supply a role name to does()");
bdabd620 90 foreach my $class ($meta->class_precedence_list) {
587e457d 91 my $m = $meta->initialize($class);
bdabd620 92 return 1
587e457d 93 if $m->can('does_role') && $m->does_role($role_name);
bdabd620 94 }
95 return 0;
0677220d 96}
ef333f17 97
f742dfef 98sub dump {
99 my $self = shift;
100 require Data::Dumper;
1a386a6c 101 local $Data::Dumper::Maxdepth = shift if @_;
f742dfef 102 Data::Dumper::Dumper $self;
103}
104
fcd84ca9 1051;
106
107__END__
108
109=pod
110
111=head1 NAME
112
e522431d 113Moose::Object - The base object for Moose
fcd84ca9 114
fcd84ca9 115=head1 DESCRIPTION
116
6ba6d68c 117This serves as the base object for all Moose classes. Every
118effort will be made to ensure that all classes which C<use Moose>
119will inherit from this class. It provides a default constructor
120and destructor, which run all the BUILD and DEMOLISH methods in
121the class tree.
122
123You don't actually I<need> to inherit from this in order to
124use Moose though. It is just here to make life easier.
125
fcd84ca9 126=head1 METHODS
127
128=over 4
129
130=item B<meta>
131
6ba6d68c 132This will return the metaclass associated with the given class.
133
fcd84ca9 134=item B<new>
135
e606ae5f 136This will call C<BUILDARGS>, create a new instance and call C<BUILDALL>.
137
138=item B<BUILDARGS>
139
140This method processes an argument list into a hash reference. It is used by
141C<new>.
e522431d 142
c0e30cf5 143=item B<BUILDALL>
144
d7f17ebb 145This will call every C<BUILD> method in the inheritance hierarchy,
146and pass it a hash-ref of the the C<%params> passed to C<new>.
e522431d 147
c0e30cf5 148=item B<DEMOLISHALL>
149
e522431d 150This will call every C<DEMOLISH> method in the inheritance hierarchy.
151
ef333f17 152=item B<does ($role_name)>
153
02a0fb52 154This will check if the invocant's class C<does> a given C<$role_name>.
155This is similar to C<isa> for object, but it checks the roles instead.
156
e606ae5f 157=item B<DOES ($class_or_role_name)>
158
159A Moose Role aware implementation of L<UNIVERSAL/DOES>.
160
161C<DOES> is equivalent to C<isa> or C<does>.
162
f742dfef 163=item B<dump ($maxdepth)>
164
6549b0d1 165C'mon, how many times have you written the following code while debugging:
f742dfef 166
167 use Data::Dumper;
168 warn Dumper $obj;
169
170It can get seriously annoying, so why not just use this.
171
fcd84ca9 172=back
173
174=head1 BUGS
175
176All complex software has bugs lurking in it, and this module is no
177exception. If you find a bug please either email me, or add the bug
178to cpan-RT.
179
fcd84ca9 180=head1 AUTHOR
181
182Stevan Little E<lt>stevan@iinteractive.comE<gt>
183
184=head1 COPYRIGHT AND LICENSE
185
2840a3b2 186Copyright 2006-2009 by Infinity Interactive, Inc.
fcd84ca9 187
188L<http://www.iinteractive.com>
189
190This library is free software; you can redistribute it and/or modify
191it under the same terms as Perl itself.
192
9922fa6f 193=cut