// retoor <retoor@molodetz.nl>
import "scheduler" for Scheduler, Future
class DataProcessor {
static parse { async { |text| text.split(",") } }
static filter { async { |list, fn|
var result = []
for (item in list) {
if (fn.call(item)) result.add(item)
}
return result
}}
static transform { async { |list, fn|
var result = []
for (item in list) {
result.add(fn.call(item))
}
return result
}}
static join { async { |list, sep| list.join(sep) } }
static pipeline(data) {
var parse = DataProcessor.parse
var filter = DataProcessor.filter
var transform = DataProcessor.transform
var join = DataProcessor.join
var parsed = await parse(data)
var filtered = await filter(parsed) { |s| s.count > 4 }
var transformed = await transform(filtered) { |s| s.toList[0] }
return await join(transformed, "-")
}
}
var data = "apple,banana,cherry,date"
var parse = DataProcessor.parse
var parsed = await parse(data)
System.print(parsed) // expect: [apple, banana, cherry, date]
var filter = DataProcessor.filter
var filtered = await filter(parsed) { |s| s.count > 5 }
System.print(filtered) // expect: [banana, cherry]
var transform = DataProcessor.transform
var transformed = await transform(filtered) { |s| s.toList[0] }
System.print(transformed) // expect: [b, c]
var join = DataProcessor.join
var joined = await join(transformed, "-")
System.print(joined) // expect: b-c
var result = DataProcessor.pipeline("one,two,three,four,five")
System.print(result) // expect: t