Lots of files got moved around,a nd some got added.
[gitmo/MooseX-AttributeHelpers.git] / lib / MooseX / AttributeHelpers / MethodProvider / Collection / Bag.pm
@@ -1,25 +1,33 @@
-package MooseX::AttributeHelpers::MethodProvider::Bag;
-use Moose::Role;
+package MooseX::AttributeHelpers::MethodProvider::Collection::Bag;
+use MooseX::AttributeHelpers::MethodProvider;
+use MooseX::AttributeHelpers::MethodProvider::Collection::ImmutableHash;
+use Moose::Util::TypeConstraints;
 
 our $VERSION   = '0.02';
 our $AUTHORITY = 'cpan:STEVAN';
 
-with 'MooseX::AttributeHelpers::MethodProvider::ImmutableHash';
-
-sub add : method {
-    my ($attr, $reader, $writer) = @_;
-    return sub { $reader->($_[0])->{$_[1]}++ };
-}
-
-sub delete : method {
-    my ($attr, $reader, $writer) = @_;
-    return sub { CORE::delete $reader->($_[0])->{$_[1]} };
-}
-
-sub reset : method {
-    my ($attr, $reader, $writer) = @_;
-    return sub { $reader->($_[0])->{$_[1]} = 0 };
-}
+subtype 'Bag' => as 'HashRef[Int]';
+
+add_method_provider 'Collection::Bag' => (
+    type     => 'Bag',
+    consumes => { 'Collection::ImmutableHash' => ':all' },
+    provides => {
+        add => sub {
+            my ($attr, $reader, $writer) = @_;
+            return sub { $reader->($_[0])->{$_[1]}++ };
+        },
+
+        delete => sub {
+            my ($attr, $reader, $writer) = @_;
+            return sub { CORE::delete $reader->($_[0])->{$_[1]} };
+        },
+
+        reset => sub {
+            my ($attr, $reader, $writer) = @_;
+            return sub { $reader->($_[0])->{$_[1]} = 0 };
+        },
+   },
+);
 
 1;
 
@@ -34,7 +42,7 @@ MooseX::AttributeHelpers::MethodProvider::Bag
 =head1 DESCRIPTION
 
 This is a role which provides the method generators for
-L<MooseX::AttributeHelpers::Collection::Bag>.  It also consumes 
+L<MooseX::AttributeHelpers::Collection::Bag>.  It also consumes
 L<MooseX::AttributeHelpers::Collection::ImmutableHash>, and thus provides all
 of its methods asw well.