Paul Driver > MooseX-AttributeDefaults > MooseX::AttributeDefaults

Download:
MooseX-AttributeDefaults-0.02.tar.gz

Dependencies

Annotate this POD

View/Report Bugs
Module Version: 0.02   Source  

NAME ^

MooseX::AttributeDefaults - Role to provide default option for your attribute metaclasses

VERSION ^

Version 0.02

SYNOPSIS ^

Although you can do similar things by overriding attributes in subclasses of Moose::Meta::Attribute, there are a couple of gotchas (as of this writing, for instance, overriding 'is' does nothing at all). This role abstracts the implementation details of the available workarounds.

    package My::Custom::Metaclass;
    use Moose;

    extends 'Moose::Meta::Attribute';
    with    'MooseX::AttributeDefaults';

    sub default_options {
      my ($class, $name) = @_;
      
      return (
        is      => 'ro',
        isa     => 'Str',
        default => "default value for $name";
      );
    }

    package Some::Class;
    use Moose;

    has 'attr' => (
      metaclass => 'My::Custom::Metaclass',
      predicate => 'has_attr',
    );

    # 'attr' is a ro string with "default value for attr" as its 
    # default and a 'has_attr' predicate

    ### Or as a trait instead of a metaclass
    
    package Acme::Common::Array;
    use Moose::Role;

    with qw(MooseX::AttributeDefaults);

    sub default_options {
      is      => 'ro',
      isa     => 'ArrayRef',
      default => sub { [] },
    }

    package Some::Class;
    use Moose;
    use MooseX::AttributeHelpers;

    has attr => (
      metaclass => 'Collection::Array',
      traits    => [qw(Acme::Common::Array)],
      provides  => {
        'push' => 'add_attr',
      },
    );

REQUIRED METHODS ^

default_options

Return a list of options to default to. This is called as a class method with the attribute name as its only argument.

AUTHOR ^

Paul Driver, <frodwith at cpan.org>

COPYRIGHT & LICENSE ^

Copyright (C) 2008 Paul Driver.

This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself.

syntax highlighting: