sub BUILD {
my $self = shift;
my $args = shift;
+ state $field_mapping =
+ {originator => 'submitter',
+ keywords => 'tags',
+ msgid => 'message_id',
+ blockedby => 'blocked_by',
+ found_versions => 'found',
+ fixed_versions => 'fixed',
+ };
if (not exists $args->{status} and exists $args->{bug}) {
if ($self->has_schema) {
($args->{status}) =
search_rs({id => [make_list($args->{bug})]},
{result_class => 'DBIx::Class::ResultClass::HashRefInflator'})->
all();
- state $field_mapping =
- {originator => 'submitter',
- blockedby => 'blocked_by',
- found_versions => 'found',
- fixed_versions => 'fixed',
- };
for my $field (keys %{$field_mapping}) {
$args->{status}{$field_mapping->{$field}} =
$args->{status}{$field} if defined $args->{status}{$field};
$self->_set_status_source('db');
} else {
$args->{status} = get_bug_status(bug=>$args->{bug});
- state $field_mapping =
- {originator => 'submitter',
- keywords => 'tags',
- msgid => 'message_id',
- blockedby => 'blocked_by',
- found_versions => 'found',
- fixed_versions => 'fixed',
- };
for my $field (keys %{$field_mapping}) {
$args->{status}{$field_mapping->{$field}} =
- $args->{status}{$field};
+ $args->{status}{$field} if defined $args->{status}{$field};
}
$self->_set_status_source('filesystem');
}
} elsif (exists $args->{status}) {
+ for my $field (keys %{$field_mapping}) {
+ $args->{status}{$field_mapping->{$field}} =
+ $args->{status}{$field} if defined $args->{status}{$field};
+ }
$self->_set_status_source('hashref');
}
if (exists $args->{status}) {
croak "status must be a HASHREF (argument to __PACKAGE__)";
}
$self->_set_status($args->{status});
- # 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);
- }
delete $args->{status};
}
}
$self->__field_or_def('submitter',
$config{maintainer_email});
},
+ lazy => 1,
writer => '_set_submitter',
);
$self->__field_or_def('subject',
'No subject');
},
+ lazy => 1,
writer => '_set_subject',
);
has severity =>
(is => 'ro',
isa => 'Str',
+ lazy => 1,
builder =>
sub {
my $self = shift;
has unarchived =>
(is => 'ro',
isa => 'Int',
+ lazy => 1,
builder =>
sub {
my $self = shift;
has archived =>
(is => 'ro',
isa => 'Int',
+ lazy => 1,
builder =>
sub {
my $self = shift;
'');
},
writer => '_set_'.$field,
+ lazy => 1,
);
my $field_method = $meta->find_method_by_name($field);
die "No field method for $field" unless defined $field_method;
},
writer => '_set_'.$field,
handles => {$field => 'elements',
+ $field.'_count' => 'count',
+ $field.'_join' => 'join',
},
lazy => 1,
);
default => sub {return {}},
writer => '_set_'.$field,
handles => {$field => 'keys',
+ $field.'_count' => 'count',
},
lazy => 1,
);
sub {my $self = shift;
return [$field_method->($self)]
});
+ $meta->add_method($field.'_join'=>
+ sub {my ($self,$joiner) = @_;
+ return join($joiner,$field_method->($self));
+ });
}
}
}
return {};
},
+ handles => {$field.'_count' => 'count',
+ },
writer => '_set_'.$field,
lazy => 1,
);
sub {my $self = shift;
return [$field_method->($self)]
});
+ $meta->add_method($field.'_join'=>
+ sub {my ($self,$joiner) = @_;
+ return join($joiner,$field_method->($self));
+ });
}
for (qw(blocks blocked_by mergedwith)) {