package Brackup::ConfigSection;
use strict;
use warnings;
sub new {
my ($class, $name) = @_;
return bless {
_name => $name,
_accessed => {}, # key => 1
}, $class;
}
sub name {
my $self = shift;
return $self->{_name};
}
sub add {
my ($self, $key, $val) = @_;
push @{ $self->{$key} ||= [] }, $val;
}
sub unused_config {
my $self = shift;
return sort grep { $_ ne "_name" && $_ ne "_accessed" && ! $self->{_accessed}{$_} } keys %$self;
}
sub path_value {
my ($self, $key) = @_;
my $val = $self->value($key) || "";
die "Path '$key' of '$val' isn't a valid directory\n"
unless $val && -d $val;
return $val;
}
sub byte_value {
my ($self, $key) = @_;
my $val = $self->value($key);
return 0 unless $val;
return $1 if $val =~ /^(\d+)b?$/i;
return $1 * 1024 if $val =~ /^(\d+)kb?$/i;
return $1 * 1024 * 1024 if $val =~ /^(\d+)mb?$/i;
die "Unrecognized size format: '$val'\n";
}
sub value {
my ($self, $key) = @_;
$self->{_accessed}{$key} = 1;
my $vals = $self->{$key};
return undef unless $vals;
die "Configuration section '$self->{_name}' has multiple values of key '$key' where only one is expected.\n"
if @$vals > 1;
return $vals->[0];
}
sub values {
my ($self, $key) = @_;
$self->{_accessed}{$key} = 1;
my $vals = $self->{$key};
return () unless $vals;
return @$vals;
}
1;
syntax highlighted by Code2HTML, v. 0.9.1