- # single value fields
- for my $field (qw(submitter date subject message_id done severity unarchived),
- qw(owner summary outlook bug log_modified),
- qw(last_modified archived forwarded)) {
- next unless defined $args->{status}{$field};
- # we're going to let status override passed values in args for now;
- # maybe this should change
- if (not exists $field_methods{'_set_'.$field}) {
- $field_methods{'_set_'.$field} =
- $meta->find_method_by_name('_set_'.$field);
- if (not defined $field_methods{'_set_'.$field}) {
- croak "Unable to find field method for _set_$field";
- }
- }
- $field_methods{'_set_'.$field}->($self,$args->{status}{$field});
- }
- # multi value fields
- for my $field (qw(affects package tags blocks blocked_by mergedwith),
- qw(found fixed)) {
- next unless defined $args->{status}{$field};
- my $field_method = $meta->find_method_by_name('_set_'.$field);
- if (not exists $field_methods{'_set_'.$field}) {
- $field_methods{'_set_'.$field} =
- $meta->find_method_by_name('_set_'.$field);
- if (not defined $field_methods{'_set_'.$field}) {
- croak "Unable to find field method for _set_$field";
- }
- }
- my $split_field = $args->{status}{$field};
- if (!ref($split_field)) {
- $split_field =
- _build_split_field($args->{status}{$field},
- $field);
- }
- $field_methods{'_set_'.$field}->($self,
- $split_field);
- }