X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FMooseX%2FAttributeHelpers.pm;h=6e365ecee296f66c217078deb17726a12e1e0a8a;hb=3ebd23e61a6d6f3c4dbda39e3b9d90c0b34d52c5;hp=f41ea9026644ce51d61cf1b654ea2e4fb7c87741;hpb=16f40f07ea536c9b94de7e9f47412a6400b121c3;p=gitmo%2FMooseX-AttributeHelpers.git diff --git a/lib/MooseX/AttributeHelpers.pm b/lib/MooseX/AttributeHelpers.pm index f41ea90..6e365ec 100644 --- a/lib/MooseX/AttributeHelpers.pm +++ b/lib/MooseX/AttributeHelpers.pm @@ -1,19 +1,29 @@ package MooseX::AttributeHelpers; -our $VERSION = '0.08'; +our $VERSION = '0.22'; +$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; use MooseX::AttributeHelpers::Trait::Collection::List; +use MooseX::AttributeHelpers::Trait::Collection::Array; +use MooseX::AttributeHelpers::Trait::Collection::Hash; +use MooseX::AttributeHelpers::Trait::Collection::ImmutableHash; +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; @@ -47,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); @@ -71,20 +87,70 @@ 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 Common numerical operations. +=item L + +Common methods for string operations. + =item L Methods for incrementing and decrementing a counter attribute. +=item L + +Common methods for boolean values. + =item L Common methods for hash references. +=item L + +Common methods for inspecting hash references. + =item L Common methods for array references. @@ -124,6 +190,10 @@ B Robert (rlb3) Boone +Paul (frodwith) Driver + +Shawn (Sartak) Moore + Chris (perigrin) Prather Robert (phaylon) Sedlacek @@ -132,9 +202,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