package Message; ... sub is_not_scanned { return shift->status eq 'NOT_SCANNED' } sub is_not_checked { return shift->status eq 'NOT_CHECKED' } sub is_not_verified { return shift->status eq 'NOT_VERIFIED' } sub is_queued { return shift->status eq 'QUEUED' } sub is_complete { return shift->status eq 'COMPLETE' } sub is_broken { return shift->status eq 'BROKEN' } sub is_scanned { my ($self) = @_; return !$self->is_not_scanned && !$self->is_broken; } sub is_checked { my ($self) = @_; return $self->is_scanned && !$self->is_not_checked && !$self->is_broken; } sub set_next_status { my ($self) = @_; return if $self->is_complete || $self->is_broken; my $enable_spell_check = $self->user->preferences->enable_spell_check; my $is_complete = $self->is_not_verified || $self->is_queued; my $is_not_checked = $self->is_not_scanned && $enable_spell_check; my $status = $is_complete ? 'COMPLETE' : $is_not_checked ? 'NOT_CHECKED' : 'NOT_VERIFIED ; $self->update({ status => $status }); return; }