MooseX::ClassAttribute::Trait::Role - A trait for roles with class attributes


MooseX-ClassAttribute documentation Contained in the MooseX-ClassAttribute distribution.

Index


Code Index:

NAME

Top

MooseX::ClassAttribute::Trait::Role - A trait for roles with class attributes

VERSION

Top

version 0.26

SYNOPSIS

Top

  for my $attr ( HasClassAttributes->meta()->get_all_class_attributes() )
  {
      print $attr->name();
  }

DESCRIPTION

Top

This role adds awareness of class attributes to a role metaclass object. It provides a set of introspection methods that largely parallel the existing attribute methods, except they operate on class attributes.

METHODS

Top

Every method provided by this role has an analogous method in Class::MOP::Class or Moose::Meta::Class for regular attributes.

$meta->has_class_attribute($name)

$meta->get_class_attribute($name)

$meta->get_class_attribute_list()

These methods are exactly like their counterparts in MooseX::ClassAttribute::Trait::Class.

$meta->add_class_attribute(...)

This accepts the same options as the Moose::Meta::Attribute add_attribute() method. However, if an attribute is specified as "required" an error will be thrown.

$meta->remove_class_attribute($name)

If the named class attribute exists, it is removed from the role.

BUGS

Top

See MooseX::ClassAttribute for details.

AUTHOR

Top

Dave Rolsky <autarch@urth.org>

COPYRIGHT AND LICENSE

Top


MooseX-ClassAttribute documentation Contained in the MooseX-ClassAttribute distribution.

package MooseX::ClassAttribute::Trait::Role;
BEGIN {
  $MooseX::ClassAttribute::Trait::Role::VERSION = '0.26';
}

use strict;
use warnings;

use MooseX::ClassAttribute::Meta::Role::Attribute;
use Scalar::Util qw( blessed );

use namespace::autoclean;
use Moose::Role;

with 'MooseX::ClassAttribute::Trait::Mixin::HasClassAttributes';

around add_class_attribute => sub {
    my $orig = shift;
    my $self = shift;
    my $attr = (
        blessed $_[0] && $_[0]->isa('Class::MOP::Mixin::AttributeCore')
        ? $_[0]
        : MooseX::ClassAttribute::Meta::Role::Attribute->new(@_)
    );

    $self->$orig($attr);

    return $attr;
};

sub _attach_class_attribute {
    my ( $self, $attribute ) = @_;

    $attribute->attach_to_role($self);
}

sub composition_class_roles {
    return 'MooseX::ClassAttribute::Trait::Role::Composite';
}

1;

# ABSTRACT: A trait for roles with class attributes




__END__