X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FMooseX%2FAttributeHelpers%2FCollection%2FHash.pm;h=34203c9f338af2b865c74c5639872a496ebedd3c;hb=9e2db1c2f1fac57b7908a080ba8c552e4ae2b59c;hp=fc070312f83941d9d7b2cfcd88332723b6b65cfc;hpb=8c651099f4d73825057940d246f69f2eb63e1e7c;p=gitmo%2FMooseX-AttributeHelpers.git diff --git a/lib/MooseX/AttributeHelpers/Collection/Hash.pm b/lib/MooseX/AttributeHelpers/Collection/Hash.pm index fc07031..34203c9 100644 --- a/lib/MooseX/AttributeHelpers/Collection/Hash.pm +++ b/lib/MooseX/AttributeHelpers/Collection/Hash.pm @@ -2,58 +2,25 @@ package MooseX::AttributeHelpers::Collection::Hash; use Moose; -our $VERSION = '0.01'; +our $VERSION = '0.17'; +$VERSION = eval $VERSION; our $AUTHORITY = 'cpan:STEVAN'; -extends 'MooseX::AttributeHelpers::Collection'; +use MooseX::AttributeHelpers::MethodProvider::Hash; -sub helper_type { 'HashRef' } +extends 'MooseX::AttributeHelpers::Collection'; -has '+method_constructors' => ( - default => sub { - return +{ - 'get' => sub { - my $attr = shift; - return sub { $attr->get_value($_[0])->{$_[1]} }; - }, - 'set' => sub { - my $attr = shift; - if ($attr->has_container_type) { - my $container_type_constraint = $attr->container_type_constraint; - return sub { - ($container_type_constraint->check($_[2])) - || confess "Value $_[2] did not pass container type constraint"; - $attr->get_value($_[0])->{$_[1]} = $_[2] - }; - } - else { - return sub { $attr->get_value($_[0])->{$_[1]} = $_[2] }; - } - }, - 'keys' => sub { - my $attr = shift; - return sub { keys %{$attr->get_value($_[0])} }; - }, - 'values' => sub { - my $attr = shift; - return sub { values %{$attr->get_value($_[0])} }; - }, - 'count' => sub { - my $attr = shift; - return sub { scalar keys %{$attr->get_value($_[0])} }; - }, - 'empty' => sub { - my $attr = shift; - return sub { scalar keys %{$attr->get_value($_[0])} ? 1 : 0 }; - } - } - } +has '+method_provider' => ( + default => 'MooseX::AttributeHelpers::MethodProvider::Hash' ); +sub helper_type { 'HashRef' } + no Moose; # register the alias ... -package Moose::Meta::Attribute::Custom::Collection::Hash; +package # hide me from search.cpan.org + Moose::Meta::Attribute::Custom::Collection::Hash; sub register_implementation { 'MooseX::AttributeHelpers::Collection::Hash' } @@ -65,15 +32,51 @@ __END__ =head1 NAME +MooseX::AttributeHelpers::Collection::Hash + =head1 SYNOPSIS + package Stuff; + use Moose; + use MooseX::AttributeHelpers; + + has 'options' => ( + metaclass => 'Collection::Hash', + is => 'ro', + isa => 'HashRef[Str]', + default => sub { {} }, + provides => { + 'set' => 'set_option', + 'get' => 'get_option', + 'empty' => 'has_options', + 'count' => 'num_options', + 'delete' => 'delete_option', + } + ); + =head1 DESCRIPTION +This module provides a Hash attribute which provides a number of +hash-like operations. See L +for more details. + =head1 METHODS +=over 4 + +=item B + +=item B + +=item B + +=item B + +=back + =head1 BUGS -All complex software has bugs lurking in it, and this module is no +All complex software has bugs lurking in it, and this module is no exception. If you find a bug please either email me, or add the bug to cpan-RT. @@ -83,11 +86,11 @@ Stevan Little Estevan@iinteractive.comE =head1 COPYRIGHT AND LICENSE -Copyright 2007 by Infinity Interactive, Inc. +Copyright 2007-2008 by Infinity Interactive, Inc. L This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself. -=cut \ No newline at end of file +=cut