Skip to content

erikprice/ReactiveTask

 
 

Repository files navigation

ReactiveTask

ReactiveTask is a Swift framework for launching shell tasks (processes), built using ReactiveCocoa.

let strings = [ "foo\n", "bar\n", "buzz\n", "fuzz\n" ]
let input = SignalProducer<NSData, NoError>(values: strings.map { $0.dataUsingEncoding(NSUTF8StringEncoding)! })
let task = Task("/usr/bin/sort")

// Run the task, ignoring the output, and do something with the final result.
let result: Result<String, TaskError>? = launchTask(task, standardInput: input)
    .ignoreTaskData()
    .map { String(data: $0, encoding: NSUTF8StringEncoding) }
    .ignoreNil()
    .single()
print("Output of `\(task)`: \(result?.value ?? "")")

// Start the task and print all the events, which includes all the output
// that was received.
launchTask(task, standardInput: input)
    .flatMapTaskEvents(.Concat) { data in
        return SignalProducer(value: String(data: data, encoding: NSUTF8StringEncoding))
    }
    .startWithNext { (event: TaskEvent) in
        switch event {
        case let .Launch(task):
            print("launched task: \(task)")

        case let .StandardError(data):
            print("stderr: \(data)")

        case let .StandardOutput(data):
            print("stdout: \(data)")

        case let .Success(string):
            print("value: \(string ?? "")")
        }
    }

For examples of how to use ReactiveTask, see the Xcode and Git integration code from the CarthageKit framework.

License

ReactiveTask is released under the MIT license.

About

Flexible, stream-based abstraction for launching processes

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages

  • Swift 78.2%
  • Shell 17.9%
  • Objective-C 2.1%
  • Awk 1.8%