Lots of files got moved around,a nd some got added.
[gitmo/MooseX-AttributeHelpers.git] / lib / MooseX / AttributeHelpers / MethodProvider / Collection / Hash.pm
diff --git a/lib/MooseX/AttributeHelpers/MethodProvider/Collection/Hash.pm b/lib/MooseX/AttributeHelpers/MethodProvider/Collection/Hash.pm
new file mode 100644 (file)
index 0000000..b323706
--- /dev/null
@@ -0,0 +1,105 @@
+package MooseX::AttributeHelpers::MethodProvider::Collection::Hash;
+use MooseX::AttributeHelpers::MethodProvider;
+use MooseX::AttributeHelpers::MethodProvider::Util qw(type_check);
+use MooseX::AttributeHelpers::MethodProvider::Collection::ImmutableHash;
+
+our $VERSION   = '0.04';
+our $AUTHORITY = 'cpan:STEVAN';
+
+add_method_provider 'Collection::Hash' => (
+    type     => 'HashRef',
+    consumes => { 'Collection::ImmutableHash' => ':all' },
+    provides => {
+        set => sub {
+            my ($attr, $reader, $writer) = @_;
+            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;
+                    }
+                },
+            );
+        },
+
+        clear => sub {
+            my ($attr, $reader, $writer) = @_;
+            return sub { %{$reader->($_[0])} = () };
+        },
+
+        delete => sub {
+            my ($attr, $reader, $writer) = @_;
+            return sub {
+                my $hashref = $reader->(shift);
+                CORE::delete @{$hashref}{@_};
+            };
+        },
+    },
+);
+
+1;
+
+__END__
+
+=pod
+
+=head1 NAME
+
+MooseX::AttributeHelpers::MethodProvider::Hash
+
+=head1 DESCRIPTION
+
+This is a role which provides the method generators for
+L<MooseX::AttributeHelpers::Collection::Hash>.  It consumes
+L<MooseX::AttributeHelpers::MethodProvider::ImmutableHash>, and thus
+provides all its methods as wel.
+
+=head1 PROVIDED METHODS
+
+=over 4
+
+=item B<count>
+
+Returns the number of items in the hash.
+
+=item B<delete(@keys)>
+
+Deletes the specified keys from the hash.
+
+=item B<clear>
+
+Deletes all keys from the hash.
+
+=item B<set>
+
+Sets the specified keys to the specified values.  You can specify several of
+these at once, in key => value order.
+
+=back
+
+=head1 BUGS
+
+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.
+
+=head1 AUTHOR
+
+Stevan Little E<lt>stevan@iinteractive.comE<gt>
+
+=head1 COPYRIGHT AND LICENSE
+
+Copyright 2007-2008 by Infinity Interactive, Inc.
+
+L<http://www.iinteractive.com>
+
+This library is free software; you can redistribute it and/or modify
+it under the same terms as Perl itself.
+
+=cut
+