/
XcodeServer+Repository.swift
105 lines (88 loc) · 3.89 KB
/
XcodeServer+Repository.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
105
//
// XcodeServer+Repository.swift
// XcodeServerSDK
//
// Created by Mateusz Zając on 30.06.2015.
// Copyright © 2015 Honza Dvorsky. All rights reserved.
//
import Foundation
import BuildaUtils
// MARK: - // MARK: - XcodeSever API Routes for Repositories management
extension XcodeServer {
/**
XCS API call for getting all repositories stored on Xcode Server.
- parameter repositories: Optional array of repositories.
- parameter error: Optional error
*/
public final func getRepositories(completion: (repositories: [Repository]?, error: NSError?) -> ()) {
self.sendRequestWithMethod(.GET, endpoint: .Repositories, params: nil, query: nil, body: nil) { (response, body, error) -> () in
guard error == nil else {
completion(repositories: nil, error: error)
return
}
guard let repositoriesBody = (body as? NSDictionary)?["results"] as? NSArray else {
completion(repositories: nil, error: Error.withInfo("Wrong body \(body)"))
return
}
let (result, error): ([Repository]?, NSError?) = unthrow {
return try XcodeServerArray(repositoriesBody)
}
completion(repositories: result, error: error)
}
}
/**
Enum with response from creation of repository.
- RepositoryAlreadyExists: Repository with this name already exists on OS X Server.
- NilResponse: Self explanatory.
- CorruptedJSON: JSON you've used to create repository.
- WrongStatusCode: Something wrong with HHTP status.
- Error: There was an error during netwotk activity.
- Success: Repository was successfully created 🎉
*/
public enum CreateRepositoryResponse {
case RepositoryAlreadyExists
case NilResponse
case CorruptedJSON
case WrongStatusCode(Int)
case Error(ErrorType)
case Success(Repository)
}
/**
XCS API call for creating new repository on configured Xcode Server.
- parameter repository: Repository object.
- parameter repository: Optional object of created repository.
- parameter error: Optional error.
*/
public final func createRepository(repository: Repository, completion: (response: CreateRepositoryResponse) -> ()) {
let body = repository.dictionarify()
self.sendRequestWithMethod(.POST, endpoint: .Repositories, params: nil, query: nil, body: body) { (response, body, error) -> () in
if let error = error {
completion(response: XcodeServer.CreateRepositoryResponse.Error(error))
return
}
guard let response = response else {
completion(response: XcodeServer.CreateRepositoryResponse.NilResponse)
return
}
guard let repositoryBody = body as? NSDictionary where response.statusCode == 204 else {
switch response.statusCode {
case 200:
completion(response: XcodeServer.CreateRepositoryResponse.CorruptedJSON)
case 409:
completion(response: XcodeServer.CreateRepositoryResponse.RepositoryAlreadyExists)
default:
completion(response: XcodeServer.CreateRepositoryResponse.WrongStatusCode(response.statusCode))
}
return
}
let (result, error): (Repository?, NSError?) = unthrow {
return try Repository(json: repositoryBody)
}
if let error = error {
completion(response: .Error(error))
} else {
completion(response: .Success(result!))
}
}
}
}