+++ /dev/null
-package MooseX::ClassAttribute::Meta::Attribute;
-
-use strict;
-use warnings;
-
-use MooseX::ClassAttribute::Meta::Method::Accessor;
-
-use Moose;
-
-extends 'Moose::Meta::Attribute';
-
-
-sub accessor_metaclass { 'MooseX::ClassAttribute::Meta::Method::Accessor' }
-
-sub _process_options
-{
- my $class = shift;
- my $name = shift;
- my $options = shift;
-
- confess 'A class attribute cannot be required'
- if $options->{required};
-
- return $class->SUPER::_process_options( $name, $options );
-}
-
-sub attach_to_class
-{
- my $self = shift;
- my $meta = shift;
-
- $self->SUPER::attach_to_class($meta);
-
- $self->_initialize($meta)
- unless $self->is_lazy();
-}
-
-sub detach_from_class
-{
- my $self = shift;
- my $meta = shift;
-
- $self->clear_value($meta);
-
- $self->SUPER::detach_from_class($meta);
-}
-
-sub _initialize
-{
- my $self = shift;
-
- if ( $self->has_default() )
- {
- $self->set_value( $self->default() );
- }
- elsif ( $self->has_builder() )
- {
- $self->set_value( $self->_call_builder() );
- }
-}
-
-sub default
-{
- my $self = shift;
-
- my $default = $self->SUPER::default();
-
- if ( $self->is_default_a_coderef() )
- {
- return $default->( $self->associated_class() );
- }
-
- return $default;
-}
-
-sub _call_builder
-{
- my $self = shift;
- my $class = shift;
-
- my $builder = $self->builder();
-
- return $class->$builder()
- if $class->can( $self->builder );
-
- confess( "$class does not support builder method '"
- . $self->builder
- . "' for attribute '"
- . $self->name
- . "'" );
-}
-
-sub set_value
-{
- my $self = shift;
- my $value = shift;
-
- $self->associated_class()->set_class_attribute_value( $self->name() => $value );
-}
-
-sub get_value
-{
- my $self = shift;
-
- return $self->associated_class()->get_class_attribute_value( $self->name() );
-}
-
-sub has_value
-{
- my $self = shift;
-
- return $self->associated_class()->has_class_attribute_value( $self->name() );
-}
-
-sub clear_value
-{
- my $self = shift;
-
- return $self->associated_class()->clear_class_attribute_value( $self->name() );
-}
-
-no Moose;
-
-1;