Skip to content

Instantly share code, notes, and snippets.

View piotrbernad's full-sized avatar

Piotr Bernad piotrbernad

View GitHub Profile
{
"batch": {
"uuid": "82c3cc53-a466-4e3f-8754-db3c3e779ebc",
},
"results": [
{
"status": "success",
"createdAt": "2025-09-04T09:58:14.914Z",
"finishedAt": "2025-09-04T10:00:40.541Z",
"errorMessage": null,
@piotrbernad
piotrbernad / Dockerfile
Created April 28, 2019 11:11 — forked from RoyalIcing/Dockerfile
Rails 5.1 Dockerfile
FROM ruby:2.4-alpine
ENV PATH /root/.yarn/bin:$PATH
RUN apk update && apk upgrade && \
apk add --no-cache bash git openssh build-base nodejs tzdata
RUN apk update \
&& apk add curl bash binutils tar gnupg \
&& rm -rf /var/cache/apk/* \
@piotrbernad
piotrbernad / TestingKeychain.swift
Created September 28, 2017 10:34
TestingKeychain.swift
// key keychain instance
let keychain = MockedKeychain()
// set some email
try? KeychainAccessors.email
.set(keychain: keychain, value: "[email protected]")
// get stored email
let storedEmail = try? KeychainAccessors.email
.get(keychain: keychain)
@piotrbernad
piotrbernad / MockedKeychain.swift
Created September 28, 2017 10:33
MockedKeychain
public class MockedKeychain: KeychainAccess {
public var data: [String: Data] = [:]
public func remove(_ key: String) throws {
_ = data.removeValue(forKey: key)
}
public func set(_ value: Data, key: String) throws {
data[key] = value
}
@piotrbernad
piotrbernad / KeychainAccessors.swift
Created September 28, 2017 10:33
KeychainAccessors
struct KeychainAccessors {
/// User's email assign during sign-in
static let email = KeychainAccessor<String>(name: "email",
decoding: { $0.data(using: .utf8) },
encoding: { String(data: $0, encoding: .utf8) }
)
}
@piotrbernad
piotrbernad / KeychainAccessor.swift
Last active November 14, 2017 09:34
KeychainAccessor
struct KeychainAccessor<T> {
// key name
let key: String
// transformers
let decoding: ((T) throws -> Data?)
let encoding: ((Data) throws -> T?)
// needs public accessor
public init(name: String, decoding: @escaping ((T) throws -> Data?), encoding: @escaping ((Data) throws -> T?)) {
@piotrbernad
piotrbernad / Cipher.swift
Last active November 14, 2017 09:32
Cipher.swift
enum Cipher {
case root
case generated(Data)
func decrypt(data: Data) throws -> Data {
/// In this case we use simple XOR decryption
/// In real work implementation we should use AES here
let _key = Array(key)
var _data: Data = Data()
for (offset, element) in data.enumerated() {
@piotrbernad
piotrbernad / KeychainAccess.swift
Created September 28, 2017 10:28
KeychainAccess.swift
public protocol KeychainAccess {
func remove(_ key: String) throws
func set(_ value: Data, key: String) throws
func get(_ key: String) throws -> Data?
}
struct FakeAPI {
static let api = API<FakeAPITarget>()
static func allPosts() -> Observable<[Post]> {
return api.provide(.posts)
}
}
class PostsDataSource {
func reloadData() {
public struct API<T: TargetType> {
fileprivate var provider: RxMoyaProvider<T> = RxMoyaProvider(plugins: [CachingPlugin()], trackInflights: true)
private func request(_ endpoint: T) -> Observable<Response> {
return provider.request(endpoint).asObservable()
}
public func request<O: JSONDecodable>(_ endpoint: T) -> Observable<O> {
return provider.request(endpoint).asObservable().mapObject()