1 package MooseX::ClassAttribute::Role::Meta::Attribute;
6 use MooseX::ClassAttribute::Meta::Method::Accessor;
10 # This is the worst role evar! Really, this should be a subclass,
11 # because it overrides a lot of behavior. However, as a subclass it
12 # won't cooperate with _other_ subclasses like
13 # MX::AttributeHelpers::Base.
15 around 'accessor_metaclass' => sub
17 return 'MooseX::ClassAttribute::Meta::Method::Accessor';
20 around '_process_options' => sub
27 confess 'A class attribute cannot be required'
28 if $options->{required};
30 return $class->$orig( $name, $options );
33 around attach_to_class => sub
41 $self->_initialize($meta)
42 unless $self->is_lazy();
45 around 'detach_from_class' => sub
51 $self->clear_value($meta);
60 if ( $self->has_default() )
62 $self->set_value( $self->default() );
64 elsif ( $self->has_builder() )
66 $self->set_value( $self->_call_builder() );
70 around 'default' => sub
75 my $default = $self->$orig();
77 if ( $self->is_default_a_coderef() )
79 return $default->( $self->associated_class() );
85 around '_call_builder' => sub
91 my $builder = $self->builder();
93 return $class->$builder()
94 if $class->can( $self->builder );
96 confess( "$class does not support builder method '"
103 around 'set_value' => sub
109 $self->associated_class()->set_class_attribute_value( $self->name() => $value );
112 around 'get_value' => sub
117 return $self->associated_class()->get_class_attribute_value( $self->name() );
120 around 'has_value' => sub
125 return $self->associated_class()->has_class_attribute_value( $self->name() );
128 around 'clear_value' => sub
133 return $self->associated_class()->clear_class_attribute_value( $self->name() );