Skip to content

Instantly share code, notes, and snippets.

View pedantix's full-sized avatar
😍
SWIFT!

Shaun Hubbard pedantix

😍
SWIFT!
View GitHub Profile
@pedantix
pedantix / BasicUsageExampleTests.swift
Created October 28, 2017 20:11
XCUIApplication testing with Ambasador in Swift 4
//
// BasicUsageExampleTests.swift
// ExampleUITests
//
// Created by Shaun Hubbard on 10/28/17.
// Copyright © 2017 Shaun Codes. All rights reserved.
//
import XCTest
import Ambassador
@pedantix
pedantix / MyThing.swift
Created November 11, 2017 22:55
Decodable Enum
// every now and then I really find an enum to be the right construct for a data model
// in this case events have "eventTypes" and using pattern matching on the eventType is desirable
// eventTypes are based on a serverside array of possibilities "[private, public]" but theree is the possibility that
// this would be added to serverside so this should not nesecarily break the client implemenation
// to deal with this we need an unknown case
enum EventType: String, Decodable {
case `private`
case `public`
case unknown
import Ember from 'ember';
export default Ember.Controller.extend({
appName: 'Ember Twiddle'
});
@pedantix
pedantix / Fluent3Eagerload.swift
Created February 22, 2018 21:50
A Futuristic Eagerload idea for fluent
// Per Tanner
let cache = \User.pets.prefetchCache()
let users = User.query(on: ...).filter(...).prefetching(\.pets, into: cache).all() // await
for user in users {
let pets = user.pets.get(from: cache)
}
// Shaun's idea
struct User: Model {
var pets: Childeren<User, Pet>?
@pedantix
pedantix / JWTService.swift
Last active April 14, 2018 02:12
# Snippets For how I hacked together
import Foundation
import JWT
import Vapor
final class JWTService: Service {
var signer: JWTSigner
init(secret: String) {
signer = JWTSigner.hs512(key: Data(secret.utf8))
}
@pedantix
pedantix / RouteLoggingMiddleware.swift
Created March 5, 2018 03:57
Vapor 3 Request Logger
final class RouteLoggingMiddleware: Middleware, Service {
func respond(to request: Request, chainingTo next: Responder) throws -> Future<Response> {
let logger = try request.make(Logger.self)
let method = request.http.method
let path = request.http.uri.path
let query = request.http.uri.query
let reqString = "[\(method)]@\(path) with query:\(query)"
@pedantix
pedantix / Array.swift
Created March 10, 2018 21:10
descendingElementalPairs mocked this extension up to transform [1,2,3] -> [[1, 2], [1, 3] , [2, 3]]. Please suggest names
import Foundation
let anArray = [1, 2, 3, 4, 5]
extension Array where Element: Equatable {
func descendingElementalPairs() -> Array<Array<Element>> {
return self.enumerated()
.map { pair -> Array<Array<Element>> in
self[(pair.offset + 1)...].map {
@pedantix
pedantix / MyModels.swift
Created March 26, 2018 17:24
Counter Cache In Vapor 3
final class MyUser: PostgreSQLModel {
static let idKey: WritableKeyPath<MyUser, Int?> = \MyUser.id
var id: Int?
var myParticipationsCount: Int = 0
init(id: Int? = nil) {
self.id = id
}
}
@pedantix
pedantix / FizBuzPivots.swift
Created April 15, 2018 02:04
A Gist to show how to join 3+ tables together in psql, for the Vapor 3 Framework
final class Foo: PostgreSQLModel, Migration {
var id: Int?
}
final class Bar: PostgreSQLModel, Migration {
var id: Int?
}
final class Baz: PostgreSQLModel, Migration {
@pedantix
pedantix / router.swift
Created April 17, 2018 21:01
Vapor Teapot Route, inspired by @rafiki270
router.get("teapot") { req -> Response in
let resp = req.makeResponse()
resp.http.status = .custom(code: 418, reasonPhrase: "I am teapot")
return resp
}