Swiftpack.co - Package - intelygenz/Kommander-iOS

Kommander

Twitter Version License Platform Swift Carthage compatible Swift Package Manager Compatible Build Status Documentation Downloads Help Contribute to Open Source

Kommander is a Swift library to manage the task execution in different threads. Through the definition a simple but powerful concept, Kommand.

Inspired on the Java library Kommander from Wokdsem.

Kommander

🌟 Features

  • [x] Make kommand or multiple kommands
  • [x] Execute kommand or multiple kommands
  • [x] Cancel kommand or multiple kommands
  • [x] Retry kommand or multiple kommands
  • [x] Set kommand success closure
  • [x] Set kommand error closure
  • [x] Main thread dispatcher
  • [x] Current thread dispatcher
  • [x] Custom OperationQueue dispatcher
  • [x] Execute single or multiple Operation
  • [x] Execute sequential or concurrent closures
  • [x] Execute DispatchWorkItem
  • [x] Kommand state
  • [x] iOS compatible
  • [x] watchOS compatible
  • [x] tvOS compatible
  • [x] macOS compatible
  • [x] Swift 4 version
  • [x] Swift 3 version
  • [x] Swift 2 version
  • [x] Objective-C version

📲 Installation

Kommander is available through CocoaPods. To install it, simply add the following line to your Podfile:

pod 'Kommander'

For Swift 3 compatibility use:

pod 'Kommander', '~> 0.7'

For Swift 2 compatibility use:

pod 'Kommander', :git => 'https://github.com/intelygenz/Kommander-iOS.git', :tag => '0.3.0-swift2'

For Objective-C compatibility use:

pod 'Kommander', :git => 'https://github.com/intelygenz/Kommander-iOS.git', :tag => '0.2.3-objc'

Or you can install it with Carthage:

github "intelygenz/Kommander-iOS"

Or install it with Swift Package Manager:

dependencies: [
    .package(url: "https://github.com/intelygenz/Kommander-iOS.git")
]

🐒 Usage

Making, executing, cancelling and retrying Kommands:

Kommander().make {
    // Your code here
}.execute()
Kommander().make {
    // Your code here
}.execute(after: .seconds(2))
Kommander().make {
    return "Your string"
}.success { yourString in
    print(yourString)
}.execute()
Kommander().make {
    throw CocoaError(.featureUnsupported)
}.error { error in
    print(String(describing: error!))
}.execute()
Retry after cancellation:
let kommand = Kommander().make { () -> Any? in
    // Your code here
}.success { result in
    // Your success handling here
}.error { error in
    // Your error handling here
}.execute()

kommand.cancel()

kommand.retry()
Retry after failure:
let kommand = Kommander().make { () -> Any? in
    // Your code here
}.error { error in
    // Your error handling here
}.retry { error, executionCount in
    return executionCount < 2
}.execute()

Creating Kommanders:

Kommander(deliverer: Dispatcher = .current, executor: Dispatcher = .default)

Kommander(deliverer: Dispatcher = .current, name: String, qos: QualityOfService = .default, maxConcurrentOperations: Int = .default)
Shortcuts:
Kommander.main

Kommander.current

Kommander.default

Kommander.userInteractive

Kommander.userInitiated

Kommander.utility

Kommander.background

Creating Dispatchers:

CurrentDispatcher()

MainDispatcher()

Dispatcher(name: String, qos: QualityOfService = .default, maxConcurrentOperations: Int = .default)
Shortcuts:
Dispatcher.main

Dispatcher.current

Dispatcher.default

Dispatcher.userInteractive

Dispatcher.userInitiated

Dispatcher.utility

Dispatcher.background

❤️ Etc.

  • Contributions are very welcome.
  • Attribution is appreciated (let's spread the word!), but not mandatory.

👨‍💻 Authors

alexruperez, alejandro.ruperez@intelygenz.com

juantrias, juan.trias@intelygenz.com

RobertoEstrada, roberto.estrada@intelygenz.com

👮‍♂️ License

Kommander is available under the MIT license. See the LICENSE file for more info.

Github

link
Stars: 127
Help us keep the lights on

Dependencies

Used By

Total: 1

Releases

1.0 - Mar 1, 2018

  • [x] General retry policy.
  • [x] New API naming.

Special announcement at T3chFest 2018

0.9.3 - Nov 15, 2017

  • [x] Canceled (US English) Kommand state becomes cancelled (British English).

0.9.2 - Nov 1, 2017

0.9.1 - Oct 26, 2017

  • [x] Removed DispatchWorkItem, now internally working with Operation.

0.9.0 - Oct 26, 2017

  • [x] Removed deprecated DispatchQueue methods and initializers.