mirror of
https://github.com/twitter/the-algorithm.git
synced 2024-06-18 09:08:48 +02:00
![twitter-team](/assets/img/avatar_default.png)
Please note we have force-pushed a new initial commit in order to remove some publicly-available Twitter user information. Note that this process may be required in the future.
49 lines
1.9 KiB
Scala
49 lines
1.9 KiB
Scala
package com.twitter.product_mixer.component_library.selector
|
|
|
|
import com.twitter.product_mixer.core.functional_component.common.CandidateScope
|
|
import com.twitter.product_mixer.core.functional_component.common.SpecificPipeline
|
|
import com.twitter.product_mixer.core.functional_component.common.SpecificPipelines
|
|
import com.twitter.product_mixer.core.functional_component.selector.Selector
|
|
import com.twitter.product_mixer.core.functional_component.selector.SelectorResult
|
|
import com.twitter.product_mixer.core.model.common.identifier.CandidatePipelineIdentifier
|
|
import com.twitter.product_mixer.core.model.common.presentation.CandidateWithDetails
|
|
import com.twitter.product_mixer.core.pipeline.PipelineQuery
|
|
|
|
/**
|
|
* Predicate which will be applied to each candidate. True indicates that the candidate will be
|
|
* kept.
|
|
*/
|
|
trait ShouldKeepCandidate {
|
|
def apply(candidateWithDetails: CandidateWithDetails): Boolean
|
|
}
|
|
|
|
object DropFilteredCandidates {
|
|
def apply(candidatePipeline: CandidatePipelineIdentifier, filter: ShouldKeepCandidate) =
|
|
new DropFilteredCandidates(SpecificPipeline(candidatePipeline), filter)
|
|
|
|
def apply(candidatePipelines: Set[CandidatePipelineIdentifier], filter: ShouldKeepCandidate) =
|
|
new DropFilteredCandidates(SpecificPipelines(candidatePipelines), filter)
|
|
}
|
|
|
|
/**
|
|
* Limit candidates from certain candidates sources to those which satisfy the provided predicate.
|
|
*/
|
|
case class DropFilteredCandidates(
|
|
override val pipelineScope: CandidateScope,
|
|
filter: ShouldKeepCandidate)
|
|
extends Selector[PipelineQuery] {
|
|
|
|
override def apply(
|
|
query: PipelineQuery,
|
|
remainingCandidates: Seq[CandidateWithDetails],
|
|
result: Seq[CandidateWithDetails]
|
|
): SelectorResult = {
|
|
val candidatesUpdated = remainingCandidates.filter { candidate =>
|
|
if (pipelineScope.contains(candidate)) filter.apply(candidate)
|
|
else true
|
|
}
|
|
|
|
SelectorResult(remainingCandidates = candidatesUpdated, result = result)
|
|
}
|
|
}
|