X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=examples%2FClassEncapsulatedAttributes.pod;h=c1ddae88b83ec6be5c041af673fc4de6d623076b;hb=69e3ab0a5a391925610bbb917d81da8d53fd1b91;hp=8a3dabc02d5fda991c017b2c29da931dd0a0112f;hpb=2d711cc8f03b6d8cbfe53f9628883ff33582ed03;p=gitmo%2FClass-MOP.git diff --git a/examples/ClassEncapsulatedAttributes.pod b/examples/ClassEncapsulatedAttributes.pod index 8a3dabc..c1ddae8 100644 --- a/examples/ClassEncapsulatedAttributes.pod +++ b/examples/ClassEncapsulatedAttributes.pod @@ -12,21 +12,22 @@ use base 'Class::MOP::Class'; sub initialize { (shift)->SUPER::initialize(@_, # use the custom attribute metaclass here - ':attribute_metaclass' => 'ClassEncapsulatedAttributes::Attribute', + 'attribute_metaclass' => 'ClassEncapsulatedAttributes::Attribute', ); } sub construct_instance { my ($class, %params) = @_; - my $instance = $class->get_meta_instance->create_instance(); + my $meta_instance = $class->get_meta_instance; + my $instance = $meta_instance->create_instance(); # initialize *ALL* attributes, including masked ones (as opposed to applicable) foreach my $current_class ($class->class_precedence_list()) { my $meta = $current_class->meta; foreach my $attr_name ($meta->get_attribute_list()) { my $attr = $meta->get_attribute($attr_name); - $attr->initialize_instance_slot($instance, \%params); + $attr->initialize_instance_slot($meta_instance, $instance, \%params); } } @@ -45,7 +46,7 @@ use base 'Class::MOP::Attribute'; # alter the way parameters are specified sub initialize_instance_slot { - my ($self, $instance, $params) = @_; + my ($self, $meta_instance, $instance, $params) = @_; # if the attr has an init_arg, use that, otherwise, # use the attributes name itself as the init_arg my $init_arg = $self->init_arg(); @@ -62,14 +63,12 @@ sub initialize_instance_slot { } # now add this to the instance structure - my $meta_instance = $self->associated_class->get_meta_instance; - $meta_instance->set_slot_value_with_init( $instance, $self->slot_name, $val ); + $meta_instance->set_slot_value($instance, $self->name, $val); } -# mangle the slot name to include the fully qualified attr -sub slot_name { - my $self = shift; - $self->associated_class->name . "::" . $self->SUPER::slot_name; +sub name { + my $self = shift; + return ($self->associated_class->name . '::' . $self->SUPER::name) } 1; @@ -134,13 +133,15 @@ is similar to how C++ handles its data members. Thanks to Yuval "nothingmuch" Kogman for the idea for this example. -=head1 AUTHOR +=head1 AUTHORS Stevan Little Estevan@iinteractive.comE +Yuval Kogman Enothingmuch@woobling.comE + =head1 COPYRIGHT AND LICENSE -Copyright 2006 by Infinity Interactive, Inc. +Copyright 2006-2008 by Infinity Interactive, Inc. L