forked from VojtaStavik/APICommunicator-Alamofire
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathAPICallsFactory.swift
104 lines (64 loc) · 2.83 KB
/
APICallsFactory.swift
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
//
// APICallsFactory.swift
//
// Created by Vojta Stavik on 03/09/15.
// Copyright © 2015 STRV. All rights reserved.
//
import Foundation
public protocol APICallsFactory : APICommunicator {
var predefinedParameters : [String: AnyObject]? { get }
var predefinedHeaders : [String: String]? { get }
}
public extension APICallsFactory {
public func newOperation<T: APIResponseSerializer>(path: String, method: HTTPMethod, paramEncoding: ParamEncoding? = nil) -> APIRequestOperation<T>
{
let operation = APIRequestOperation<T>(communicator: self, path: path, method: method, paramEncoding: paramEncoding ?? .JSON) // FIXME: Proper encoding
addPredefinedHeaders(operation)
addPredefinedParameters(operation)
return operation
}
public func newOperation<T: APIResponseSerializer>(customExecClosure : APICommunicatorCustomCallClosure) -> APIRequestOperation<T>
{
let operation = APIRequestOperation<T>(communicator: self, customCallClosure: customExecClosure)
addPredefinedHeaders(operation)
addPredefinedParameters(operation)
return operation
}
public func addPredefinedHeaders<T: APIResponseSerializer>(operation: APIRequestOperation<T>) -> APIRequestOperation<T> {
if let predefinedHeaders = predefinedHeaders {
var headers = operation.headers ?? [String:String]()
for (key, value) in predefinedHeaders {
headers[key] = value
}
operation.headers = headers
}
return operation
}
public func addPredefinedParameters<T: APIResponseSerializer>(operation: APIRequestOperation<T>) -> APIRequestOperation<T> {
if let predefinedParameters = predefinedParameters {
var parameters = operation.parameters ?? [String:AnyObject]()
for (key, value) in predefinedParameters {
parameters[key] = value
}
operation.parameters = parameters
}
return operation
}
}
public extension APIRequestOperation
{
public func with(parameters parameters: [String: AnyObject]) -> APIRequestOperation {
self.parameters = self.parameters ?? [String:AnyObject]()
for (key,value) in parameters {
self.parameters![key] = value
}
return self
}
public func with(headers headers: [String: String]) -> APIRequestOperation {
self.headers = self.headers ?? [String:String]()
for (key,value) in headers {
self.headers![key] = value
}
return self
}
}