Acme-Chef
view release on metacpan - search on metacpan
view release on metacpan or search on metacpan
lib/Acme/Chef/Ingredient.pm view on Meta::CPAN
%Measures = (
'' => '',
g => 'dry',
kg => 'dry',
pinch => 'dry',
pinches => 'dry',
ml => 'liquid',
l => 'liquid',
dash => 'liquid',
dashes => 'liquid',
cup => '',
cups => '',
teaspoon => '',
teaspoons => '',
tablespoon => '',
tablespoons => '',
);
%MeasureTypes = (
heaped => 'dry',
level => 'dry',
);
=item new
Acme::Chef::Ingredient constructor. Takes key/value pairs as argument which
will be used as attributes. The following attributes are currently
required:
name
value
measure
measure_type
=cut
sub new {
my $proto = shift;
my $class = ref $proto || $proto;
my $self = {};
if ( ref $proto ) {
%$self = %$proto;
}
my %args = @_;
%$self = (
name => '',
value => undef,
measure => '',
measure_type => '',
type => '',
%$self,
%args,
);
bless $self => $class;
$self->determine_type() if not $self->{type};
return $self;
}
=item type
Returns the type of the Ingredient.
=cut
sub type {
my $self = shift;
$self->determine_type() if $self->{type} eq '';
return $self->{type};
}
=item determine_type
Also returns the type if the Ingredient, but forces a fresh run of the
type inferer.
=cut
sub determine_type {
my $self = shift;
my $type = '';
exists $Measures{$self->{measure}}
or croak "Invalid measure specified: '$self->{measure}'.";
$type = $Measures{ $self->{measure} };
if ( exists $MeasureTypes{ $self->{measure_type} } ) {
if ( $type eq '' ) {
$type = $MeasureTypes{ $self->{measure_type} };
} else {
$MeasureTypes{ $self->{measure_type} } eq $type
or croak "'Measure type' ($self->{measure_type}) does not match type of measure ($type).";
}
}
$self->{type} = $type;
return $self->{type};
}
=item value
Mutator for the Ingredient's value.
=cut
view all matches for this distributionview release on metacpan - search on metacpan
( run in 0.421 second using v1.00-cache-2.02-grep-82fe00e-cpan-1925d2aa809 )