Skip to content
GitLab
Projects
Groups
Snippets
Help
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Sign in
Toggle navigation
A
Api
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Commits
Open sidebar
Public iOS projects
Api
Commits
046e086b
Commit
046e086b
authored
Aug 14, 2016
by
Mauro E. Bender
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Close #5 - List resource items
parent
5dd5cb93
Changes
2
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
64 additions
and
24 deletions
+64
-24
Api/Classes/Resource.swift
Api/Classes/Resource.swift
+46
-24
Example/Tests/ResourceTests.swift
Example/Tests/ResourceTests.swift
+18
-0
No files found.
Api/Classes/Resource.swift
View file @
046e086b
...
...
@@ -27,30 +27,6 @@ public class Resource {
self
.
api
=
api
self
.
path
=
path
}
// MARK: UTILS
private
func
handleItemResult
<
T
:
JSONSerializable
>
(
response
:
Response
<
AnyObject
,
NSError
>
,
handler
:
(
T
?,
error
:
ApiError
?
)
->
Void
)
{
switch
(
response
.
result
)
{
case
.
Success
(
let
JSON
):
handler
(
T
(
fromJSON
:
JSON
as!
[
String
:
AnyObject
]
),
error
:
nil
)
case
.
Failure
(
let
error
):
handler
(
nil
,
error
:
handleError
(
response
)
)
}
}
private
func
handleError
(
response
:
Response
<
AnyObject
,
NSError
>
)
->
ApiError
{
let
error
=
response
.
result
.
error
!
if
let
statusCode
=
response
.
response
?
.
statusCode
where
!
(
200
...
299
)
.
contains
(
statusCode
)
{
return
.
Network
(
error
:
error
,
response
:
response
.
response
!
)
}
else
if
error
.
code
==
-
6006
{
return
.
JSONSerialization
(
error
:
error
)
}
return
.
Unknown
(
error
:
error
)
}
}
// MARK: REQUESTS
...
...
@@ -103,6 +79,14 @@ extension Resource {
}
}
public
func
list
<
T
:
JSONSerializable
>
(
parameters
:
[
String
:
String
]?
=
nil
,
headers
:
[
String
:
String
]?
=
nil
,
completion
:
(
(
[
T
]?,
error
:
ApiError
?
)
->
Void
)
)
{
get
(
parameters
:
parameters
,
headers
:
headers
)
{
response
in
self
.
handleListResult
(
response
,
handler
:
completion
)
}
}
public
func
create
<
T
:
JSONSerializable
>
(
item
:
T
,
parameters
:
[
String
:
String
]?
=
nil
,
headers
:
[
String
:
String
]?
=
nil
,
encoding
:
ParameterEncoding
=
.
JSON
,
completion
:
(
(
T
?,
error
:
ApiError
?
)
->
Void
)
)
...
...
@@ -114,6 +98,44 @@ extension Resource {
self
.
handleItemResult
(
response
,
handler
:
completion
)
}
}
// MARK: UTILS
private
func
handleItemResult
<
T
:
JSONSerializable
>
(
response
:
Response
<
AnyObject
,
NSError
>
,
handler
:
(
T
?,
error
:
ApiError
?
)
->
Void
)
{
switch
(
response
.
result
)
{
case
.
Success
(
let
JSON
):
handler
(
T
(
fromJSON
:
JSON
as!
[
String
:
AnyObject
]
),
error
:
nil
)
case
.
Failure
(
let
error
):
handler
(
nil
,
error
:
handleError
(
response
)
)
}
}
private
func
handleListResult
<
T
:
JSONSerializable
>
(
response
:
Response
<
AnyObject
,
NSError
>
,
handler
:
(
[
T
]?,
error
:
ApiError
?
)
->
Void
)
{
switch
(
response
.
result
)
{
case
.
Success
(
let
JSON
):
if
let
JSONList
=
JSON
as?
[
[
String
:
AnyObject
]
]
{
let
list
=
JSONList
.
map
{
T
(
fromJSON
:
$0
)
}
handler
(
list
,
error
:
nil
)
}
case
.
Failure
(
let
error
):
handler
(
nil
,
error
:
handleError
(
response
)
)
}
}
private
func
handleError
(
response
:
Response
<
AnyObject
,
NSError
>
)
->
ApiError
{
let
error
=
response
.
result
.
error
!
if
let
statusCode
=
response
.
response
?
.
statusCode
where
!
(
200
...
299
)
.
contains
(
statusCode
)
{
return
.
Network
(
error
:
error
,
response
:
response
.
response
!
)
}
else
if
error
.
code
==
-
6006
{
return
.
JSONSerialization
(
error
:
error
)
}
return
.
Unknown
(
error
:
error
)
}
}
// MARK: NESTED RESOURCES
...
...
Example/Tests/ResourceTests.swift
View file @
046e086b
...
...
@@ -22,6 +22,7 @@ class ResourceTests: QuickSpec {
stub
(
matchApiPath
(
"items/1"
,
method
:
.
DELETE
),
builder
:
http
(
200
)
)
stub
(
matchApiPath
(
"items/1"
,
method
:
.
PUT
),
builder
:
http
(
200
)
)
stub
(
matchApiPath
(
"failedItems"
,
method
:
.
POST
),
builder
:
http
(
422
)
)
stub
(
matchApiPath
(
"items"
),
builder
:
json
(
[
[
"id"
:
1
,
"name"
:
"Item 1"
],
[
"id"
:
2
,
"name"
:
"Item 2"
]
]
)
)
}
override
func
spec
()
{
...
...
@@ -72,6 +73,23 @@ class ResourceTests: QuickSpec {
}
}
describe
(
"list"
)
{
context
(
"when the request is successful"
)
{
it
(
"should call the correct endpoint and return the item"
)
{
waitUntil
{
done
in
resource
.
list
()
{
(
items
:
[
Item
]?,
error
:
ApiError
?
)
in
expect
(
items
?[
0
]
.
id
)
==
1
expect
(
items
?[
0
]
.
name
)
==
"Item 1"
expect
(
items
?[
1
]
.
id
)
==
2
expect
(
items
?[
1
]
.
name
)
==
"Item 2"
done
()
}
}
}
}
}
describe
(
"create"
)
{
context
(
"when the request is successful"
)
{
let
itemToCreate
=
Item
(
id
:
0
,
name
:
"Item 2"
)
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment