Skip to content

Instantly share code, notes, and snippets.

@sadache
Forked from jto/funky.scala
Created May 16, 2012 19:47
Show Gist options
  • Star 5 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save sadache/2713406 to your computer and use it in GitHub Desktop.
Save sadache/2713406 to your computer and use it in GitHub Desktop.
Funky enumerator usage
package controllers
import play.api._
import play.api.mvc._
import play.api.libs.ws._
import play.api.libs.iteratee._
import play.api.libs.concurrent._
object Application extends Controller {
val EXPECTED_LENGTH = 15;
def index = Action {
val p1 = WS.url("http://linkedin.com").get().map{ _ => "linkedin" }
val p2 = WS.url("http://zenexity.com").get().map{ _ => "zenexity" }
val p3 = WS.url("http://news.ycombinator.com").get().map{ _ => "ycombinator" }
val enumerators = List(p1,p2,p3).map(p => Enumerator.flatten(p.map( r => Enumerator(r:_*))))
val r =
Enumerator.interleave(enumerators) &>
Enumeratee.take(EXPECTED_LENGTH) |>>
Iteratee.fold(List[Char]()){ (es, e: Char) => println(e); e :: es }
val p = r.flatMap(_.run).map( cs => Ok(cs.reverse.mkString))
AsyncResult(p)
}
}
val r = Enumerator.interleave(enumerators) through
Enumeratee.take(EXPECTED_LENGTH) apply
Iteratee.fold(List[Char]()){ (es, e: Char) => println(e); e :: es }
val r = Enumerator.interleave(enumerators)
.through(Enumeratee.take(EXPECTED_LENGTH))
.apply(Iteratee.fold(List[Char]()){ (es, e: Char) => println(e); e :: es })
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment