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 )