Acme-Chef
view release on metacpan - search on metacpan
view release on metacpan or search on metacpan
lib/Acme/Chef/Container.pm view on Meta::CPAN
package Acme::Chef::Container;
use strict;
use warnings;
use Carp;
use Acme::Chef::Ingredient;
use vars qw/$VERSION/;
$VERSION = '1.00';
=head1 NAME
Acme::Chef::Container - Internal module used by Acme::Chef
=head1 SYNOPSIS
use Acme::Chef;
=head1 DESCRIPTION
Please see L<Acme::Chef>;
=head2 METHODS
This is a list of methods in this package.
=over 2
=cut
=item new
This is the Acme::Chef::Container constructor. Creates a new
Acme::Chef::Container object. All arguments are treated as key/value pairs for
object attributes.
=cut
sub new {
my $proto = shift;
my $class = ref $proto || $proto;
my $self = {};
if (ref $proto) {
%$self = %$proto;
$self->{contents} = [ map { $_->new() } @{$self -> {contents}} ];
}
%$self = (
contents => [],
%$self,
@_,
);
return bless $self => $class;
}
=item put
This method implements the 'put' command. Please refer to L<Acme::Chef> for
details.
=cut
sub put {
my $self = shift;
my @ingredients = @_;
push @{$self->{contents}}, $_->new() for @ingredients;
return $self;
}
=item fold
This method implements the 'fold' command. Please refer to L<Acme::Chef> for
details.
=cut
sub fold {
my $self = shift;
my $ingredient = shift;
croak "Invalid operation on empty container: fold."
unless @{$self->{contents}};
my $new_val = pop @{ $self->{contents} };
$ingredient->value( $new_val->value() );
return $ingredient;
}
=item add
This method implements the 'add' command. Please refer to L<Acme::Chef> for
details.
=cut
sub add {
my $self = shift;
my $ingredient = shift;
croak "Invalid operation on empty container: add."
unless @{$self->{contents}};
$self->{contents}->[-1]->value(
$self->{contents}->[-1]->value() +
$ingredient->value()
view all matches for this distributionview release on metacpan - search on metacpan
( run in 1.274 second using v1.00-cache-2.02-grep-82fe00e-cpan-1925d2aa809 )