Skip to content

Instantly share code, notes, and snippets.

@boska
Created April 12, 2016 09:54
Show Gist options
  • Select an option

  • Save boska/c2afcc553716347060f0d367a2aa0517 to your computer and use it in GitHub Desktop.

Select an option

Save boska/c2afcc553716347060f0d367a2aa0517 to your computer and use it in GitHub Desktop.
//
// API.swift
// hauhau
//
// Created by boska on 4/11/16.
// Copyright © 2016 intentarget. All rights reserved.
//
import Moya
enum API {
case Timeline
case Me
case GroupTimeline(id: Int)
}
let APIProvider = MoyaProvider<API>(plugins: [NetworkLoggerPlugin(verbose: true, responseDataFormatter: JSONResponseDataFormatter)])
extension API: TargetType {
var baseURL: NSURL { return NSURL(string: "http://appapi.intentarget.com/v1.0")! }
var path: String {
switch self {
case .Timeline:
return "/timeline"
case .Me(let id):
return "/users/\(id)"
case .GroupTimeline(let id):
return "/group/\(id)/timeline"
}
}
var method: Moya.Method {
switch self {
case .Timeline, .Me, .GroupTimeline(_):
return .GET
}
}
var parameters: [String: AnyObject]? {
switch self {
case .Timeline, .Me, .GroupTimeline(_):
return nil
// case .CreateUser(let firstName, let lastName):
// return ["first_name": firstName, "last_name": lastName]
}
}
var sampleData: NSData {
switch self {
case .Timeline, .Me, .GroupTimeline(_):
return "Half measures are as bad as nothing at all.".UTF8EncodedData
// case .ShowUser(let id):
// return "{\"id\": \(id), \"first_name\": \"Harry\", \"last_name\": \"Potter\"}".UTF8EncodedData
// case .CreateUser(let firstName, let lastName):
// return "{\"id\": 100, \"first_name\": \"\(firstName)\", \"last_name\": \"\(lastName)\"}".UTF8EncodedData
}
}
}
// MARK: - Helpers
private extension String {
var URLEscapedString: String {
return self.stringByAddingPercentEncodingWithAllowedCharacters(NSCharacterSet.URLHostAllowedCharacterSet())!
}
var UTF8EncodedData: NSData {
return self.dataUsingEncoding(NSUTF8StringEncoding)!
}
}
private func JSONResponseDataFormatter(data: NSData) -> NSData {
do {
let dataAsJSON = try NSJSONSerialization.JSONObjectWithData(data, options: [])
let prettyData = try NSJSONSerialization.dataWithJSONObject(dataAsJSON, options: .PrettyPrinted)
return prettyData
} catch {
return data //fallback to original data if it cant be serialized
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment