use Carp 'confess';
use Scalar::Util 'weaken', 'blessed';
-our $VERSION = '0.55';
+our $VERSION = '0.56';
our $AUTHORITY = 'cpan:STEVAN';
use Moose::Meta::Method::Overriden;
return 0;
}
+sub new_object {
+ my ($class, %params) = @_;
+ my $self = $class->SUPER::new_object(%params);
+ foreach my $attr ($class->compute_all_applicable_attributes()) {
+ # if we have a trigger, then ...
+ if ($attr->can('has_trigger') && $attr->has_trigger) {
+ # make sure we have an init-arg ...
+ if (defined(my $init_arg = $attr->init_arg)) {
+ # now make sure an init-arg was passes ...
+ if (exists $params{$init_arg}) {
+ # and if get here, fire the trigger
+ $attr->trigger->(
+ $self,
+ # check if there is a coercion
+ ($attr->should_coerce
+ # and if so, we need to grab the
+ # value that is actually been stored
+ ? $attr->get_read_method_ref->($self)
+ # otherwise, just get the value from
+ # the constructor params
+ : $params{$init_arg}),
+ $attr
+ );
+ }
+ }
+ }
+ }
+ return $self;
+}
+
sub construct_instance {
my ($class, %params) = @_;
my $meta_instance = $class->get_meta_instance;
sub get_method_map {
my $self = shift;
- if (defined $self->{'$!_package_cache_flag'} &&
- $self->{'$!_package_cache_flag'} == Class::MOP::check_package_cache_flag($self->meta->name)) {
- return $self->{'%!methods'};
+ my $current = Class::MOP::check_package_cache_flag($self->name);
+
+ if (defined $self->{'_package_cache_flag'} && $self->{'_package_cache_flag'} == $current) {
+ return $self->{'methods'};
}
- my $map = $self->{'%!methods'};
+ $self->{_package_cache_flag} = $current;
+
+ my $map = $self->{'methods'};
my $class_name = $self->name;
my $method_metaclass = $self->method_metaclass;
foreach my $super (@superclasses) {
# don't bother if it does not have a meta.
next unless $super->can('meta');
+ next unless $super->meta->isa("Class::MOP::Class");
# get the name, make sure we take
# immutable classes into account
my $super_meta_name = ($super->meta->is_immutable
Override original to lock C<add_role> and memoize C<calculate_all_roles>
+=item B<new_object>
+
+We override this method to support the C<trigger> attribute option.
+
=item B<construct_instance>
This provides some Moose specific extensions to this method, you