Moose::Meta::Attribute::Native(3pm)
NAME
Moose::Meta::Attribute::Native - Extend your attribute interfaces
SYNOPSIS
package MyClass;
use Moose;
has 'mapping' => (
traits => [ 'Hash' ],
is => 'rw',
isa => 'HashRef[Str]',
default => sub { {} },
handles => {
exists_in_mapping => 'exists',
ids_in_mapping => 'keys',
get_mapping => 'get',
set_mapping => 'set',
set_quantity => [ set => 'quantity' ],
},
);
# ...
my $obj = MyClass->new;
$obj->set_quantity(10); # quantity => 10
$obj->set_mapping('foo', 4); # foo => 4
$obj->set_mapping('bar', 5); # bar => 5
$obj->set_mapping('baz', 6); # baz => 6
# prints 5
print $obj->get_mapping('bar') if $obj->exists_in_mapping('bar');
# prints 'quantity, foo, bar, baz'
print join ', ', $obj->ids_in_mapping;
DESCRIPTION
While Moose attributes provide a way to name your accessors, readers,
writers, clearers and predicates, this set of traits provides commonly
used attribute helper methods for more specific types of data.
As seen in the "SYNOPSIS", you specify the data structure via the
"trait" parameter. Available traits are below; see "METHOD PROVIDERS".
This module used to exist as the MooseX::AttributeHelpers extension. It
was very commonly used, so we moved it into core Moose. Since this gave
us a chance to change the interface, you will have to change your code
or continue using the MooseX::AttributeHelpers extension.
MooseX::AttributeHelpers should continue to work.
PARAMETERS
- handles
- This is like "handles" in "has" in Moose, but only HASH references are
allowed. Keys are method names that you want installed locally, and
values are methods from the method providers (below). Currying with
delegated methods works normally for "handles".
METHOD PROVIDERS
- Number
- Common numerical operations.
has 'integer' => (traits => ['Number'],
is => 'ro',
isa => 'Int',
default => 5,
handles => {set => 'set',
add => 'add',
sub => 'sub',
mul => 'mul',
div => 'div',
mod => 'mod',
abs => 'abs',
# ...}); - String
- Common methods for string operations.
has 'text' => (traits => ['String'],
is => 'rw',
isa => 'Str',
default => q{},
handles => {add_text => 'append',
replace_text => 'replace',
# ...}); - Counter
- Methods for incrementing and decrementing a counter attribute.
has 'counter' => (traits => ['Counter'],
is => 'ro',
isa => 'Num',
default => 0,
handles => {inc_counter => 'inc',
dec_counter => 'dec',
reset_counter => 'reset',
# ...}); - Bool
- Common methods for boolean values.
has 'is_lit' => (traits => ['Bool'],
is => 'rw',
isa => 'Bool',
default => 0,
handles => {illuminate => 'set',
darken => 'unset',
flip_switch => 'toggle',
is_dark => 'not',
# ...}); - Hash
- Common methods for hash references.
has 'options' => (traits => ['Hash'],
is => 'ro',
isa => 'HashRef[Str]',
default => sub { {} },
handles => {set_option => 'set',
get_option => 'get',
has_option => 'exists',
# ...}); - Array
- Common methods for array references.
has 'queue' => (traits => ['Array'],
is => 'ro',
isa => 'ArrayRef[Str]',
default => sub { [] },
handles => {add_item => 'push',
next_item => 'shift',
# ...}); - Code
- Common methods for code references.
has 'callback' => (traits => ['Code'],
is => 'ro',
isa => 'CodeRef',
default => sub { sub { 'called' } },
handles => {call => 'execute',
# ...});
BUGS
See "BUGS" in Moose for details on reporting bugs.
AUTHOR
Stevan Little <stevan@iinteractive.com>
with contributions from:
Robert (rlb3) Boone
Paul (frodwith) Driver
Shawn (Sartak) Moore
Chris (perigrin) Prather
Robert (phaylon) Sedlacek
Tom (dec) Lanyon
Yuval Kogman
Jason May
Cory (gphat) Watson
Florian (rafl) Ragwitz
Evan Carroll
Jesse (doy) Luehrs
Jay Hannah
Robert Buels
COPYRIGHT AND LICENSE
Copyright 2007-2009 by Infinity Interactive, Inc.
<http://www.iinteractive.com>
- This library is free software; you can redistribute it and/or modify it
under the same terms as Perl itself.