Data-Header-Fields
view release on metacpan or search on metacpan
lib/Data/v.pm view on Meta::CPAN
croak 'unknown encoding "'.$enc_type.'"';
}
}
my $charset = lc ($self->get_key_param_value('charset') || '');
$charset ||= 'utf8'
if (none { $_ eq $key_name } qw(photo logo sound key));
if ($charset) {
$self->{'value'} = Data::Header::Fields::Value->new(
eval { Encode::decode($charset, $self->{'value'}) }
);
}
}
if ((lc $self->key eq 'n') and (not $self->key->isa('Data::v::Card::Value::Name'))) {
$self->{'value'} = Data::v::Card::Value::Name->new( # not calling value() because the set doesn't affect the content of the value
'value' => $self->value,
'parent' => $self,
);
}
elsif ((lc $self->key eq 'adr') and (not $self->key->isa('Data::v::Card::Value::Adr'))) {
$self->{'value'} = Data::v::Card::Value::Adr->new( # not calling value() because the set doesn't affect the content of the value
'value' => $self->value,
'parent' => $self,
);
}
return;
}
sub get_key_params {
my $self = shift;
my $param_name = shift or croak 'param param_name is mandatory';
my $params = $self->params;
$param_name = lc $param_name;
return grep { lc $_->{'name'} eq $param_name } @{$params};
}
sub get_key_param {
my $self = shift;
my $param_name = shift or croak 'param param_name is mandatory';
my @params = $self->get_key_params($param_name);
croak 'more then one key param with name "'.$param_name.'"'
if @params > 1;
return $params[0];
}
sub get_key_param_value {
my $self = shift;
my $param_name = shift or croak 'param param_name is mandatory';
my $param = $self->get_key_param($param_name);
return undef if not $param;
return $param->{'value'};
}
sub update_key_params {
my $self = shift;
my $param_name = shift or croak 'param param_name is mandatory';
my $param_value = shift;
# updating via array set
if (ref $param_value) {
my @new_params = @{$param_value};
# update existing
foreach my $param (@{$self->params}) {
$param->value(shift @new_params) # will returns undefs if depleeted
if ($param->name eq $param_name);
}
# add any additional new
foreach my $add_value (@new_params) {
push @{$self->{params}}, Data::v::Param->new(
'parent' => $self,
'name' => $param_name,
'value' => $add_value,
);
}
# remove any additional old
$self->{params} = [
grep { defined $_->{'value'} }
@{$self->{params}}
];
return $self;
}
my @params = (
map {
($_->{'name'} eq $param_name ? $_->{value} = $param_value : ());
$_;
} @{$self->params}
);
return $self;
}
sub set_key_param {
my $self = shift;
my $param_name = shift or croak 'param param_name is mandatory';
my $param_value = shift;
my @params = $self->get_key_params($param_name);
if ((@params > 0) or (ref $param_value)) {
$self->update_key_params($param_name, $param_value);
}
elsif (@params == 0) {
push @{$self->params}, Data::v::Param->new('name' => $param_name, 'value' => $param_value, 'parent' => $self);
}
else {
croak 'more then one param field with name "'.$param_name.'"';
}
return $self;
}
( run in 0.633 second using v1.01-cache-2.11-cpan-39bf76dae61 )