1 package MooseX::ClassAttribute::Meta::Attribute;
6 use MooseX::ClassAttribute::Meta::Method::Accessor;
10 extends 'Moose::Meta::Attribute';
13 sub accessor_metaclass { 'MooseX::ClassAttribute::Meta::Method::Accessor' }
21 confess 'A class attribute cannot be required'
22 if $options->{required};
24 return $class->SUPER::_process_options( $name, $options );
32 $self->SUPER::attach_to_class($meta);
34 $self->_initialize($meta)
35 unless $self->is_lazy();
43 $self->clear_value($meta);
45 $self->SUPER::detach_from_class($meta);
52 if ( $self->has_default() )
54 $self->set_value( $self->default() );
56 elsif ( $self->has_builder() )
58 $self->set_value( $self->_call_builder() );
66 my $default = $self->SUPER::default();
68 if ( $self->is_default_a_coderef() )
70 return $default->( $self->associated_class() );
81 my $builder = $self->builder();
83 return $class->$builder()
84 if $class->can( $self->builder );
86 confess( "$class does not support builder method '"
98 $self->associated_class()->set_class_attribute_value( $self->name() => $value );
105 return $self->associated_class()->get_class_attribute_value( $self->name() );
112 return $self->associated_class()->has_class_attribute_value( $self->name() );
119 return $self->associated_class()->clear_class_attribute_value( $self->name() );