· 9 years ago · Sep 22, 2016, 09:36 PM
1enum Router: URLRequestConvertible {
2static let baseURLString = "http://example.com"
3static var OAuthToken: String?
4
5case CreateUser([String: AnyObject])
6case ReadUser(String)
7case UpdateUser(String, [String: AnyObject])
8case DestroyUser(String)
9
10var method: Alamofire.Method {
11 switch self {
12 case .CreateUser:
13 return .POST
14 case .ReadUser:
15 return .GET
16 case .UpdateUser:
17 return .PUT
18 case .DestroyUser:
19 return .DELETE
20 }
21}
22
23var path: String {
24 switch self {
25 case .CreateUser:
26 return "/users"
27 case .ReadUser(let username):
28 return "/users/(username)"
29 case .UpdateUser(let username, _):
30 return "/users/(username)"
31 case .DestroyUser(let username):
32 return "/users/(username)"
33 }
34}
35
36// MARK: URLRequestConvertible
37
38var URLRequest: NSMutableURLRequest {
39 let URL = NSURL(string: Router.baseURLString)!
40 let mutableURLRequest = NSMutableURLRequest(URL: URL.URLByAppendingPathComponent(path))
41 mutableURLRequest.HTTPMethod = method.rawValue
42
43 if let token = Router.OAuthToken {
44 mutableURLRequest.setValue("Bearer (token)", forHTTPHeaderField: "Authorization")
45 }
46
47 switch self {
48 case .CreateUser(let parameters):
49 return Alamofire.ParameterEncoding.JSON.encode(mutableURLRequest, parameters: parameters).0
50 case .UpdateUser(_, let parameters):
51 return Alamofire.ParameterEncoding.URL.encode(mutableURLRequest, parameters: parameters).0
52 default:
53 return mutableURLRequest
54 }
55}
56}
57
58enum Router: URLRequestConvertible {
59 static let baseURLString = "http://example.com"
60 static var OAuthToken: String?
61
62 case CreateUser([String: AnyObject])
63 case ReadUser(String)
64 case UpdateUser(String, [String: AnyObject])
65 case DestroyUser(String)
66
67 var method: Alamofire.HTTPMethod {
68 switch self {
69 case .CreateUser:
70 return .post
71 case .ReadUser:
72 return .get
73 case .UpdateUser:
74 return .put
75 case .DestroyUser:
76 return .delete
77 }
78 }
79
80 var path: String {
81 switch self {
82 case .CreateUser:
83 return "/users"
84 case .ReadUser(let username):
85 return "/users/(username)"
86 case .UpdateUser(let username, _):
87 return "/users/(username)"
88 case .DestroyUser(let username):
89 return "/users/(username)"
90 }
91 }
92
93 func asURLRequest() throws -> URLRequest {
94 let url = URL(string: Router.baseURLString)!
95 var urlRequest = URLRequest(url: url.appendingPathComponent(path))
96 urlRequest.httpMethod = method.rawValue
97
98 if let token = Router.OAuthToken {
99 urlRequest.setValue("Bearer (token)", forHTTPHeaderField: "Authorization")
100 }
101
102 switch self {
103 case .CreateUser(let parameters):
104 return try Alamofire.JSONEncoding.default.encode(urlRequest, with: parameters)
105 case .UpdateUser(_, let parameters):
106 return try Alamofire.URLEncoding.default.encode(urlRequest, with: parameters)
107 default:
108 return urlRequest
109 }
110 }
111}