package MooseX::AttributeHelpers::MethodProvider::Hash;
use Moose::Role;
+use MooseX::AttributeHelpers::Collection::TypeCheck;
-our $VERSION = '0.03';
+our $VERSION = '0.04';
our $AUTHORITY = 'cpan:STEVAN';
with 'MooseX::AttributeHelpers::MethodProvider::ImmutableHash';
sub set : method {
my ($attr, $reader, $writer) = @_;
- if ($attr->has_type_constraint && $attr->type_constraint->isa('Moose::Meta::TypeConstraint::Parameterized')) {
- my $container_type_constraint = $attr->type_constraint->type_parameter;
- return sub {
- ($container_type_constraint->check($_[2]))
- || confess "Value " . ($_[2]||'undef') . " did not pass container type constraint";
- $reader->($_[0])->{$_[1]} = $_[2]
- };
- }
- else {
- return sub { $reader->($_[0])->{$_[1]} = $_[2] };
- }
+ type_check(
+ $attr,
+ sub {
+ my ($self, %pairs) = @_;
+ return (values %pairs);
+ },
+ sub {
+ my ($self, @pairs) = @_;
+ my $hash = $reader->($self);
+ while (@pairs) {
+ my $key = shift(@pairs);
+ my $value = shift(@pairs);
+ $hash->{$key} = $value;
+ }
+ },
+ );
}
sub clear : method {
sub delete : method {
my ($attr, $reader, $writer) = @_;
- return sub { CORE::delete $reader->($_[0])->{$_[1]} };
+ return sub {
+ my $hashref = $reader->(shift);
+ CORE::delete @{$hashref}{@_};
+ };
}
1;
=head1 DESCRIPTION
This is a role which provides the method generators for
-L<MooseX::AttributeHelpers::Collection::Hash>.
-
-This role is composed from the
-L<MooseX::AttributeHelpers::Collection::ImmutableHash> role.
-
-=head1 METHODS
-
-=over 4
-
-=item B<meta>
-
-=back
+L<MooseX::AttributeHelpers::Collection::Hash>. It consumes
+L<MooseX::AttributeHelpers::MethodProvider::ImmutableHash>, and thus
+provides all its methods as wel.
=head1 PROVIDED METHODS
=item B<count>
-=item B<delete>
-
-=item B<empty>
+Returns the number of items in the hash.
-=item B<clear>
+=item B<delete(@keys)>
-=item B<exists>
+Deletes the specified keys from the hash.
-=item B<get>
+=item B<clear>
-=item B<keys>
+Deletes all keys from the hash.
=item B<set>
-=item B<values>
-
-=item B<kv>
+Sets the specified keys to the specified values. You can specify several of
+these at once, in key => value order.
=back
=head1 COPYRIGHT AND LICENSE
-Copyright 2007 by Infinity Interactive, Inc.
+Copyright 2007-2008 by Infinity Interactive, Inc.
L<http://www.iinteractive.com>