Skip to content

Commit b99a552

Browse files
fix add stages + word count example
1 parent 2bdbea8 commit b99a552

File tree

6 files changed

+80
-9
lines changed

6 files changed

+80
-9
lines changed

myText.txt

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,10 @@
1-
asdasd
2-
dasdasd
1+
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque sodales dapibus nulla. Nam ac sapien vitae massa iaculis sodales eget ac turpis. Nunc vitae diam et mi gravida lacinia sit amet a mauris. Aliquam pellentesque, tortor in iaculis posuere, lacus nibh dictum nulla, sed sollicitudin mauris tortor id leo. Phasellus semper eros varius sodales imperdiet. Praesent semper, leo at dignissim auctor, est orci eleifend ligula, quis iaculis lacus odio id felis. Nulla scelerisque est posuere nulla gravida feugiat. Nam eros velit, molestie ac tristique ac, rhoncus eu orci. Fusce dignissim ipsum sed augue semper, in ullamcorper ante accumsan. Nulla facilisi. Integer gravida ante eget hendrerit tristique. Aenean sed ante vel magna laoreet hendrerit. In suscipit consequat malesuada.
32

4-
myKeyword
3+
Proin gravida nec urna eu consequat. In viverra metus at porttitor facilisis. Nam ac elementum leo, id venenatis metus. Curabitur posuere, augue at placerat faucibus, tortor leo interdum tellus, ac convallis eros ipsum vel tortor. Pellentesque ut enim pharetra, tristique felis eu, vestibulum sapien. Etiam hello felis sapien, varius ut semper hendrerit, dictum dictum hello justo. In sed sagittis turpis. Suspendisse potenti. Mauris ut leo sed nisi commodo efficitur varius vitae nisl. Cras congue libero non dolor vulputate, viverra sodales erat fringilla. Vestibulum in ante eu ipsum interdum venenatis id id ante. Nunc felis magna, lobortis eget urna vel, rhoncus suscipit lectus. Aliquam ex magna, porta eu egestas ut, dapibus non massa.
4+
5+
Nam laoreet erat at lobortis fermentum. Proin auctor sit amet dui ac sagittis. Donec ut lorem eget enim commodo auctor. Aenean ornare vel quam non cursus. Aenean dui purus, semper sit amet maximus at, malesuada sed libero. Quisque fringilla, nunc lobortis bibendum gravida, nibh orci blandit eros, vitae scelerisque ex massa id dolor. Fusce eu aliquet nisl, quis facilisis risus. Praesent sed placerat orci. Fusce felis ante, rhoncus ut euismod vitae, aliquet id elit. Integer ac ipsum tempus, convallis nunc at, vestibulum ante. Sed congue rhoncus dolor, nec dictum nulla ultrices tempus. Curabitur fringilla, tortor nec facilisis aliquam, quam purus sodales metus, non sagittis neque tellus non velit. Duis mattis convallis cursus. Ut ac laoreet nisi, id consequat nibh. Praesent mattis enim risus, ut aliquam erat condimentum eu.
6+
7+
Vivamus imperdiet vulputate dui in porta. Duis eu risus id mauris aliquet tincidunt. Integer ac mattis lectus. Morbi laoreet, erat a egestas facilisis, turpis massa porttitor augue, at hendrerit felis lorem ut elit. Curabitur ac ipsum sed odio tincidunt blandit sed quis lacus. Aenean vitae metus ut mauris gravida volutpat. Vestibulum ante ipsum primis in faucibus helloorci luctus et ultrices posuere cubilia Curae; Nulla ullamcorper euismod pharetra. Etiam at metus vulputate ex imperdiet consequat ut hendrerit leo. Nulla sed molestie lorem. Nulla ut lectus elit. Cras lobortis, velit ac posuere malesuada, quam ex ullamcorper metus, et luctus libero mi vitae ipsum.
8+
9+
Fusce a ipsum vitae tortor molestie vehicula ac quis ipsum. Nam consectetur iaculis tellus, feugiat ornare turpis lobortis et. Pellentesque ut nisl congue, pharetra libero faucibus, imperdiet mi. Integer pulvinar orci vitae eros tempor, quis scelerisque elit dictum. Mauris non mi luctus, volutpat ipsum ac, fringilla metus. Ut venenatis nec magna eget euismod. Sed tempus porta quam eget scelerisque.
10+
hello
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
package com.cosmin.examples.wordcount
2+
3+
import com.cosmin.pipeline.Filter
4+
5+
import scala.io.Source
6+
7+
class Cat() extends Filter[String, Seq[String]]{
8+
override def execute: String => Seq[String] = file => Source.fromFile(file).getLines.toSeq
9+
}
10+
11+
object Cat {
12+
def apply(): Cat = new Cat()
13+
}
14+
15+
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
package com.cosmin.examples.wordcount
2+
3+
import com.cosmin.pipeline.Filter
4+
5+
class Count extends Filter[Seq[String], Int] {
6+
override def execute: Seq[String] => Int = lines => lines.count(_ => true)
7+
}
8+
9+
object Count {
10+
def apply(): Count = new Count()
11+
}
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
package com.cosmin.examples.wordcount
2+
3+
import com.cosmin.pipeline.Filter
4+
5+
class Grep(word: String) extends Filter[Seq[String], Seq[String]] {
6+
override def execute: Seq[String] => Seq[String] = lines => lines.filter(_.contains(word))
7+
}
8+
9+
object Grep {
10+
def apply(word: String): Grep = new Grep(word)
11+
}
Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
package com.cosmin.examples.wordcount
2+
3+
import com.cosmin.pipeline.Pipeline
4+
import com.cosmin.pipeline.executor.AsyncExecutor
5+
6+
import scala.util.Success
7+
8+
/**
9+
* Implementation of the following UNIX command 'cat "myText.txt" | grep "hello" | wc -l'
10+
*/
11+
object WordCount {
12+
def main(args: Array[String]): Unit = {
13+
val wordToFind = "hello"
14+
val pipeline = Pipeline[String, String]() | Cat() | Grep(wordToFind) | Count()
15+
16+
pipeline.execute("myText.txt") {
17+
case Success(output) => println(s"word '$wordToFind' was found on $output lines")
18+
}
19+
20+
executeAsync(pipeline, wordToFind)
21+
}
22+
23+
private def executeAsync(pipeline: Pipeline[String, Int], wordToFind: String): Unit = {
24+
implicit val asyncExecutor: AsyncExecutor[String, Int] = AsyncExecutor[String, Int]
25+
pipeline.execute("myText.txt") {
26+
case Success(output) => println(s"Async ---> word '$wordToFind' was found on $output lines")
27+
}
28+
Thread.sleep(2000)
29+
}
30+
}

src/main/scala/com/cosmin/pipeline/Pipeline.scala

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -12,19 +12,19 @@ trait Pipeline[In, Out] {
1212
def pipe[X](f: Out => X): Pipeline[In, X] = {
1313
val stage = Stage[Out, X](Filter[Out, X](f))
1414

15-
Pipeline[In, X]( stage :: stages reverse)
15+
Pipeline[In, X](stage :: stages)
1616
}
1717

1818
def | [X](filter: Filter[Out, X]): Pipeline[In, X] = pipe(filter)
1919

2020
def pipe[X](filter: Filter[Out, X]): Pipeline[In, X] = {
2121
val stage = Stage[Out, X](filter)
2222

23-
Pipeline[In, X](stage :: stages reverse)
23+
Pipeline[In, X](stage :: stages)
2424
}
2525

2626
def execute(in: In)(onComplete: Try[Out] => Unit)(implicit pipelineExecutor: PipelineExecutor[In, Out] = SynchronouslyExecutor()): Unit = {
27-
pipelineExecutor.execute(in, stages) (onComplete)
27+
pipelineExecutor.execute(in, stages.reverse) (onComplete)
2828
}
2929
}
3030

@@ -33,7 +33,5 @@ object Pipeline {
3333
override val stages: List[Stage] = stagesList
3434
}
3535

36-
def apply[In, Out](): Pipeline[In, Out] = new Pipeline[In, Out] {
37-
override val stages: List[Stage] = List()
38-
}
36+
def apply[In, Out](): Pipeline[In, Out] = Pipeline[In, Out](List())
3937
}

0 commit comments

Comments
 (0)