// // Filter.swift // Pachyderm // // Created by Shadowfacts on 9/9/18. // Copyright © 2018 Shadowfacts. All rights reserved. // import Foundation public class Filter: Decodable { public let id: String public let phrase: String private let context: [String] public let expiresAt: Date? public let irreversible: Bool public let wholeWord: Bool public var contexts: [Context] { get { return context.compactMap(Context.init) } } public static func update(_ filter: Filter, phrase: String? = nil, context: [Context]? = nil, irreversible: Bool? = nil, wholeWord: Bool? = nil, expiresAt: Date? = nil) -> Request { return Request(method: .put, path: "/api/v1/filters/\(filter.id)", body: .parameters([ "phrase" => (phrase ?? filter.phrase), "irreversible" => (irreversible ?? filter.irreversible), "whole_word" => (wholeWord ?? filter.wholeWord), "expires_at" => (expiresAt ?? filter.expiresAt) ] + "context" => (context?.contextStrings ?? filter.context))) } public static func delete(_ filter: Filter) -> Request { return Request(method: .delete, path: "/api/v1/filters/\(filter.id)") } private enum CodingKeys: String, CodingKey { case id case phrase case context case expiresAt = "expires_at" case irreversible case wholeWord = "whole_word" } } extension Filter { public enum Context: String, Decodable { case home case notifications case `public` case thread } } extension Array where Element == Filter.Context { var contextStrings: [String] { return map { $0.rawValue } } }