The markdown parsing is broken/disabled for release notes. Sorry about that, I'm chasing the source of a crash that's been bringing this website down for the last couple of days.
### Bug Fixes
- Fix an issue introduced in 1.2.0 when cache instance may become nil in some cases during cache composition.
### New Features
- Added a way to remove object for a specific key from a cache. See `remove(_:)`.
## Fixes
- Fixed an issue when a composed cache was calling `receiveValue` twice or more in some cases
## Changes
- Made Carlos less opinionated on which queue it shall run its operations.
- Wrap Carlos Future's in `Deferred` to make sure that Carlos doesn't execute its operation unless there are subscribers.
1.0.0 Combine Migration
3 years ago
## 1.0.0
**Breaking Changes**
- Swift 5.3 and Xcode 12 support
- The codebase has been migrated from PiedPiper to Combine
- The minimum supported OS version set to Combine's minimum supported version: iOS 13, macOS 10.15, watchOS 6, tvOS 13.
- Removed `Dispatched.swift` and `RequestCapperCache.swift` because the functionality they provided could be easily re-implemented using Combine operators.
**New Features**
- `Carlos` is now powered by Combine which means you can use awesome Combine provided operators on the Carlos cached values!
0.10.1 Carthage Fix
3 years ago
## Fixed
- Fixed an issue when app archive fails for the app which use Carlos due to PiedPiper being embedded #187
0.10.0 Swift Package Manager Support
3 years ago
### Breaking Changes
- Xcode 11.5+ required
### New Features
- Swift Package Manager Support
0.9.1: Swift 3!
7 years ago
**Breaking changes**
- Swift 3.0 support (for Swift 2.3 use specific commit `5d354c829d766568f164c386c59de21357b5ccff` instead)
- `batchGetAll` has been removed and replaced with a reified `allBatch` (see **New features**)
- All deprecated functions have been removed
- All custom operators have been removed in favor of their function counterparts
- macOS and tvOS support has been temporarily dropped and will be probably re-added in the future
- `set` method on `CacheLevel` now returns a `Future` enabling error-handling and progress-tracking of `set` calls.
**New Features**
- It's now possible to lift a `CacheLevel` into one that operates on a sequence of keys and returns a sequence of values. You can use `allBatch` to create a concrete `BatchAllCache`. You can use `get` on this cache if you want to pass a list of keys and get the success callback when **all** of them succeed and the failure callback **as soon as one** of them fails (old behavior of `batchGetAll`), or you can compose or transform an `allBatch` cache just like any another `CacheLevel`. Consult the `README.md` for an example.
Independence day
7 years ago
**Breaking changes**
- The codebase has been migrated to Swift 2.2
- `Promise` now has only an empty `init`. If you used one of the convenience `init` (with `value:`, with `error:` or with `value:error:`), they now moved to `Future`.
**New features**
- Adds `value` and `error` properties to `Result`
- Added a way to initialize `Future`s through closures
- It's now possible to `map` `Future`s through:
- a simple transformation closure
- a closure that `throws`
- It's now possible to `flatMap` `Future`s through:
- a closure that returns an `Optional`
- a closure that returns another `Future`
- a closure that returns a `Result`
- It's now possible to `filter` `Future`s through:
- a simple condition closure
- a closure that returns a `Future<Bool>`
- It's now possible to `reduce` a `SequenceType` of `Future`s into a new `Future` through a `combine` closure
- It's now possible to `zip` a `Future` with either another `Future` or with a `Result`
- Added `merge` to a `SequenceType` of `Future`s to collapse a list of `Future`s into a single one
- Added `traverse` to `SequenceType` to generate a list of `Future`s through a given closure and `merge` them together
- Added `recover` to `Future` so that it's possible to provide a default value the `Future` can use instead of failing
- It's now possible to `map` `Result`s through:
- a simple transformation closure
- a closure that `throws`
- It's now possible to `flatMap` `Result`s through:
- a closure that returns an `Optional`
- a closure that returns a `Future`
- a closure that returns another `Result`
- It's now possible to `filter` `Result`s through a simple condition closure
- Added `mimic` to `Result`
Pied Piper 0.7
8 years ago
First release of `Pied Piper` as a separate framework.
**Breaking changes**
- As documented in the `MIGRATING.md` file, you will have to add a `import PiedPiper` line everywhere you make use of Carlos' `Future`s or `Promise`s.
**New features**
- It's now possible to compose async functions and `Future`s through the `>>>` operator.
- The implementation of `ReadWriteLock` taken from [Deferred](https://github.com/bignerdranch/Deferred) is now exposed as `public`.
- It's now possible to take advantage of the `GCD` struct to execute asynchronous computation through the functions `main` and `background` for GCD built-in queues and `async` for GCD serial or custom queues.
**Improvements**
- `Promise`s are now safer to use with GCD and in multi-thread scenarios.
**Fixes**
- Fixes a bug where calling `succeed`, `fail` or `cancel` on a `Promise` or a `Future` didn't correctly release all the attached listeners.
- Fixes a retain cycle between `Promise` and `Future` objects.