Merge pull request #1953 from akka/wip-3102-remove-ComposableActor-patriknw
=doc #3102 Remove ComposableActor doc sample
This commit is contained in:
commit
d0f9c8f2fc
2 changed files with 0 additions and 59 deletions
|
|
@ -896,10 +896,6 @@ extend that, either through inheritance or delegation, is to use
|
||||||
|
|
||||||
.. includecode:: code/docs/actor/ActorDocSpec.scala#receive-orElse
|
.. includecode:: code/docs/actor/ActorDocSpec.scala#receive-orElse
|
||||||
|
|
||||||
Or:
|
|
||||||
|
|
||||||
.. includecode:: code/docs/actor/ActorDocSpec.scala#receive-orElse2
|
|
||||||
|
|
||||||
Initialization patterns
|
Initialization patterns
|
||||||
=======================
|
=======================
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -583,59 +583,4 @@ class ActorDocSpec extends AkkaSpec(Map("akka.loglevel" -> "INFO")) {
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
//#receive-orElse2
|
|
||||||
class PartialFunctionBuilder[A, B] {
|
|
||||||
import scala.collection.immutable.Vector
|
|
||||||
|
|
||||||
// Abbreviate to make code fit
|
|
||||||
type PF = PartialFunction[A, B]
|
|
||||||
|
|
||||||
private var pfsOption: Option[Vector[PF]] = Some(Vector.empty)
|
|
||||||
|
|
||||||
private def mapPfs[C](f: Vector[PF] => (Option[Vector[PF]], C)): C = {
|
|
||||||
pfsOption.fold(throw new IllegalStateException("Already built"))(f) match {
|
|
||||||
case (newPfsOption, result) => {
|
|
||||||
pfsOption = newPfsOption
|
|
||||||
result
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
def +=(pf: PF): Unit =
|
|
||||||
mapPfs { case pfs => (Some(pfs :+ pf), ()) }
|
|
||||||
|
|
||||||
def result(): PF =
|
|
||||||
mapPfs { case pfs => (None, pfs.foldLeft[PF](Map.empty) { _ orElse _ }) }
|
|
||||||
}
|
|
||||||
|
|
||||||
trait ComposableActor extends Actor {
|
|
||||||
protected lazy val receiveBuilder = new PartialFunctionBuilder[Any, Unit]
|
|
||||||
final def receive = receiveBuilder.result()
|
|
||||||
}
|
|
||||||
|
|
||||||
trait TheirComposableActor extends ComposableActor {
|
|
||||||
receiveBuilder += {
|
|
||||||
case "foo" => sender() ! "foo received"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
class MyComposableActor extends TheirComposableActor {
|
|
||||||
receiveBuilder += {
|
|
||||||
case "bar" => sender() ! "bar received"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
//#receive-orElse2
|
|
||||||
|
|
||||||
"using ComposableActor" in {
|
|
||||||
val composed = system.actorOf(Props(classOf[MyComposableActor], this))
|
|
||||||
implicit val me = testActor
|
|
||||||
composed ! "foo"
|
|
||||||
expectMsg("foo received")
|
|
||||||
composed ! "bar"
|
|
||||||
expectMsg("bar received")
|
|
||||||
EventFilter.warning(pattern = ".*unhandled message from.*baz", occurrences = 1) intercept {
|
|
||||||
composed ! "baz"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue