+=item C<parse_custom_variable_values>
+
+When you want to edit custom variables in a form then you have
+unparsed values from the user. These should be written to the
+variable's C<unparsed_value> field.
+
+This function then processes all variables and parses their
+C<unparsed_value> field into the proper field. It returns C<$self> for
+easy chaining.
+
+This is automatically called in a C<before_save> hook so you don't
+have to do it manually if you save directly after assigning the
+values.
+
+In an HTML form you could e.g. use something like the following:
+
+ [%- FOREACH var = SELF.project.cvars_by_config.as_list %]
+ [% HTML.escape(var.config.description) %]:
+ [% L.hidden_tag('project.custom_variables[+].config_id', var.config.id) %]
+ [% PROCESS 'common/render_cvar_input.html' var_name='project.custom_variables[].unparsed_value' %]
+ [%- END %]
+
+Later in the controller when you want to save this project you don't
+have to do anything special:
+
+ my $project = SL::DB::Project->new;
+ my $params = $::form->{project} || {};
+
+ $project->assign_attributes(%{ $params });
+
+ $project->parse_custom_variable_values->save;
+
+However, if you need access to a variable's value before saving in
+some way then you have to call this function manually. For example:
+
+ my $project = SL::DB::Project->new;
+ my $params = $::form->{project} || {};
+
+ $project->assign_attributes(%{ $params });
+
+ $project->parse_custom_variable_values;
+
+ print STDERR "CVar[0] value: " . $project->custom_variables->[0]->value . "\n";
+