From: Shawn M Moore Date: Sun, 25 May 2008 01:38:22 +0000 (+0000) Subject: Forgot to commit Trait::Collection::Bag X-Git-Tag: 0.18_01~15 X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=commitdiff_plain;h=ca6ab7d1fd3e5fb7bbd72368b834ad4761b48336;p=gitmo%2FMooseX-AttributeHelpers.git Forgot to commit Trait::Collection::Bag --- diff --git a/lib/MooseX/AttributeHelpers/Trait/Collection/Bag.pm b/lib/MooseX/AttributeHelpers/Trait/Collection/Bag.pm new file mode 100644 index 0000000..5dd0af4 --- /dev/null +++ b/lib/MooseX/AttributeHelpers/Trait/Collection/Bag.pm @@ -0,0 +1,117 @@ + +package MooseX::AttributeHelpers::Trait::Collection::Bag; +use Moose::Role; +use Moose::Util::TypeConstraints; + +our $VERSION = '0.01'; +our $AUTHORITY = 'cpan:STEVAN'; + +use MooseX::AttributeHelpers::MethodProvider::Bag; + +with 'MooseX::AttributeHelpers::Trait::Collection'; + +has 'method_provider' => ( + is => 'ro', + isa => 'ClassName', + predicate => 'has_method_provider', + default => 'MooseX::AttributeHelpers::MethodProvider::Bag' +); + +subtype 'Bag' => as 'HashRef[Int]' + unless find_type_constraint('Bag'); + +sub helper_type { 'Bag' } + +before 'process_options_for_provides' => sub { + my ($self, $options, $name) = @_; + + # Set some default attribute options here unless already defined + if ((my $type = $self->helper_type) && !exists $options->{isa}){ + $options->{isa} = $type; + } + + $options->{default} = sub { +{} } unless exists $options->{default}; +}; + +no Moose::Role; +no Moose::Util::TypeConstraints; + +# register the alias ... +package # hide me from search.cpan.org + Moose::Meta::Attribute::Custom::Trait::Collection::Bag; +sub register_implementation { + 'MooseX::AttributeHelpers::Trait::Collection::Bag' +} + +1; + +__END__ + +=pod + +=head1 NAME + +MooseX::AttributeHelpers::Collection::Bag + +=head1 SYNOPSIS + + package Stuff; + use Moose; + use MooseX::AttributeHelpers; + + has 'word_histogram' => ( + metaclass => 'Collection::Bag', + is => 'ro', + isa => 'Bag', # optional ... as is defalt + provides => { + 'add' => 'add_word', + 'get' => 'get_count_for', + 'empty' => 'has_any_words', + 'count' => 'num_words', + 'delete' => 'delete_word', + } + ); + +=head1 DESCRIPTION + +This module provides a Bag attribute which provides a number of +bag-like operations. See L +for more details. + +=head1 METHODS + +=over 4 + +=item B + +=item B + +=item B + +=item B + +=item B + +=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 Estevan@iinteractive.comE + +=head1 COPYRIGHT AND LICENSE + +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 +