Skip to content

Instantly share code, notes, and snippets.

View danielt1263's full-sized avatar

Daniel Tartaglia danielt1263

View GitHub Profile
extension URLRequest {
/// Produce a string that can be copy & pasted into the terminal in order to check the network response.
///
/// - Returns: A String representing the curl command of the request.
func curlCommand() -> String {
template(
method: httpMethod ?? "GET",
body: httpBody.flatMap { String(data: $0, encoding: .utf8)?.escapedQuotes() } ?? "",
headerFields: allHTTPHeaderFields?.map { ($0.key, $0.value.escapedQuotes()) } ?? [],
url: url?.absoluteString ?? "<unknown url>"
//
// ThrottleDebounceLatest.swift
//
// Created by Daniel Tartaglia on 14 Oct 2023.
// Copyright © 2023 Daniel Tartaglia. MIT License.
//
import Foundation
import RxSwift
@danielt1263
danielt1263 / PollContinuously+Rx.swift
Last active February 20, 2024 13:41
The pollContinuously operator is useful if you want to subscribe to an Observable again after it finishes...
//
// PollContinuously+Rx.swift
//
// Created by Daniel Tartaglia on 20 Jun 2023.
// Copyright © 2023 Daniel Tartaglia. MIT License.
//
import RxSwift
extension ObservableType {
@danielt1263
danielt1263 / SharedCache+Rx.swift
Last active June 20, 2023 10:51
I was asked to create a shared cache.
//
// SharedCache+Rx.swift
//
// Created by Daniel Tartaglia on 12 Jun 2021.
// Copyright © 2023 Daniel Tartaglia. MIT License.
//
import RxSwift
extension ObservableType {
// uses https://gist.github.com/danielt1263/bd449100764e3166644f7a38bca86c96
import RxSwift
import RxTest
import XCTest
final class ExampleTests: XCTestCase {
func test_merge_second_finishes_faster() {
let scheduler = TestScheduler(initialClock: 0)
let args = scheduler.createObserver(Device.self)
@danielt1263
danielt1263 / AccumulatingDebounce.swift
Last active March 10, 2023 20:02
Created by request. This operator works like the `debounce` operator except it emits all the elements that were created during the wait time.
//
// AccumulatingDebounce.swift
//
// Created by Daniel Tartaglia on 10 Mar 2023.
// Copyright © 2023 Daniel Tartaglia. MIT License.
//
import Foundation
import RxSwift
@danielt1263
danielt1263 / Combinators.swift
Created November 28, 2022 03:06
A list of combinators
func apply<A, B>(fn: (A) -> B, a: A) -> B {
fn(a)
}
func bluebird<A, B, C>(fn1: (A) -> B, fn2: (C) -> A, c: C) -> B {
fn1(fn2(c))
}
func blackbird<A, B, C, D>(fn1: (C) -> D, fn2: (A, B) -> C, a: A, b: B) -> D {
//
// Restart.swift
//
// Created by Daniel Tartaglia on 23 Jun 2022.
// Copyright © 2022 Daniel Tartaglia. MIT License.
//
import RxSwift
extension ObservableType {
struct MenuViewModelInput {
let fetchMenus: Observable<Void>
let clearSelections: Observable<Void>
let makeOrder: Observable<Void>
let increaseMenuCount: Observable<(menu: ViewMenu, inc: Int)>
}
struct MenuViewModelOutput {
let activated: Observable<Bool>
let errorMessage: Observable<Error>
//
// ActivityTracker.swift
//
// Created by Daniel Tartaglia on 05 Dec 2021.
// Copyright © 2021 Daniel Tartaglia. MIT License.
//
extension Publisher {
func trackActivity(_ activityTracker: ActivityTracker) -> AnyPublisher<Output, Failure> {
activityTracker.trackActivity(of: self)