X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FMooseX%2FAttributeHelpers.pm;h=26216f06f3cb6ca4c48c963fc3060cd3535f015e;hb=3dd561ff2fe24585d80d1f9c88db2a42f0191897;hp=4a73b893f481d5d47890382bee4930cdccb4df3d;hpb=cf4136b437c24f1961a431794900975532b3c836;p=gitmo%2FMooseX-AttributeHelpers.git diff --git a/lib/MooseX/AttributeHelpers.pm b/lib/MooseX/AttributeHelpers.pm index 4a73b89..26216f0 100644 --- a/lib/MooseX/AttributeHelpers.pm +++ b/lib/MooseX/AttributeHelpers.pm @@ -1,11 +1,16 @@ package MooseX::AttributeHelpers; -our $VERSION = '0.08'; +our $VERSION = '0.18_01'; +$VERSION = eval $VERSION; our $AUTHORITY = 'cpan:STEVAN'; +use Moose 0.56 (); + use MooseX::AttributeHelpers::Meta::Method::Provided; +use MooseX::AttributeHelpers::Meta::Method::Curried; +use MooseX::AttributeHelpers::Trait::Bool; use MooseX::AttributeHelpers::Trait::Counter; use MooseX::AttributeHelpers::Trait::Number; use MooseX::AttributeHelpers::Trait::String; @@ -18,6 +23,7 @@ use MooseX::AttributeHelpers::Trait::Collection::Bag; use MooseX::AttributeHelpers::Counter; use MooseX::AttributeHelpers::Number; use MooseX::AttributeHelpers::String; +use MooseX::AttributeHelpers::Bool; use MooseX::AttributeHelpers::Collection::List; use MooseX::AttributeHelpers::Collection::Array; use MooseX::AttributeHelpers::Collection::Hash; @@ -51,14 +57,20 @@ MooseX::AttributeHelpers - Extend your attribute interfaces get => 'get_mapping', set => 'set_mapping', }, + curries => { + set => { set_quantity => [ 'quantity' ] } + } ); + # ... my $obj = MyClass->new; - $obj->set_mapping(4, 'foo'); - $obj->set_mapping(5, 'bar'); - $obj->set_mapping(6, 'baz'); + $obj->set_quantity(10); # quantity => 10 + $obj->set_mapping(4, 'foo'); # 4 => 'foo' + $obj->set_mapping(5, 'bar'); # 5 => 'bar' + $obj->set_mapping(6, 'baz'); # 6 => 'baz' + # prints 'bar' print $obj->get_mapping(5) if $obj->exists_in_mapping(5); @@ -75,6 +87,44 @@ used attribute helper methods for more specific types of data. As seen in the L, you specify the extension via the C parameter. Available meta classes are: +=head1 PARAMETERS + +=head2 provides + +This points to a hashref that uses C for the keys and +C for the values. The method will be added to +the object itself and do what you want. + +=head2 curries + +This points to a hashref that uses C for the keys and +has two choices for the value: + +You can supply C<< {method => [ @args ]} >> for the values. The method will be +added to the object itself (always using C<@args> as the beginning arguments). + +Another approach to curry a method provider is to supply a coderef instead of an +arrayref. The code ref takes C<$self>, C<$body>, and any additional arguments +passed to the final method. + + # ... + + curries => { + grep => { + times_with_day => sub { + my ($self, $body, $datetime) = @_; + $body->($self, sub { $_->ymd eq $datetime->ymd }); + } + } + } + + # ... + + $obj->times_with_day(DateTime->now); # takes datetime argument, checks day + + +=head1 METHOD PROVIDERS + =over =item L @@ -85,6 +135,10 @@ Common numerical operations. Methods for incrementing and decrementing a counter attribute. +=item L + +Common methods for boolean values. + =item L Common methods for hash references. @@ -128,6 +182,10 @@ B Robert (rlb3) Boone +Paul (frodwith) Driver + +Shawn (Sartak) Moore + Chris (perigrin) Prather Robert (phaylon) Sedlacek @@ -136,9 +194,19 @@ Tom (dec) Lanyon Yuval Kogman +Jason May + +Cory (gphat) Watson + +Florian (rafl) Ragwitz + +Evan Carroll + +Jesse (doy) Luehrs + =head1 COPYRIGHT AND LICENSE -Copyright 2007, 2008 by Infinity Interactive, Inc. +Copyright 2007-2009 by Infinity Interactive, Inc. L