Skip to content
This repository has been archived by the owner on Aug 26, 2022. It is now read-only.

Commit

Permalink
v1.5 (#41)
Browse files Browse the repository at this point in the history
  • Loading branch information
omaralbeik authored Feb 22, 2020
1 parent 0f14367 commit 8973785
Show file tree
Hide file tree
Showing 31 changed files with 394 additions and 123 deletions.
1 change: 0 additions & 1 deletion .codebeatignore

This file was deleted.

81 changes: 81 additions & 0 deletions .github/workflows/CI.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,81 @@
name: UserDefaultsStore

on:
push:
branches:
- master
pull_request:
branches:
- master

jobs:
Darwin:
name: Darwin
runs-on: macos-latest
strategy:
matrix:
xcode: ['/Applications/Xcode_11.3.app/Contents/Developer']
env:
PROJECT: UserDefaultsStore.xcodeproj
steps:
- uses: actions/checkout@v1
- name: Bundle Install
run: bundle install
- name: Brew Upgrade
run: |
brew update
brew outdated xctool || brew upgrade xctool
brew install swiftlint
- name: Test iOS
run: |
xcodebuild clean build test -project $PROJECT -scheme $SCHEME -destination "$DESTINATION" | XCPRETTY_JSON_FILE_OUTPUT="xcodebuild-ios.json" xcpretty -f `xcpretty-json-formatter`
bash <(curl -s https://codecov.io/bash) -cF ios -J 'UserDefaultsStore'
env:
DEVELOPER_DIR: ${{ matrix.xcode }}
SCHEME: UserDefaultsStore
DESTINATION: platform=iOS Simulator,name=iPhone 11
- name: Test macOS
run: |
xcodebuild clean build test -project $PROJECT -scheme $SCHEME -destination "$DESTINATION" | XCPRETTY_JSON_FILE_OUTPUT="xcodebuild-macos.json" xcpretty -f `xcpretty-json-formatter`
bash <(curl -s https://codecov.io/bash) -cF macos -J 'UserDefaultsStore'
env:
DEVELOPER_DIR: ${{ matrix.xcode }}
SCHEME: UserDefaultsStore
DESTINATION: platform=OS X
- name: Test tvOS
run: |
xcodebuild clean build test -project $PROJECT -scheme $SCHEME -destination "$DESTINATION" | XCPRETTY_JSON_FILE_OUTPUT="xcodebuild-tvos.json" xcpretty -f `xcpretty-json-formatter`
bash <(curl -s https://codecov.io/bash) -cF tvos -J 'UserDefaultsStore'
env:
DEVELOPER_DIR: ${{ matrix.xcode }}
SCHEME: UserDefaultsStore
DESTINATION: platform=tvOS Simulator,name=Apple TV 4K (at 1080p)
- name: Build watchOS
run: xcodebuild clean build -project $PROJECT -scheme $SCHEME -destination "$DESTINATION"
env:
DEVELOPER_DIR: ${{ matrix.xcode }}
SCHEME: UserDefaultsStore
DESTINATION: name=Apple Watch Series 5 - 40mm

Swiftlint:
runs-on: [macos]
name: SwiftLint
steps:
- uses: actions/checkout@v1
- name: SwiftLint
run: |
brew install swiftlint
swiftlint
CocoaPods:
name: CocoaPods
runs-on: macos-latest
strategy:
matrix:
platform: ['ios', 'macos', 'tvos', 'watchos']
xcode: ['/Applications/Xcode_11.3.app/Contents/Developer']
steps:
- uses: actions/checkout@v1
- name: Bundle Install
run: bundle install
- name: CocoaPods ${{ matrix.platform }}
run: bundle exec pod lib lint --skip-tests --allow-warnings --verbose --platforms=${{ matrix.platform }}
7 changes: 7 additions & 0 deletions .swiftpm/xcode/package.xcworkspace/contents.xcworkspacedata

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

19 changes: 0 additions & 19 deletions .travis.yml

This file was deleted.

3 changes: 2 additions & 1 deletion Package.swift
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@ let package = Package(
],
dependencies: [],
targets: [
.target(name: "UserDefaultsStore", dependencies: [], path: "Sources")
.target(name: "UserDefaultsStore", dependencies: [], path: "Sources"),
.testTarget(name: "UserDefaultsStoreTests", dependencies: ["UserDefaultsStore"], path: "Tests"),
]
)
5 changes: 2 additions & 3 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,6 @@
<p align="center">
<a href="https://travis-ci.org/omaralbeik/UserDefaultsStore"><img src="https://travis-ci.org/omaralbeik/UserDefaultsStore.svg?branch=master" alt="Build Status"></a>
<a href="https://codecov.io/gh/omaralbeik/UserDefaultsStore"><img src="https://codecov.io/gh/omaralbeik/UserDefaultsStore/branch/master/graph/badge.svg" alt="Test Coverage" /></a>
<a href="https://codebeat.co/projects/github-com-omaralbeik-userdefaultsstore-master"><img alt="codebeat badge" src="https://codebeat.co/badges/e12405dc-1370-49bb-bd35-5f248a347f1a" /></a>
<a href="https://github.com/omaralbeik/UserDefaultsStore"><img src="https://img.shields.io/cocoapods/p/UserDefaultsStore.svg?style=flat" alt="Platforms" /></a>
<a href="https://cocoapods.org/pods/UserDefaultsStore"><img src="https://img.shields.io/cocoapods/v/UserDefaultsStore.svg" alt="Cocoapods" /></a>
<a href="https://github.com/Carthage/Carthage"><img src="https://img.shields.io/badge/Carthage-compatible-4BC51D.svg?style=flat" alt="Carthage compatible" /></a>
Expand Down Expand Up @@ -33,7 +32,7 @@ You love Swift's `Codable` protocol and use it everywhere, who doesn't! Here is
</br>
<p>To integrate UserDefaultsStore into your Xcode project using <a href="https://github.com/Carthage/Carthage">Carthage</a>, specify it in your <code>Cartfile</code>:</p>

<pre><code class="ogdl language-ogdl">github "omaralbeik/UserDefaultsStore" ~&gt; 1.4.3
<pre><code class="ogdl language-ogdl">github "omaralbeik/UserDefaultsStore" ~&gt; 1.5.0
</code></pre>
</details>

Expand All @@ -48,7 +47,7 @@ let package = Package(
name: "YOUR_PROJECT_NAME",
targets: [],
dependencies: [
.package(url: "https://github.com/omaralbeik/UserDefaultsStore.git", from: "1.4.3")
.package(url: "https://github.com/omaralbeik/UserDefaultsStore.git", from: "1.5.0")
]
)
</code></pre>
Expand Down
7 changes: 3 additions & 4 deletions README_TR.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,9 +3,8 @@
</p>

<p align="center">
<a href="https://travis-ci.org/omaralbeik/UserDefaultsStore"><img src="https://travis-ci.org/omaralbeik/UserDefaultsStore.svg?branch=master" alt="Build Status"></a>
<a href="https://github.com/omaralbeik/UserDefaultsStore/actions"><img src="https://github.com/omaralbeik/UserDefaultsStore/workflows/UserDefaultsStore/badge.svg?branch=master" alt="Build Status"></a>
<a href="https://codecov.io/gh/omaralbeik/UserDefaultsStore"><img src="https://codecov.io/gh/omaralbeik/UserDefaultsStore/branch/master/graph/badge.svg" alt="Test Coverage" /></a>
<a href="https://codebeat.co/projects/github-com-omaralbeik-userdefaultsstore-master"><img alt="codebeat badge" src="https://codebeat.co/badges/e12405dc-1370-49bb-bd35-5f248a347f1a" /></a>
<a href="https://github.com/omaralbeik/UserDefaultsStore"><img src="https://img.shields.io/cocoapods/p/UserDefaultsStore.svg?style=flat" alt="Platforms" /></a>
<a href="https://cocoapods.org/pods/UserDefaultsStore"><img src="https://img.shields.io/cocoapods/v/UserDefaultsStore.svg" alt="Cocoapods" /></a>
<a href="https://github.com/Carthage/Carthage"><img src="https://img.shields.io/badge/Carthage-compatible-4BC51D.svg?style=flat" alt="Carthage compatible" /></a>
Expand Down Expand Up @@ -38,7 +37,7 @@ Swift'in `Codable` protokolüne bayılıyorsun ve her yerde kullanıyorsun, kim
</br>
<p>UserDefaultsStore'u <a href="https://github.com/Carthage/Carthage">Carthage</a>'u kullanarak Xcode projenize entegre etmek için, bunu <code>Cartfile</code>'da belirtin:

<pre><code class="ogdl language-ogdl">github "omaralbeik/UserDefaultsStore" ~&gt; 1.4.3
<pre><code class="ogdl language-ogdl">github "omaralbeik/UserDefaultsStore" ~&gt; 1.5.0
</code></pre>
</details>

Expand All @@ -52,7 +51,7 @@ Swift'in `Codable` protokolüne bayılıyorsun ve her yerde kullanıyorsun, kim

<pre><code class="swift language-swift">import PackageDescription
dependencies: [
.package(url: "https://github.com/omaralbeik/UserDefaultsStore.git", from: "1.4.3")
.package(url: "https://github.com/omaralbeik/UserDefaultsStore.git", from: "1.5.0")
]
</code></pre>
</details>
Expand Down
18 changes: 13 additions & 5 deletions Sources/SingleUserDefaultsStore.swift
Original file line number Diff line number Diff line change
Expand Up @@ -31,11 +31,11 @@ open class SingleUserDefaultsStore<T: Codable> {
/// **Warning**: Never use the same identifier for two -or more- different stores.
public let uniqueIdentifier: String

/// JSON encoder. _default is `JSONEncoder()`_
open var encoder = JSONEncoder()
/// JSON encoder to be used for encoding object to be stored.
open var encoder: JSONEncoder

/// JSON decoder. _default is `JSONDecoder()`_
open var decoder = JSONDecoder()
/// JSON decoder to be used to decode the stored object.
open var decoder: JSONDecoder

/// UserDefaults store.
private var store: UserDefaults
Expand All @@ -45,9 +45,17 @@ open class SingleUserDefaultsStore<T: Codable> {
/// **Warning**: Never use the same identifier for two -or more- different stores.
///
/// - Parameter uniqueIdentifier: store's unique identifier.
required public init?(uniqueIdentifier: String) {
/// - Parameter encoder: JSON encoder to be used for encoding object to be stored. _default is `JSONEncoder()`_
/// - Parameter decoder: JSON decoder to be used to decode the stored object. _default is `JSONDecoder()`_
required public init?(
uniqueIdentifier: String,
encoder: JSONEncoder = .init(),
decoder: JSONDecoder = .init()
) {
guard let store = UserDefaults(suiteName: uniqueIdentifier) else { return nil }
self.uniqueIdentifier = uniqueIdentifier
self.encoder = encoder
self.decoder = decoder
self.store = store
}

Expand Down
18 changes: 13 additions & 5 deletions Sources/UserDefaultsStore.swift
Original file line number Diff line number Diff line change
Expand Up @@ -31,11 +31,11 @@ open class UserDefaultsStore<T: Codable & Identifiable> {
/// **Warning**: Never use the same identifier for two -or more- different stores.
public let uniqueIdentifier: String

/// JSON encoder. _default is `JSONEncoder()`_
open var encoder = JSONEncoder()
/// JSON encoder to be used for encoding objects to be stored.
open var encoder: JSONEncoder

/// JSON decoder. _default is `JSONDecoder()`_
open var decoder = JSONDecoder()
/// JSON decoder to be used to decode stored objects.
open var decoder: JSONDecoder

/// UserDefaults store.
private var store: UserDefaults
Expand All @@ -45,9 +45,17 @@ open class UserDefaultsStore<T: Codable & Identifiable> {
/// **Warning**: Never use the same identifier for two -or more- different stores.
///
/// - Parameter uniqueIdentifier: store's unique identifier.
required public init?(uniqueIdentifier: String) {
/// - Parameter encoder: JSON encoder to be used for encoding objects to be stored. _default is `JSONEncoder()`_
/// - Parameter decoder: JSON decoder to be used to decode stored objects. _default is `JSONDecoder()`_
required public init?(
uniqueIdentifier: String,
encoder: JSONEncoder = .init(),
decoder: JSONDecoder = .init()
) {
guard let store = UserDefaults(suiteName: uniqueIdentifier) else { return nil }
self.uniqueIdentifier = uniqueIdentifier
self.encoder = encoder
self.decoder = decoder
self.store = store
}

Expand Down
21 changes: 19 additions & 2 deletions Tests/SingleStoreTests.swift
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,16 @@ final class SingleStoreTests: XCTestCase {
XCTAssertNotNil(store)
}

func testCreateStoreWithCustomEncoderAndDecoder() {
let encoder = JSONEncoder()
let decoder = JSONDecoder()

let store = createFreshUsersStore(encoder: encoder, decoder: decoder)
XCTAssertNotNil(store)
XCTAssert(store?.encoder === encoder)
XCTAssert(store?.decoder === decoder)
}

func testCreateInvalidStore() {
let invalidStore = SingleUserDefaultsStore<Bool>(uniqueIdentifier: UserDefaults.globalDomain)
XCTAssertNil(invalidStore)
Expand Down Expand Up @@ -61,8 +71,15 @@ final class SingleStoreTests: XCTestCase {
// MARK: - Helpers
private extension SingleStoreTests {

func createFreshUsersStore() -> SingleUserDefaultsStore<TestUser>? {
let store = SingleUserDefaultsStore<TestUser>(uniqueIdentifier: "single-user")
func createFreshUsersStore(
encoder: JSONEncoder = .init(),
decoder: JSONDecoder = .init()
) -> SingleUserDefaultsStore<TestUser>? {
let store = SingleUserDefaultsStore<TestUser>(
uniqueIdentifier: "single-user",
encoder: encoder,
decoder: decoder
)
store?.delete()
return store
}
Expand Down
35 changes: 33 additions & 2 deletions Tests/StoreTests.swift
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,30 @@ final class StoreTests: XCTestCase {
XCTAssertNotNil(store)
}

func testCreateStoreWithCustomEncoderAndDecoder() {
let encoder = JSONEncoder()
let decoder = JSONDecoder()

let store = createFreshUsersStore(encoder: encoder, decoder: decoder)
XCTAssertNotNil(store)
XCTAssert(store?.encoder === encoder)
XCTAssert(store?.decoder === decoder)
}

func testCreateStoreWithCustomDecoder() {
let encoder = JSONEncoder()
encoder.keyEncodingStrategy = .useDefaultKeys

let decoder = JSONDecoder()
decoder.keyDecodingStrategy = .convertFromSnakeCase

let store = createFreshUsersStore(encoder: encoder, decoder: decoder)
XCTAssertNotNil(store)

XCTAssertNoThrow(try store?.save(TestUser.john))
XCTAssertEqual(store?.object(withId: TestUser.john.userId), TestUser.john)
}

func testCreateInvalidStore() {
let invalidStore = UserDefaultsStore<TestUser>(uniqueIdentifier: UserDefaults.globalDomain)
XCTAssertNil(invalidStore)
Expand Down Expand Up @@ -181,8 +205,15 @@ final class StoreTests: XCTestCase {
// MARK: - Helpers
private extension StoreTests {

func createFreshUsersStore() -> UserDefaultsStore<TestUser>? {
let store = UserDefaultsStore<TestUser>(uniqueIdentifier: "users")
func createFreshUsersStore(
encoder: JSONEncoder = .init(),
decoder: JSONDecoder = .init()
) -> UserDefaultsStore<TestUser>? {
let store = UserDefaultsStore<TestUser>(
uniqueIdentifier: "users",
encoder: encoder,
decoder: decoder
)
store?.deleteAll()
return store
}
Expand Down
2 changes: 1 addition & 1 deletion UserDefaultsStore.podspec
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
Pod::Spec.new do |s|
s.name = "UserDefaultsStore"
s.version = "1.4.3"
s.version = "1.5.0"
s.summary = "Why not use UserDefaults to store Codable objects 😉"
s.description = <<-DESC
You love Swift"s Codable protocol and use it everywhere, here is an easy and very light way to store - reasonable amount 😅 - of Codable objects, in a couple lines of code.
Expand Down
4 changes: 2 additions & 2 deletions UserDefaultsStore.xcodeproj/project.pbxproj
Original file line number Diff line number Diff line change
Expand Up @@ -399,7 +399,7 @@
INFOPLIST_FILE = Sources/Info.plist;
INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
MARKETING_VERSION = 1.4.3;
MARKETING_VERSION = 1.5;
PRODUCT_BUNDLE_IDENTIFIER = com.omaralbeik.UserDefaultsStore;
PRODUCT_NAME = "$(TARGET_NAME)";
PROVISIONING_PROFILE_SPECIFIER = "";
Expand All @@ -423,7 +423,7 @@
INFOPLIST_FILE = Sources/Info.plist;
INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
MARKETING_VERSION = 1.4.3;
MARKETING_VERSION = 1.5;
PRODUCT_BUNDLE_IDENTIFIER = com.omaralbeik.UserDefaultsStore;
PRODUCT_NAME = "$(TARGET_NAME)";
PROVISIONING_PROFILE_SPECIFIER = "";
Expand Down
10 changes: 3 additions & 7 deletions docs/Classes.html
Original file line number Diff line number Diff line change
Expand Up @@ -68,7 +68,7 @@
<article class="main-content">

<section class="section">
<div class="section-content">
<div class="section-content top-matter">
<h1>Classes</h1>
<p>The following classes are available globally.</p>

Expand Down Expand Up @@ -107,10 +107,6 @@ <h4>Declaration</h4>
</section>
</div>
</li>
</ul>
</div>
<div class="task-group">
<ul class="item-container">
<li class="item">
<div>
<code>
Expand Down Expand Up @@ -147,8 +143,8 @@ <h4>Declaration</h4>
</article>
</div>
<section class="footer">
<p>&copy; 2019 <a class="link" href="https://github.com/omaralbeik/UserDefaultsStore" target="_blank" rel="external">Omar Albeik</a>. All rights reserved. (Last updated: 2019-11-17)</p>
<p>Generated by <a class="link" href="https://github.com/realm/jazzy" target="_blank" rel="external">jazzy ♪♫ v0.12.0</a>, a <a class="link" href="https://realm.io" target="_blank" rel="external">Realm</a> project.</p>
<p>&copy; 2020 <a class="link" href="https://github.com/omaralbeik/UserDefaultsStore" target="_blank" rel="external">Omar Albeik</a>. All rights reserved. (Last updated: 2020-02-22)</p>
<p>Generated by <a class="link" href="https://github.com/realm/jazzy" target="_blank" rel="external">jazzy ♪♫ v0.13.0</a>, a <a class="link" href="https://realm.io" target="_blank" rel="external">Realm</a> project.</p>
</section>
</body>
</div>
Expand Down
Loading

0 comments on commit 8973785

Please sign in to comment.