Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/plivesey/RocketData

A caching and consistency solution for immutable models.
https://github.com/plivesey/RocketData

Last synced: 8 days ago
JSON representation

A caching and consistency solution for immutable models.

Awesome Lists containing this project

README

        

# 🚀 Data

[![Build Status](https://travis-ci.org/plivesey/RocketData.svg?branch=master)](https://travis-ci.org/plivesey/RocketData)
[![codecov](https://codecov.io/gh/plivesey/RocketData/branch/master/graph/badge.svg)](https://codecov.io/gh/plivesey/RocketData)
[![GitHub release](https://img.shields.io/github/release/plivesey/RocketData.svg?maxAge=86400)](https://github.com/plivesey/RocketData/releases)
[![CocoaPods](https://img.shields.io/cocoapods/p/RocketData.svg?maxAge=86400)](#)

Rocket Data is a model management system with persistence for immutable models.

## Motivation

Immutability has [many benefits](https://plivesey.github.io/RocketData/pages/130_immutability.html), but keeping models consistent and making changes is difficult. This library manages the consistency and caching of immutable models. It is intended to be an ideal replacement for Core Data. However, unlike Core Data, it does not block the main thread and does not crash whenever you do something slightly incorrect (see [Core Data Comparison](https://plivesey.github.io/RocketData/pages/100_coreData.html)). In most setups, the backing cache does not need a schema, and you never need to add migration logic.

## Scale

Rocket Data scales extremely well to large numbers of models and data providers. Since it does nearly all of its work on a background thread, you never need to worry about one change slowing down the whole application. You can also choose to stop listening to changes when a view controller is off screen to further increase performance.

The library is optimized for applications that fetch data from an external source, display it on the device, and allow the user to perform actions on this data. It implements an easy model for synchronizing this data in-memory between view controllers and with the cache.

## Bring Your Own Cache

With Rocket Data, you can choose your own caching solution. We recommend a fast key-value store, but you can use any store you can imagine. This also makes it easy to add LRU eviction.

## Installation

Installation via both [CocoaPods](https://cocoapods.org) and [Carthage](https://github.com/Carthage/Carthage) is supported.

### CocoaPods

Add this to your Podspec:
```ruby
pod 'RocketData'
```
Then run `pod install`.

### Carthage

Add this to your `Cartfile`:
```ogdl
github "plivesey/RocketData"
```
Then run `carthage update RocketData --platform ios`

NOTE: Currently, `--platform ios` is necessary for some reason. We are investigating the issue.

### Swift Version

We are currently not maintaining separate branches for different Swift versions. You can use an older version of Rocket Data for older versions of Swift though. HEAD currently supports Swift 4.2.

| Swift Version | Rocket Data Version |
|---------------|------------------------------|
| 1 | Not supported |
| 2.0 - 2.1 | 1.x.x (untested) |
| 2.2 | 1.x.x |
| 2.3 (Cocoapods) | 1.x.x |
| 2.3 (Carthage) | 1.2.0 |
| 3 (Easy migration API) | 2.0.0 |
| 3 (Better API) | 4.x.x |
| 4 | 5.x.x |
| 4.2 | 7.x.x |

NOTE: If you are migrating to Swift 3, consider using version 2.0.0 first, then migrating to 3.x.x. 3.0.0 migrates the code to the new syntax without making any API changes. 3.x.x introduces a better API which is more consistent with the new Swift 3 API guidelines.

## Documentation

To get started, you should take a look at the [docs](https://plivesey.github.io/RocketData).

### Consistency Manager

Rocket Data uses [ConsistencyManager](https://github.com/plivesey/ConsistencyManager/) to manage the in-memory consistency of models. While you never need to access the Consistency Manager directly, understanding how it works will help you understand Rocket Data.