5 use Scalar::Util 'weaken';
11 my $args = $class->BUILDARGS(@_);
13 my $instance = bless {}, $class;
15 for my $attribute ($class->meta->compute_all_applicable_attributes) {
16 my $from = $attribute->init_arg;
17 my $key = $attribute->name;
19 if (defined($from) && exists($args->{$from})) {
20 $args->{$from} = $attribute->coerce_constraint($args->{$from})
21 if $attribute->should_coerce;
22 $attribute->verify_against_type_constraint($args->{$from});
24 $instance->{$key} = $args->{$from};
26 weaken($instance->{$key})
27 if ref($instance->{$key}) && $attribute->is_weak_ref;
29 if ($attribute->has_trigger) {
30 $attribute->trigger->($instance, $args->{$from});
34 if ($attribute->has_default || $attribute->has_builder) {
35 unless ($attribute->is_lazy) {
36 my $default = $attribute->default;
37 my $builder = $attribute->builder;
38 my $value = $attribute->has_builder
40 : ref($default) eq 'CODE'
41 ? $default->($instance)
44 $value = $attribute->coerce_constraint($value)
45 if $attribute->should_coerce;
46 $attribute->verify_against_type_constraint($value);
48 $instance->{$key} = $value;
50 weaken($instance->{$key})
51 if ref($instance->{$key}) && $attribute->is_weak_ref;
55 if ($attribute->is_required) {
56 confess "Attribute (".$attribute->name.") is required";
62 $instance->BUILDALL($args);
71 (ref($_[0]) eq 'HASH')
72 || confess "Single parameters to new() must be a HASH ref";
80 sub DESTROY { shift->DEMOLISHALL }
86 return unless $self->can('BUILD');
88 for my $class (reverse $self->meta->linearized_isa) {
91 my $code = *{ $class . '::BUILD' }{CODE}
101 return unless $self->can('DEMOLISH');
105 for my $class ($self->meta->linearized_isa) {
106 my $code = *{ $class . '::DEMOLISH' }{CODE}
114 require Data::Dumper;
115 local $Data::Dumper::Maxdepth = shift if @_;
116 Data::Dumper::Dumper $self;
121 my ($self, $role_name) = @_;
123 || confess "You must supply a role name to does()";
124 my $meta = $self->meta;
125 foreach my $class ($meta->linearized_isa) {
126 my $m = $meta->initialize($class);
128 if $m->can('does_role') && $m->does_role($role_name);
139 Mouse::Object - we don't need to steenkin' constructor
143 =head2 new arguments -> object
145 Instantiates a new Mouse::Object. This is obviously intended for subclasses.
147 =head2 BUILDALL \%args
149 Calls L</BUILD> on each class in the class hierarchy. This is called at the
154 You may put any business logic initialization in BUILD methods. You don't
155 need to redispatch or return any specific value.
159 Lets you override the arguments that C<new> takes. Return a hashref of
164 Calls L</DEMOLISH> on each class in the class hierarchy. This is called at
169 You may put any business logic deinitialization in DEMOLISH methods. You don't
170 need to redispatch or return any specific value.
173 =head2 does $role_name
175 This will check if the invocant's class "does" a given C<$role_name>.
176 This is similar to "isa" for object, but it checks the roles instead.
179 =head2 B<dump ($maxdepth)>
183 C'mon, how many times have you written the following code while debugging:
188 It can get seriously annoying, so why not just use this.
190 The implementation was lifted directly from Moose::Object.