Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
S
shopify_iossdk
Overview
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
cemarose
shopify_iossdk
Commits
df7ba142
Commit
df7ba142
authored
May 13, 2016
by
Dima Bart
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Wrap NSURLSessionTask in a BUYRequestOperation.
parent
2e1154ad
Hide whitespace changes
Inline
Side-by-side
Showing
6 changed files
with
190 additions
and
19 deletions
+190
-19
BUYClientTest.m
Mobile Buy SDK/Mobile Buy SDK Tests/BUYClientTest.m
+2
-1
project.pbxproj
Mobile Buy SDK/Mobile Buy SDK.xcodeproj/project.pbxproj
+12
-0
BUYClient.h
Mobile Buy SDK/Mobile Buy SDK/Data/BUYClient.h
+5
-0
BUYClient.m
Mobile Buy SDK/Mobile Buy SDK/Data/BUYClient.m
+8
-18
BUYRequestOperation.h
...e Buy SDK/Mobile Buy SDK/Operations/BUYRequestOperation.h
+33
-0
BUYRequestOperation.m
...e Buy SDK/Mobile Buy SDK/Operations/BUYRequestOperation.m
+130
-0
No files found.
Mobile Buy SDK/Mobile Buy SDK Tests/BUYClientTest.m
View file @
df7ba142
...
...
@@ -37,6 +37,7 @@
#import "BUYClient+Internal.h"
#import "BUYApplePayToken.h"
#import "BUYApplePayTestToken.h"
#import "BUYRequestOperation.h"
NSString
*
const
BUYFakeCustomerToken
=
@"dsfasdgafdg"
;
...
...
@@ -46,7 +47,7 @@ NSString * const BUYFakeCustomerToken = @"dsfasdgafdg";
@implementation
BUYClient_Test
-
(
void
)
startTask
:(
NSURLSessionDataTask
*
)
task
-
(
void
)
startTask
:(
BUYRequestOperation
*
)
task
{
// Do nothing
}
...
...
Mobile Buy SDK/Mobile Buy SDK.xcodeproj/project.pbxproj
View file @
df7ba142
...
...
@@ -359,6 +359,10 @@
9A0B0C731CEB52B90037D68F
/* BUYClient+Checkout.h in Headers */
=
{
isa
=
PBXBuildFile
;
fileRef
=
9A0B0C701CEB52B90037D68F
/* BUYClient+Checkout.h */
;
};
9A0B0C741CEB52B90037D68F
/* BUYClient+Checkout.m in Sources */
=
{
isa
=
PBXBuildFile
;
fileRef
=
9A0B0C711CEB52B90037D68F
/* BUYClient+Checkout.m */
;
};
9A0B0C751CEB52B90037D68F
/* BUYClient+Checkout.m in Sources */
=
{
isa
=
PBXBuildFile
;
fileRef
=
9A0B0C711CEB52B90037D68F
/* BUYClient+Checkout.m */
;
};
9A0B0C5D1CE662EC0037D68F
/* BUYRequestOperation.m in Sources */
=
{
isa
=
PBXBuildFile
;
fileRef
=
9A585C121CE65811001F20F0
/* BUYRequestOperation.m */
;
};
9A0B0C5E1CE662ED0037D68F
/* BUYRequestOperation.m in Sources */
=
{
isa
=
PBXBuildFile
;
fileRef
=
9A585C121CE65811001F20F0
/* BUYRequestOperation.m */
;
};
9A0B0C5F1CE662EF0037D68F
/* BUYRequestOperation.h in Headers */
=
{
isa
=
PBXBuildFile
;
fileRef
=
9A585C111CE65811001F20F0
/* BUYRequestOperation.h */
;
};
9A0B0C601CE662EF0037D68F
/* BUYRequestOperation.h in Headers */
=
{
isa
=
PBXBuildFile
;
fileRef
=
9A585C111CE65811001F20F0
/* BUYRequestOperation.h */
;
};
9A102D1B1CDD1F960026CC43
/* BUYErrorTests.m in Sources */
=
{
isa
=
PBXBuildFile
;
fileRef
=
9A102D1A1CDD1F960026CC43
/* BUYErrorTests.m */
;
};
9A102D1E1CDD25980026CC43
/* BUYOptionValueTests.m in Sources */
=
{
isa
=
PBXBuildFile
;
fileRef
=
9A102D1D1CDD25980026CC43
/* BUYOptionValueTests.m */
;
};
9A47CEFD1CE39F6000A6D5BA
/* BUYCreditCardToken.m in Sources */
=
{
isa
=
PBXBuildFile
;
fileRef
=
9A47CEFB1CE39F5B00A6D5BA
/* BUYCreditCardToken.m */
;
};
...
...
@@ -680,6 +684,8 @@
9A585C031CE6440B001F20F0
/* BUYCheckoutOperation.m */
=
{
isa
=
PBXFileReference
;
fileEncoding
=
4
;
lastKnownFileType
=
sourcecode.c.objc
;
path
=
BUYCheckoutOperation.m
;
sourceTree
=
"<group>"
;
};
9A585C041CE6440B001F20F0
/* BUYOperation.h */
=
{
isa
=
PBXFileReference
;
fileEncoding
=
4
;
lastKnownFileType
=
sourcecode.c.h
;
path
=
BUYOperation.h
;
sourceTree
=
"<group>"
;
};
9A585C051CE6440B001F20F0
/* BUYOperation.m */
=
{
isa
=
PBXFileReference
;
fileEncoding
=
4
;
lastKnownFileType
=
sourcecode.c.objc
;
path
=
BUYOperation.m
;
sourceTree
=
"<group>"
;
};
9A585C111CE65811001F20F0
/* BUYRequestOperation.h */
=
{
isa
=
PBXFileReference
;
fileEncoding
=
4
;
lastKnownFileType
=
sourcecode.c.h
;
path
=
BUYRequestOperation.h
;
sourceTree
=
"<group>"
;
};
9A585C121CE65811001F20F0
/* BUYRequestOperation.m */
=
{
isa
=
PBXFileReference
;
fileEncoding
=
4
;
lastKnownFileType
=
sourcecode.c.objc
;
path
=
BUYRequestOperation.m
;
sourceTree
=
"<group>"
;
};
9A6B03781CDA5D4F0054C26E
/* BUYAccountCredentialsTests.m */
=
{
isa
=
PBXFileReference
;
fileEncoding
=
4
;
lastKnownFileType
=
sourcecode.c.objc
;
path
=
BUYAccountCredentialsTests.m
;
sourceTree
=
"<group>"
;
};
9ABBCC9F1CF5C9D10075B0C5
/* BUYFakeSafariController.h */
=
{
isa
=
PBXFileReference
;
fileEncoding
=
4
;
lastKnownFileType
=
sourcecode.c.h
;
path
=
BUYFakeSafariController.h
;
sourceTree
=
"<group>"
;
};
9ABBCCA01CF5C9D10075B0C5
/* BUYFakeSafariController.m */
=
{
isa
=
PBXFileReference
;
fileEncoding
=
4
;
lastKnownFileType
=
sourcecode.c.objc
;
path
=
BUYFakeSafariController.m
;
sourceTree
=
"<group>"
;
};
...
...
@@ -1060,6 +1066,8 @@
9A585C031CE6440B001F20F0
/* BUYCheckoutOperation.m */
,
9A585C041CE6440B001F20F0
/* BUYOperation.h */
,
9A585C051CE6440B001F20F0
/* BUYOperation.m */
,
9A585C111CE65811001F20F0
/* BUYRequestOperation.h */
,
9A585C121CE65811001F20F0
/* BUYRequestOperation.m */
,
);
path
=
Operations
;
sourceTree
=
"<group>"
;
...
...
@@ -1303,6 +1311,7 @@
841ADE101CB6C942000004B0
/* NSDictionary+BUYAdditions.h in Headers */
,
841ADE1C1CB6C942000004B0
/* NSString+BUYAdditions.h in Headers */
,
841ADE181CB6C942000004B0
/* NSRegularExpression+BUYAdditions.h in Headers */
,
9A0B0C5F1CE662EF0037D68F
/* BUYRequestOperation.h in Headers */
,
9A47CEFF1CE39F6400A6D5BA
/* BUYCreditCardToken.h in Headers */
,
841ADE0C1CB6C942000004B0
/* NSDecimalNumber+BUYAdditions.h in Headers */
,
84980F331CB75C2900CFAB58
/* NSEntityDescription+BUYAdditions.h in Headers */
,
...
...
@@ -1411,6 +1420,7 @@
841ADDFF1CB6C942000004B0
/* NSArray+BUYAdditions.h in Headers */
,
841ADE1B1CB6C942000004B0
/* NSString+BUYAdditions.h in Headers */
,
841ADE171CB6C942000004B0
/* NSRegularExpression+BUYAdditions.h in Headers */
,
9A0B0C601CE662EF0037D68F
/* BUYRequestOperation.h in Headers */
,
9A47CF001CE39F6400A6D5BA
/* BUYCreditCardToken.h in Headers */
,
841ADE0B1CB6C942000004B0
/* NSDecimalNumber+BUYAdditions.h in Headers */
,
84980F321CB75C2900CFAB58
/* NSEntityDescription+BUYAdditions.h in Headers */
,
...
...
@@ -1686,6 +1696,7 @@
901931051BC5B9BC00D1134E
/* BUYOptionSelectionNavigationController.m in Sources */
,
9A585C091CE6440B001F20F0
/* BUYCheckoutOperation.m in Sources */
,
901931061BC5B9BC00D1134E
/* BUYDiscount.m in Sources */
,
9A0B0C5D1CE662EC0037D68F
/* BUYRequestOperation.m in Sources */
,
84DD129A1CC63FE600A2442D
/* _BUYCart.m in Sources */
,
841ADE0A1CB6C942000004B0
/* NSDateFormatter+BUYAdditions.m in Sources */
,
901931081BC5B9BC00D1134E
/* BUYRuntime.m in Sources */
,
...
...
@@ -1830,6 +1841,7 @@
BEB74A2A1B554BFB0005A300
/* BUYOptionSelectionNavigationController.m in Sources */
,
9A585C081CE6440B001F20F0
/* BUYCheckoutOperation.m in Sources */
,
BE9A64501B503CAD0033E558
/* BUYDiscount.m in Sources */
,
9A0B0C5E1CE662ED0037D68F
/* BUYRequestOperation.m in Sources */
,
84DD12821CC63FE600A2442D
/* _BUYCart.m in Sources */
,
841ADE091CB6C942000004B0
/* NSDateFormatter+BUYAdditions.m in Sources */
,
BE9A646F1B503D210033E558
/* BUYRuntime.m in Sources */
,
...
...
Mobile Buy SDK/Mobile Buy SDK/Data/BUYClient.h
View file @
df7ba142
...
...
@@ -94,6 +94,11 @@ NS_ASSUME_NONNULL_BEGIN
@property
(
nonatomic
,
strong
,
nonnull
)
BUYModelManager
*
modelManager
;
/**
* Queue where on which all request operation are executed
*/
@property
(
nonatomic
,
strong
,
nonnull
)
NSOperationQueue
*
requestQueue
;
/**
* Queue where callbacks will be called
* defaults to main queue
*/
...
...
Mobile Buy SDK/Mobile Buy SDK/Data/BUYClient.m
View file @
df7ba142
...
...
@@ -64,6 +64,7 @@ static NSString * const BUYClientJSONMimeType = @"application/json";
self
.
appId
=
appId
;
self
.
applicationName
=
[[
NSBundle
mainBundle
]
infoDictionary
][
@"CFBundleName"
]
?:
@""
;
self
.
queue
=
dispatch_get_main_queue
();
self
.
requestQueue
=
[
NSOperationQueue
new
];
self
.
session
=
[
self
urlSession
];
self
.
pageSize
=
25
;
}
...
...
@@ -80,7 +81,7 @@ static NSString * const BUYClientJSONMimeType = @"application/json";
config
.
HTTPAdditionalHeaders
=
@{
@"User-Agent"
:
[
NSString
stringWithFormat
:
@"Mobile Buy SDK iOS/%@/%@"
,
BUYClientVersionString
,
bundleIdentifier
]};
return
[
NSURLSession
sessionWithConfiguration
:
config
delegate
:
self
delegateQueue
:
nil
];
return
[
NSURLSession
sessionWithConfiguration
:
config
delegate
:
self
delegateQueue
:
self
.
requestQueue
];
}
-
(
void
)
setPageSize
:
(
NSUInteger
)
pageSize
...
...
@@ -149,9 +150,9 @@ static NSString * const BUYClientJSONMimeType = @"application/json";
#pragma mark - Generic Requests
-
(
void
)
startTask
:
(
NSURLSessionDataTask
*
)
task
-
(
void
)
startTask
:
(
BUYRequestOperation
*
)
task
{
[
task
resume
];
[
self
.
requestQueue
addOperation
:
task
];
}
-
(
NSString
*
)
authorizationHeader
...
...
@@ -176,26 +177,15 @@ static NSString * const BUYClientJSONMimeType = @"application/json";
}
request
.
HTTPMethod
=
method
;
NSURLSessionDataTask
*
task
=
[
self
.
session
dataTaskWithRequest
:
request
completionHandler
:
^
(
NSData
*
data
,
NSURLResponse
*
response
,
NSError
*
error
)
{
NSDictionary
*
json
=
nil
;
if
(
data
.
length
>
2
)
{
// 2 is the minimum amount of data {} for a JSON Object. Just ignore anything less.
json
=
[
NSJSONSerialization
JSONObjectWithData
:
data
options
:
0
error
:
nil
];
}
NSInteger
statusCode
=
[(
NSHTTPURLResponse
*
)
response
statusCode
];
BOOL
isSuccessful
=
(
statusCode
/
100
)
==
2
;
if
(
!
isSuccessful
&&
!
error
)
{
// Only generate error if request failed
error
=
[
self
errorFromJSON
:
json
response
:
response
];
}
BUYRequestOperation
*
operation
=
[[
BUYRequestOperation
alloc
]
initWithSession
:
self
.
session
request
:
request
payload
:
object
completion
:^
(
NSDictionary
*
json
,
NSURLResponse
*
response
,
NSError
*
error
)
{
dispatch_async
(
self
.
queue
,
^
{
completionHandler
(
json
,
response
,
error
);
});
}];
[
self
startTask
:
task
];
return
task
;
[
self
startTask
:
operation
];
return
(
id
)
operation
;
}
#pragma mark - NSURLSessionTaskDelegate
...
...
Mobile Buy SDK/Mobile Buy SDK/Operations/BUYRequestOperation.h
0 → 100644
View file @
df7ba142
//
// BUYRequestOperation.h
// Mobile Buy SDK
//
// Created by Dima Bart on 2016-05-13.
// Copyright © 2016 Shopify Inc. All rights reserved.
//
#import "BUYOperation.h"
NS_ASSUME_NONNULL_BEGIN
@protocol
BUYSerializable
;
typedef
NS_ENUM
(
NSUInteger
,
BUYRequestMethod
)
{
BUYRequestMethodGET
,
BUYRequestMethodPOST
,
BUYRequestMethodPUT
,
BUYRequestMethodPATCH
,
BUYRequestMethodDELETE
,
};
typedef
void
(
^
BUYRequestOperationCompletion
)(
NSDictionary
*
_Nullable
json
,
NSURLResponse
*
_Nullable
response
,
NSError
*
_Nullable
error
);
@interface
BUYRequestOperation
:
BUYOperation
@property
(
strong
,
nonatomic
,
readonly
,
nonnull
)
NSURLSession
*
session
;
@property
(
strong
,
nonatomic
,
readonly
,
nonnull
)
NSURLRequest
*
originalRequest
;
-
(
instancetype
)
initWithSession
:(
NSURLSession
*
)
session
request
:(
NSURLRequest
*
)
request
payload
:(
id
<
BUYSerializable
>
_Nullable
)
payload
completion
:(
BUYRequestOperationCompletion
)
completion
;
@end
NS_ASSUME_NONNULL_END
Mobile Buy SDK/Mobile Buy SDK/Operations/BUYRequestOperation.m
0 → 100644
View file @
df7ba142
//
// BUYRequestOperation.m
// Mobile Buy SDK
//
// Created by Dima Bart on 2016-05-13.
// Copyright © 2016 Shopify Inc. All rights reserved.
//
#import "BUYRequestOperation.h"
#import "BUYSerializable.h"
NSString
*
const
kShopifyError
=
@"shopify"
;
#pragma mark - NSURLResponse -
@interface
NSHTTPURLResponse
(
Conveniece
)
@property
(
assign
,
nonatomic
,
readonly
)
BOOL
successful
;
@end
@implementation
NSHTTPURLResponse
(
Conveniece
)
-
(
BOOL
)
successful
{
return
((
NSUInteger
)(
self
.
statusCode
/
100
))
==
2
;
}
@end
#pragma mark - BUYOperation Private -
@interface
BUYOperation
(
Private
)
-
(
void
)
setExecuting
:(
BOOL
)
executing
;
-
(
void
)
setFinished
:(
BOOL
)
finished
;
@end
#pragma mark - BUYRequestOperation -
@interface
BUYRequestOperation
()
@property
(
strong
,
nonatomic
)
BUYRequestOperationCompletion
completion
;
@end
@implementation
BUYRequestOperation
#pragma mark - Init -
-
(
instancetype
)
initWithSession
:(
NSURLSession
*
)
session
request
:(
NSURLRequest
*
)
request
payload
:(
id
<
BUYSerializable
>
)
payload
completion
:(
BUYRequestOperationCompletion
)
completion
{
self
=
[
super
init
];
if
(
self
)
{
_session
=
session
;
_originalRequest
=
request
;
_completion
=
completion
;
}
return
self
;
}
#pragma mark - Completion -
-
(
void
)
finishWithJSON
:(
id
)
JSON
response
:(
NSHTTPURLResponse
*
)
response
{
[
self
setExecuting
:
NO
];
self
.
completion
(
JSON
,
response
,
nil
);
}
-
(
void
)
finishWithError
:(
NSError
*
)
error
response
:(
NSHTTPURLResponse
*
)
response
{
[
self
setExecuting
:
NO
];
self
.
completion
(
nil
,
response
,
error
);
}
-
(
void
)
finishByCancellation
{
[
self
setFinished
:
YES
];
[
self
setExecuting
:
NO
];
}
#pragma mark - Start -
-
(
void
)
start
{
[
super
start
];
if
(
self
.
isCancelled
)
{
[
self
finishByCancellation
];
return
;
}
[
self
setExecuting
:
YES
];
NSURLSessionDataTask
*
task
=
[
self
.
session
dataTaskWithRequest
:
self
.
originalRequest
completionHandler
:
^
(
NSData
*
data
,
NSURLResponse
*
response
,
NSError
*
error
)
{
if
(
self
.
isCancelled
)
{
[
self
finishByCancellation
];
return
;
}
NSDictionary
*
json
=
nil
;
if
(
data
.
length
>
2
)
{
// 2 is the minimum amount of data {} for a JSON Object. Just ignore anything less.
json
=
[
NSJSONSerialization
JSONObjectWithData
:
data
options
:
0
error
:
nil
];
}
NSHTTPURLResponse
*
httpResponse
=
(
id
)
response
;
if
(
httpResponse
.
successful
)
{
[
self
finishWithJSON
:
json
response
:
httpResponse
];
}
else
{
if
(
!
error
)
{
error
=
[[
NSError
alloc
]
initWithDomain
:
kShopifyError
code
:
httpResponse
.
statusCode
userInfo
:
json
];
}
[
self
finishWithError
:
error
response
:
httpResponse
];
}
}];
[
task
resume
];
}
#pragma mark - BUYRequestMethod -
//static inline NSString * BUYRequestMethodString(BUYRequestMethod method)
//{
// switch (method) {
// case BUYRequestMethodGET: return @"GET";
// case BUYRequestMethodPOST: return @"POST";
// case BUYRequestMethodPATCH: return @"PATCH";
// case BUYRequestMethodPUT: return @"PUT";
// case BUYRequestMethodDELETE: return @"DELETE";
// }
//}
@end
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