+doc Basic Fiddle interactive examples

This commit is contained in:
andrea 2017-05-17 17:32:15 +01:00 committed by Konrad `ktoso` Malawski
parent c840bd6f37
commit 8a6cebedef
5 changed files with 110 additions and 7 deletions

View file

@ -5,21 +5,29 @@ package docs.actor
import jdocs.actor.ImmutableMessage
//#fiddle_code
import language.postfixOps
//#fiddle_code
//#fiddle_code
//#imports1
import akka.actor.Actor
import akka.actor.Props
//#fiddle_code
import akka.event.Logging
//#imports1
import scala.concurrent.Future
//#fiddle_code
import akka.actor.{ ActorRef, ActorSystem, PoisonPill, Terminated, ActorLogging }
//#fiddle_code
import org.scalatest.{ BeforeAndAfterAll, WordSpec }
import akka.testkit._
import akka.util._
//#fiddle_code
import scala.concurrent.duration._
//#fiddle_code
import scala.concurrent.Await
import akka.Done
import akka.actor.CoordinatedShutdown
@ -275,6 +283,38 @@ final case class Give(thing: Any)
//#receive-orElse
//#fiddle_code
case object Ping
case object Pong
class Pinger extends Actor {
var countDown = 100
def receive = {
case Pong =>
println(s"${self.path} received pong, count down $countDown")
if (countDown > 0) {
countDown -= 1
sender() ! Ping
} else {
sender() ! PoisonPill
self ! PoisonPill
}
}
}
class Ponger(pinger: ActorRef) extends Actor {
def receive = {
case Ping =>
println(s"${self.path} received ping")
pinger ! Pong
}
}
//#fiddle_code
class ActorDocSpec extends AkkaSpec("""
akka.loglevel = INFO
akka.loggers = []
@ -322,6 +362,31 @@ class ActorDocSpec extends AkkaSpec("""
system.stop(myActor)
}
"run basic Ping Pong" in {
//#fiddle_code
val system = ActorSystem("pingpong")
val pinger = system.actorOf(Props[Pinger], "pinger")
val ponger = system.actorOf(Props(classOf[Ponger], pinger), "ponger")
//#fiddle_code
val testProbe = new TestProbe(system)
testProbe watch pinger
testProbe watch ponger
//#fiddle_code
import system.dispatcher
system.scheduler.scheduleOnce(500 millis) {
ponger ! Ping
}
// $FiddleDependency org.akka-js %%% akkajsactor % 1.2.5.1
//#fiddle_code
testProbe.expectTerminated(pinger)
testProbe.expectTerminated(ponger)
system.terminate()
}
"creating a Props config" in {
//#creating-props
import akka.actor.Props

View file

@ -5,11 +5,12 @@ package docs.stream
//#imports
//#fiddle_code
import akka.{ Done, NotUsed }
import akka.actor.ActorSystem
import akka.stream.{ ClosedShape, ActorMaterializer, OverflowStrategy }
import akka.stream.scaladsl._
//#fiddle_code
import scala.concurrent.Await
import scala.concurrent.Future
@ -18,6 +19,8 @@ import scala.concurrent.Future
import akka.testkit.AkkaSpec
object TwitterStreamQuickstartDocSpec {
//#fiddle_code
//#model
final case class Author(handle: String)
@ -31,12 +34,15 @@ object TwitterStreamQuickstartDocSpec {
val akkaTag = Hashtag("#akka")
//#model
//#fiddle_code
abstract class TweetSourceDecl {
//#tweet-source
val tweets: Source[Tweet, NotUsed]
//#tweet-source
}
//#fiddle_code
val tweets: Source[Tweet, NotUsed] = Source(
Tweet(Author("rolandkuhn"), System.currentTimeMillis, "#akka rocks!") ::
Tweet(Author("patriknw"), System.currentTimeMillis, "#akka !") ::
@ -49,6 +55,8 @@ object TwitterStreamQuickstartDocSpec {
Tweet(Author("appleman"), System.currentTimeMillis, "#apples rock!") ::
Tweet(Author("drama"), System.currentTimeMillis, "we compared #apples to #oranges!") ::
Nil)
//#fiddle_code
}
class TwitterStreamQuickstartDocSpec extends AkkaSpec {
@ -60,12 +68,15 @@ class TwitterStreamQuickstartDocSpec extends AkkaSpec {
def println(s: Any): Unit = ()
trait Example1 {
//#fiddle_code
//#first-sample
//#materializer-setup
implicit val system = ActorSystem("reactive-tweets")
implicit val materializer = ActorMaterializer()
//#materializer-setup
//#first-sample
//#fiddle_code
}
implicit val materializer = ActorMaterializer()
@ -133,6 +144,20 @@ class TwitterStreamQuickstartDocSpec extends AkkaSpec {
// format: ON
}
"simple fiddle showcase" in {
//#fiddle_code
tweets
.filterNot(_.hashtags.contains(akkaTag))
.mapConcat(_.hashtags)
.map(_.name.toUpperCase)
.runWith(Sink.foreach(println))
// $FiddleDependency org.akka-js %%% akkajsactorstream % 1.2.5.1
//#fiddle_code
.value
}
"slowProcessing" in {
def slowComputation(t: Tweet): Long = {
Thread.sleep(500) // act as if performing some heavy computation