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
e1ba41a2
Commit
e1ba41a2
authored
May 19, 2016
by
Dima Bart
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Implement BUYCheckoutOperation (incomplete).
parent
e5aed2b3
Show whitespace changes
Inline
Side-by-side
Showing
8 changed files
with
283 additions
and
27 deletions
+283
-27
project.pbxproj
Mobile Buy SDK/Mobile Buy SDK.xcodeproj/project.pbxproj
+20
-0
BUYClient+Checkout.h
Mobile Buy SDK/Mobile Buy SDK/Data/BUYClient+Checkout.h
+2
-2
BUYClient+Checkout.m
Mobile Buy SDK/Mobile Buy SDK/Data/BUYClient+Checkout.m
+21
-9
BUYClient+Internal.h
Mobile Buy SDK/Mobile Buy SDK/Data/BUYClient+Internal.h
+14
-5
BUYClient.h
Mobile Buy SDK/Mobile Buy SDK/Data/BUYClient.h
+1
-0
BUYClient.m
Mobile Buy SDK/Mobile Buy SDK/Data/BUYClient.m
+45
-11
BUYCheckoutOperation.h
... Buy SDK/Mobile Buy SDK/Operations/BUYCheckoutOperation.h
+46
-0
BUYCheckoutOperation.m
... Buy SDK/Mobile Buy SDK/Operations/BUYCheckoutOperation.m
+134
-0
No files found.
Mobile Buy SDK/Mobile Buy SDK.xcodeproj/project.pbxproj
View file @
e1ba41a2
...
...
@@ -361,6 +361,10 @@
9A0B0C831CEB981C0037D68F
/* BUYClient+RoutingTests.m in Sources */
=
{
isa
=
PBXBuildFile
;
fileRef
=
9A0B0C821CEB981C0037D68F
/* BUYClient+RoutingTests.m */
;
};
9A0B0CA21CECC1BC0037D68F
/* BUYClient+Checkout.m in Sources */
=
{
isa
=
PBXBuildFile
;
fileRef
=
9A0B0C711CEB52B90037D68F
/* BUYClient+Checkout.m */
;
};
9A0B0CA31CECC1BD0037D68F
/* BUYClient+Checkout.m in Sources */
=
{
isa
=
PBXBuildFile
;
fileRef
=
9A0B0C711CEB52B90037D68F
/* BUYClient+Checkout.m */
;
};
9A0B0CA71CED0A860037D68F
/* BUYCheckoutOperation.h in Headers */
=
{
isa
=
PBXBuildFile
;
fileRef
=
9A0B0CA51CED0A860037D68F
/* BUYCheckoutOperation.h */
;
};
9A0B0CA81CED0A860037D68F
/* BUYCheckoutOperation.h in Headers */
=
{
isa
=
PBXBuildFile
;
fileRef
=
9A0B0CA51CED0A860037D68F
/* BUYCheckoutOperation.h */
;
};
9A0B0CA91CED0A860037D68F
/* BUYCheckoutOperation.m in Sources */
=
{
isa
=
PBXBuildFile
;
fileRef
=
9A0B0CA61CED0A860037D68F
/* BUYCheckoutOperation.m */
;
};
9A0B0CAA1CED0A860037D68F
/* BUYCheckoutOperation.m in Sources */
=
{
isa
=
PBXBuildFile
;
fileRef
=
9A0B0CA61CED0A860037D68F
/* BUYCheckoutOperation.m */
;
};
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 */
;
};
...
...
@@ -654,6 +658,8 @@
9A0B0C761CEB5BBD0037D68F
/* BUYAuthenticatedResponse.h */
=
{
isa
=
PBXFileReference
;
fileEncoding
=
4
;
lastKnownFileType
=
sourcecode.c.h
;
path
=
BUYAuthenticatedResponse.h
;
sourceTree
=
"<group>"
;
};
9A0B0C771CEB5BBD0037D68F
/* BUYAuthenticatedResponse.m */
=
{
isa
=
PBXFileReference
;
fileEncoding
=
4
;
lastKnownFileType
=
sourcecode.c.objc
;
path
=
BUYAuthenticatedResponse.m
;
sourceTree
=
"<group>"
;
};
9A0B0C821CEB981C0037D68F
/* BUYClient+RoutingTests.m */
=
{
isa
=
PBXFileReference
;
fileEncoding
=
4
;
lastKnownFileType
=
sourcecode.c.objc
;
path
=
"BUYClient+RoutingTests.m"
;
sourceTree
=
"<group>"
;
};
9A0B0CA51CED0A860037D68F
/* BUYCheckoutOperation.h */
=
{
isa
=
PBXFileReference
;
fileEncoding
=
4
;
lastKnownFileType
=
sourcecode.c.h
;
path
=
BUYCheckoutOperation.h
;
sourceTree
=
"<group>"
;
};
9A0B0CA61CED0A860037D68F
/* BUYCheckoutOperation.m */
=
{
isa
=
PBXFileReference
;
fileEncoding
=
4
;
lastKnownFileType
=
sourcecode.c.objc
;
path
=
BUYCheckoutOperation.m
;
sourceTree
=
"<group>"
;
};
9A102D1A1CDD1F960026CC43
/* BUYErrorTests.m */
=
{
isa
=
PBXFileReference
;
fileEncoding
=
4
;
lastKnownFileType
=
sourcecode.c.objc
;
path
=
BUYErrorTests.m
;
sourceTree
=
"<group>"
;
};
9A102D1D1CDD25980026CC43
/* BUYOptionValueTests.m */
=
{
isa
=
PBXFileReference
;
fileEncoding
=
4
;
lastKnownFileType
=
sourcecode.c.objc
;
path
=
BUYOptionValueTests.m
;
sourceTree
=
"<group>"
;
};
9A47CEF81CE39EC200A6D5BA
/* BUYPaymentToken.h */
=
{
isa
=
PBXFileReference
;
lastKnownFileType
=
sourcecode.c.h
;
path
=
BUYPaymentToken.h
;
sourceTree
=
"<group>"
;
};
...
...
@@ -1014,6 +1020,15 @@
name
=
"Operation Tests"
;
sourceTree
=
"<group>"
;
};
9A0B0CAB1CEDDBD80037D68F
/* Aggregate */
=
{
isa
=
PBXGroup
;
children
=
(
9A0B0CA51CED0A860037D68F
/* BUYCheckoutOperation.h */
,
9A0B0CA61CED0A860037D68F
/* BUYCheckoutOperation.m */
,
);
name
=
Aggregate
;
sourceTree
=
"<group>"
;
};
9A102D1C1CDD257D0026CC43
/* Models Tests */
=
{
isa
=
PBXGroup
;
children
=
(
...
...
@@ -1061,6 +1076,7 @@
9A585C051CE6440B001F20F0
/* BUYOperation.m */
,
9A585C111CE65811001F20F0
/* BUYRequestOperation.h */
,
9A585C121CE65811001F20F0
/* BUYRequestOperation.m */
,
9A0B0CAB1CEDDBD80037D68F
/* Aggregate */
,
);
path
=
Operations
;
sourceTree
=
"<group>"
;
...
...
@@ -1210,6 +1226,7 @@
84DD12A91CC63FE600A2442D
/* _BUYOrder.h in Headers */
,
84DD129F1CC63FE600A2442D
/* _BUYCustomer.h in Headers */
,
9A0B0C671CEA703E0037D68F
/* BUYClient+Routing.h in Headers */
,
9A0B0CA81CED0A860037D68F
/* BUYCheckoutOperation.h in Headers */
,
84DD12991CC63FE600A2442D
/* _BUYCart.h in Headers */
,
84DD129D1CC63FE600A2442D
/* _BUYCollection.h in Headers */
,
9A0B0C731CEB52B90037D68F
/* BUYClient+Checkout.h in Headers */
,
...
...
@@ -1374,6 +1391,7 @@
84D9154B1CC03F1600D334FB
/* BUYManagedObject.h in Headers */
,
84DD12CD1CC6401400A2442D
/* BUYCustomer.h in Headers */
,
BE9A645D1B503CE30033E558
/* BUYObject.h in Headers */
,
9A0B0CA71CED0A860037D68F
/* BUYCheckoutOperation.h in Headers */
,
BE9A646E1B503D1E0033E558
/* BUYRuntime.h in Headers */
,
BEB74A901B55A3D00005A300
/* BUYCollection.h in Headers */
,
84D915431CC0359700D334FB
/* BUYObserver.h in Headers */
,
...
...
@@ -1611,6 +1629,7 @@
9A0B0CA21CECC1BC0037D68F
/* BUYClient+Checkout.m in Sources */
,
841ADE0E1CB6C942000004B0
/* NSDecimalNumber+BUYAdditions.m in Sources */
,
84DD12AE1CC63FE600A2442D
/* _BUYProductVariant.m in Sources */
,
9A0B0CAA1CED0A860037D68F
/* BUYCheckoutOperation.m in Sources */
,
84B0A7211CDD261100253EB0
/* BUYSerializable.m in Sources */
,
9A47CEFE1CE39F6100A6D5BA
/* BUYCreditCardToken.m in Sources */
,
9A0B0C7B1CEB5BBD0037D68F
/* BUYAuthenticatedResponse.m in Sources */
,
...
...
@@ -1752,6 +1771,7 @@
9A0B0CA31CECC1BD0037D68F
/* BUYClient+Checkout.m in Sources */
,
841ADE0D1CB6C942000004B0
/* NSDecimalNumber+BUYAdditions.m in Sources */
,
84DD12961CC63FE600A2442D
/* _BUYProductVariant.m in Sources */
,
9A0B0CA91CED0A860037D68F
/* BUYCheckoutOperation.m in Sources */
,
84B0A7201CDD261100253EB0
/* BUYSerializable.m in Sources */
,
9A47CEFD1CE39F6000A6D5BA
/* BUYCreditCardToken.m in Sources */
,
9A0B0C7A1CEB5BBD0037D68F
/* BUYAuthenticatedResponse.m in Sources */
,
...
...
Mobile Buy SDK/Mobile Buy SDK/Data/BUYClient+Checkout.h
View file @
e1ba41a2
...
...
@@ -153,9 +153,9 @@ typedef void (^BUYDataGiftCardBlock)(BUYGiftCard * _Nullable giftCard, NSError *
* @param paymentToken Opaque payment token object. May be nil if the total checkout amount is equal to $0.00
* @param block (^BUYDataCheckoutBlock)(BUYCheckout *checkout, NSError *error);
*
* @return The associated BUY
Request
Operation
* @return The associated BUYOperation
*/
-
(
BUY
Request
Operation
*
)
completeCheckout
:(
BUYCheckout
*
)
checkout
paymentToken
:(
_Nullable
id
<
BUYPaymentToken
>
)
paymentToken
completion
:(
BUYDataCheckoutBlock
)
block
;
-
(
BUYOperation
*
)
completeCheckout
:(
BUYCheckout
*
)
checkout
paymentToken
:(
_Nullable
id
<
BUYPaymentToken
>
)
paymentToken
completion
:(
BUYDataCheckoutBlock
)
block
;
/**
* Retrieve the status of a BUYCheckout. This checks the status of the current payment processing job for the provided checkout.
...
...
Mobile Buy SDK/Mobile Buy SDK/Data/BUYClient+Checkout.m
View file @
e1ba41a2
...
...
@@ -27,6 +27,7 @@
#import "BUYClient+Checkout.h"
#import "BUYClient+Internal.h"
#import "BUYClient+Routing.h"
#import "BUYCheckoutOperation.h"
#import "BUYAddress.h"
#import "BUYCheckout.h"
#import "BUYGiftCard.h"
...
...
@@ -41,6 +42,8 @@
@implementation
BUYClient
(
Checkout
)
#pragma mark - API -
-
(
void
)
handleCheckoutResponse
:(
NSDictionary
*
)
json
error
:(
NSError
*
)
error
block
:(
BUYDataCheckoutBlock
)
block
{
BUYCheckout
*
checkout
=
nil
;
...
...
@@ -137,10 +140,15 @@
-
(
BUYRequestOperation
*
)
getCheckout
:(
BUYCheckout
*
)
checkout
completion
:(
BUYDataCheckoutBlock
)
block
{
return
[
self
getCheckout
:
checkout
start
:
YES
completion
:
block
];
}
-
(
BUYRequestOperation
*
)
getCheckout
:(
BUYCheckout
*
)
checkout
start
:(
BOOL
)
start
completion
:(
BUYDataCheckoutBlock
)
block
{
BUYAssertCheckout
(
checkout
);
NSURL
*
route
=
[
self
urlForCheckoutsWithToken
:
checkout
.
token
];
return
[
self
getRequestForURL
:
route
completionHandler
:
^
(
NSDictionary
*
json
,
NSURLResponse
*
response
,
NSError
*
error
)
{
return
[
self
getRequestForURL
:
route
start
:
start
completionHandler
:^
(
NSDictionary
*
json
,
NSURLResponse
*
response
,
NSError
*
error
)
{
[
self
handleCheckoutResponse
:
json
error
:
error
block
:
block
];
}];
}
...
...
@@ -155,7 +163,11 @@
}];
}
-
(
BUYRequestOperation
*
)
completeCheckout
:(
BUYCheckout
*
)
checkout
paymentToken
:(
id
<
BUYPaymentToken
>
)
paymentToken
completion
:(
BUYDataCheckoutBlock
)
block
-
(
BUYOperation
*
)
completeCheckout
:(
BUYCheckout
*
)
checkout
paymentToken
:(
id
<
BUYPaymentToken
>
)
paymentToken
completion
:(
BUYDataCheckoutBlock
)
block
{
return
[[
BUYCheckoutOperation
alloc
]
initWithClient
:
self
checkout
:
checkout
token
:
paymentToken
completion
:
block
];
}
-
(
BUYRequestOperation
*
)
beginCheckout
:(
BUYCheckout
*
)
checkout
paymentToken
:(
id
<
BUYPaymentToken
>
)
paymentToken
completion
:(
BUYDataCheckoutBlock
)
block
{
BUYAssertCheckout
(
checkout
);
...
...
@@ -164,7 +176,7 @@
BUYAssert
(
paymentToken
||
isFree
,
@"Failed to complete checkout. Checkout must have a payment token or have a payment value equal to $0.00"
);
NSURL
*
route
=
[
self
urlForCheckoutsCompletionWithToken
:
checkout
.
token
];
return
[
self
postRequestForURL
:
route
object
:[
paymentToken
JSONDictionary
]
completionHandler
:^
(
NSDictionary
*
json
,
NSURLResponse
*
response
,
NSError
*
error
)
{
return
[
self
postRequestForURL
:
route
object
:[
paymentToken
JSONDictionary
]
start
:
NO
completionHandler
:^
(
NSDictionary
*
json
,
NSURLResponse
*
response
,
NSError
*
error
)
{
[
self
handleCheckoutResponse
:
json
error
:
error
block
:
block
];
}];
}
...
...
@@ -173,7 +185,7 @@
{
BUYAssertCheckout
(
checkout
);
return
[
self
getCompletionStatusOfCheckoutToken
:
checkout
.
token
completion
:
block
];
return
[
self
getCompletionStatusOfCheckoutToken
:
checkout
.
token
start
:
YES
completion
:
block
];
}
-
(
BUYRequestOperation
*
)
getCompletionStatusOfCheckoutURL
:(
NSURL
*
)
url
completion
:(
BUYDataStatusBlock
)
block
...
...
@@ -190,19 +202,19 @@
BUYAssert
(
token
,
@"Failed to get completion status of checkout. Checkout URL must have a valid token associated with it."
);
return
[
self
getCompletionStatusOfCheckoutToken
:
token
completion
:
block
];
return
[
self
getCompletionStatusOfCheckoutToken
:
token
start
:
YES
completion
:
block
];
}
-
(
BUYRequestOperation
*
)
getCompletionStatusOfCheckoutToken
:(
NSString
*
)
token
completion
:(
BUYDataStatusBlock
)
block
-
(
BUYRequestOperation
*
)
getCompletionStatusOfCheckoutToken
:(
NSString
*
)
token
start
:(
BOOL
)
start
completion
:(
BUYDataStatusBlock
)
block
{
NSURL
*
route
=
[
self
urlForCheckoutsProcessingWithToken
:
token
];
return
[
self
getRequestForURL
:
route
completionHandler
:
^
(
NSDictionary
*
json
,
NSURLResponse
*
response
,
NSError
*
error
)
{
return
[
self
getRequestForURL
:
route
start
:
start
completionHandler
:^
(
NSDictionary
*
json
,
NSURLResponse
*
response
,
NSError
*
error
)
{
NSInteger
statusCode
=
[(
NSHTTPURLResponse
*
)
response
statusCode
];
block
([
self
statusForStatusCode
:
statusCode
error
:
error
],
error
);
}];
}
#pragma mark - Shipping Rates
#pragma mark - Shipping Rates
-
-
(
BUYRequestOperation
*
)
getShippingRatesForCheckout
:(
BUYCheckout
*
)
checkout
completion
:(
BUYDataShippingRatesBlock
)
block
{
...
...
@@ -223,7 +235,7 @@
}];
}
#pragma mark - Payments
#pragma mark - Payments
-
-
(
BUYRequestOperation
*
)
storeCreditCard
:(
BUYCreditCard
*
)
creditCard
checkout
:(
BUYCheckout
*
)
checkout
completion
:(
BUYDataCreditCardBlock
)
completion
{
...
...
Mobile Buy SDK/Mobile Buy SDK/Data/BUYClient+Internal.h
View file @
e1ba41a2
...
...
@@ -31,14 +31,23 @@ static NSString * const BUYShopifyErrorDomain = @"shopify";
static
NSString
*
const
BUYClientVersionString
=
@"1.3"
;
static
NSString
*
const
BUYClientCustomerAccessToken
=
@"X-Shopify-Customer-Access-Token"
;
typedef
void
(
^
BUYClientRequestJSONCompletion
)(
NSDictionary
*
json
,
NSURLResponse
*
response
,
NSError
*
error
);
@interface
BUYClient
(
Internal
)
-
(
BUYRequestOperation
*
)
getRequestForURL
:(
NSURL
*
)
url
completionHandler
:(
void
(
^
)(
NSDictionary
*
json
,
NSURLResponse
*
response
,
NSError
*
error
))
completionHandler
;
-
(
BUYRequestOperation
*
)
deleteRequestForURL
:(
NSURL
*
)
url
completionHandler
:(
void
(
^
)(
NSDictionary
*
json
,
NSURLResponse
*
response
,
NSError
*
error
))
completionHandler
;
-
(
BUYRequestOperation
*
)
getRequestForURL
:(
NSURL
*
)
url
completionHandler
:(
BUYClientRequestJSONCompletion
)
completionHandler
;
-
(
BUYRequestOperation
*
)
deleteRequestForURL
:(
NSURL
*
)
url
completionHandler
:(
BUYClientRequestJSONCompletion
)
completionHandler
;
-
(
BUYRequestOperation
*
)
postRequestForURL
:(
NSURL
*
)
url
object
:(
id
<
BUYSerializable
>
)
object
completionHandler
:(
BUYClientRequestJSONCompletion
)
completionHandler
;
-
(
BUYRequestOperation
*
)
putRequestForURL
:(
NSURL
*
)
url
object
:(
id
<
BUYSerializable
>
)
object
completionHandler
:(
BUYClientRequestJSONCompletion
)
completionHandler
;
-
(
BUYRequestOperation
*
)
patchRequestForURL
:(
NSURL
*
)
url
object
:(
id
<
BUYSerializable
>
)
object
completionHandler
:(
BUYClientRequestJSONCompletion
)
completionHandler
;
-
(
BUYRequestOperation
*
)
getRequestForURL
:(
NSURL
*
)
url
start
:(
BOOL
)
start
completionHandler
:(
BUYClientRequestJSONCompletion
)
completionHandler
;
-
(
BUYRequestOperation
*
)
deleteRequestForURL
:(
NSURL
*
)
url
start
:(
BOOL
)
start
completionHandler
:(
BUYClientRequestJSONCompletion
)
completionHandler
;
-
(
BUYRequestOperation
*
)
postRequestForURL
:(
NSURL
*
)
url
object
:(
id
<
BUYSerializable
>
)
object
completionHandler
:(
void
(
^
)(
NSDictionary
*
json
,
NSURLResponse
*
response
,
NSError
*
error
)
)
completionHandler
;
-
(
BUYRequestOperation
*
)
putRequestForURL
:(
NSURL
*
)
url
object
:(
id
<
BUYSerializable
>
)
object
completionHandler
:(
void
(
^
)(
NSDictionary
*
json
,
NSURLResponse
*
response
,
NSError
*
error
)
)
completionHandler
;
-
(
BUYRequestOperation
*
)
patchRequestForURL
:(
NSURL
*
)
url
object
:(
id
<
BUYSerializable
>
)
object
completionHandler
:(
void
(
^
)(
NSDictionary
*
json
,
NSURLResponse
*
response
,
NSError
*
error
)
)
completionHandler
;
-
(
BUYRequestOperation
*
)
postRequestForURL
:(
NSURL
*
)
url
object
:(
id
<
BUYSerializable
>
)
object
start
:(
BOOL
)
start
completionHandler
:(
BUYClientRequestJSONCompletion
)
completionHandler
;
-
(
BUYRequestOperation
*
)
putRequestForURL
:(
NSURL
*
)
url
object
:(
id
<
BUYSerializable
>
)
object
start
:(
BOOL
)
start
completionHandler
:(
BUYClientRequestJSONCompletion
)
completionHandler
;
-
(
BUYRequestOperation
*
)
patchRequestForURL
:(
NSURL
*
)
url
object
:(
id
<
BUYSerializable
>
)
object
start
:(
BOOL
)
start
completionHandler
:(
BUYClientRequestJSONCompletion
)
completionHandler
;
-
(
BUYStatus
)
statusForStatusCode
:(
NSUInteger
)
statusCode
error
:(
NSError
*
)
error
;
-
(
NSError
*
)
errorFromJSON
:(
NSDictionary
*
)
json
response
:(
NSURLResponse
*
)
response
;
...
...
Mobile Buy SDK/Mobile Buy SDK/Data/BUYClient.h
View file @
e1ba41a2
...
...
@@ -27,6 +27,7 @@
@import
Foundation
;
@class
BUYModelManager
;
@class
BUYOperation
;
@class
BUYRequestOperation
;
/**
...
...
Mobile Buy SDK/Mobile Buy SDK/Data/BUYClient.m
View file @
e1ba41a2
...
...
@@ -117,31 +117,58 @@ static NSString * const BUYClientJSONMimeType = @"application/json";
return
nil
;
}
#pragma mark - Auto Starting Convenience Requests
-
(
BUYRequestOperation
*
)
getRequestForURL
:
(
NSURL
*
)
url
completionHandler
:
(
BUYClientRequestJSONCompletion
)
completionHandler
{
return
[
self
getRequestForURL
:
url
start
:
YES
completionHandler
:
completionHandler
];
}
-
(
BUYRequestOperation
*
)
postRequestForURL
:
(
NSURL
*
)
url
object
:
(
id
<
BUYSerializable
>
)
object
completionHandler
:
(
BUYClientRequestJSONCompletion
)
completionHandler
{
return
[
self
postRequestForURL
:
url
object
:
object
start
:
YES
completionHandler
:
completionHandler
];
}
-
(
BUYRequestOperation
*
)
putRequestForURL
:
(
NSURL
*
)
url
object
:
(
id
<
BUYSerializable
>
)
object
completionHandler
:
(
BUYClientRequestJSONCompletion
)
completionHandler
{
return
[
self
putRequestForURL
:
url
object
:
object
start
:
YES
completionHandler
:
completionHandler
];
}
-
(
BUYRequestOperation
*
)
patchRequestForURL
:
(
NSURL
*
)
url
object
:
(
id
<
BUYSerializable
>
)
object
completionHandler
:
(
BUYClientRequestJSONCompletion
)
completionHandler
{
return
[
self
patchRequestForURL
:
url
object
:
object
start
:
YES
completionHandler
:
completionHandler
];
}
-
(
BUYRequestOperation
*
)
deleteRequestForURL
:
(
NSURL
*
)
url
completionHandler
:
(
BUYClientRequestJSONCompletion
)
completionHandler
{
return
[
self
deleteRequestForURL
:
url
start
:
YES
completionHandler
:
completionHandler
];
}
#pragma mark - Convenience Requests
-
(
BUYRequestOperation
*
)
getRequestForURL
:
(
NSURL
*
)
url
completionHandler
:
(
void
(
^
)(
NSDictionary
*
json
,
NSURLResponse
*
response
,
NSError
*
error
)
)
completionHandler
-
(
BUYRequestOperation
*
)
getRequestForURL
:
(
NSURL
*
)
url
start
:
(
BOOL
)
start
completionHandler
:
(
BUYClientRequestJSONCompletion
)
completionHandler
{
return
[
self
requestForURL
:
url
method
:
@"GET"
object
:
nil
completionHandler
:
completionHandler
];
return
[
self
requestForURL
:
url
method
:
@"GET"
object
:
nil
start
:
start
completionHandler
:
completionHandler
];
}
-
(
BUYRequestOperation
*
)
postRequestForURL
:
(
NSURL
*
)
url
object
:
(
id
<
BUYSerializable
>
)
object
completionHandler
:
(
void
(
^
)(
NSDictionary
*
json
,
NSURLResponse
*
response
,
NSError
*
error
)
)
completionHandler
-
(
BUYRequestOperation
*
)
postRequestForURL
:
(
NSURL
*
)
url
object
:
(
id
<
BUYSerializable
>
)
object
start
:
(
BOOL
)
start
completionHandler
:
(
BUYClientRequestJSONCompletion
)
completionHandler
{
return
[
self
requestForURL
:
url
method
:
@"POST"
object
:
object
completionHandler
:
completionHandler
];
return
[
self
requestForURL
:
url
method
:
@"POST"
object
:
object
start
:
start
completionHandler
:
completionHandler
];
}
-
(
BUYRequestOperation
*
)
putRequestForURL
:
(
NSURL
*
)
url
object
:
(
id
<
BUYSerializable
>
)
object
completionHandler
:
(
void
(
^
)(
NSDictionary
*
json
,
NSURLResponse
*
response
,
NSError
*
error
)
)
completionHandler
-
(
BUYRequestOperation
*
)
putRequestForURL
:
(
NSURL
*
)
url
object
:
(
id
<
BUYSerializable
>
)
object
start
:
(
BOOL
)
start
completionHandler
:
(
BUYClientRequestJSONCompletion
)
completionHandler
{
return
[
self
requestForURL
:
url
method
:
@"PUT"
object
:
object
completionHandler
:
completionHandler
];
return
[
self
requestForURL
:
url
method
:
@"PUT"
object
:
object
start
:
start
completionHandler
:
completionHandler
];
}
-
(
BUYRequestOperation
*
)
patchRequestForURL
:
(
NSURL
*
)
url
object
:
(
id
<
BUYSerializable
>
)
object
completionHandler
:
(
void
(
^
)(
NSDictionary
*
json
,
NSURLResponse
*
response
,
NSError
*
error
)
)
completionHandler
-
(
BUYRequestOperation
*
)
patchRequestForURL
:
(
NSURL
*
)
url
object
:
(
id
<
BUYSerializable
>
)
object
start
:
(
BOOL
)
start
completionHandler
:
(
BUYClientRequestJSONCompletion
)
completionHandler
{
return
[
self
requestForURL
:
url
method
:
@"PATCH"
object
:
object
completionHandler
:
completionHandler
];
return
[
self
requestForURL
:
url
method
:
@"PATCH"
object
:
object
start
:
start
completionHandler
:
completionHandler
];
}
-
(
BUYRequestOperation
*
)
deleteRequestForURL
:
(
NSURL
*
)
url
completionHandler
:
(
void
(
^
)(
NSDictionary
*
json
,
NSURLResponse
*
response
,
NSError
*
error
)
)
completionHandler
-
(
BUYRequestOperation
*
)
deleteRequestForURL
:
(
NSURL
*
)
url
start
:
(
BOOL
)
start
completionHandler
:
(
BUYClientRequestJSONCompletion
)
completionHandler
{
return
[
self
requestForURL
:
url
method
:
@"DELETE"
object
:
nil
completionHandler
:
completionHandler
];
return
[
self
requestForURL
:
url
method
:
@"DELETE"
object
:
nil
start
:
start
completionHandler
:
completionHandler
];
}
#pragma mark - Generic Requests
...
...
@@ -157,7 +184,12 @@ static NSString * const BUYClientJSONMimeType = @"application/json";
return
[
NSString
stringWithFormat
:
@"%@ %@"
,
@"Basic"
,
[
data
base64EncodedStringWithOptions
:
0
]];
}
-
(
BUYRequestOperation
*
)
requestForURL
:
(
NSURL
*
)
url
method
:
(
NSString
*
)
method
object
:
(
id
<
BUYSerializable
>
)
object
completionHandler
:
(
void
(
^
)(
NSDictionary
*
json
,
NSURLResponse
*
response
,
NSError
*
error
))
completionHandler
-
(
BUYRequestOperation
*
)
requestForURL
:
(
NSURL
*
)
url
method
:
(
NSString
*
)
method
object
:
(
id
<
BUYSerializable
>
)
object
completionHandler
:
(
BUYClientRequestJSONCompletion
)
completionHandler
{
return
[
self
requestForURL
:
url
method
:
method
object
:
object
start
:
YES
completionHandler
:
completionHandler
];
}
-
(
BUYRequestOperation
*
)
requestForURL
:
(
NSURL
*
)
url
method
:
(
NSString
*
)
method
object
:
(
id
<
BUYSerializable
>
)
object
start
:
(
BOOL
)
start
completionHandler
:
(
BUYClientRequestJSONCompletion
)
completionHandler
{
NSMutableURLRequest
*
request
=
[[
NSMutableURLRequest
alloc
]
initWithURL
:
url
];
if
(
object
)
{
...
...
@@ -180,7 +212,9 @@ static NSString * const BUYClientJSONMimeType = @"application/json";
}];
}];
if
(
start
)
{
[
self
startTask
:
operation
];
}
return
operation
;
}
...
...
Mobile Buy SDK/Mobile Buy SDK/Operations/BUYCheckoutOperation.h
0 → 100644
View file @
e1ba41a2
//
// BUYCheckoutOperation.h
// Mobile Buy SDK
//
// Created by Shopify.
// Copyright (c) 2015 Shopify Inc. All rights reserved.
//
// Permission is hereby granted, free of charge, to any person obtaining a copy
// of this software and associated documentation files (the "Software"), to deal
// in the Software without restriction, including without limitation the rights
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
// copies of the Software, and to permit persons to whom the Software is
// furnished to do so, subject to the following conditions:
//
// The above copyright notice and this permission notice shall be included in
// all copies or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
// THE SOFTWARE.
//
#import "BUYOperation.h"
NS_ASSUME_NONNULL_BEGIN
@class
BUYClient
;
@class
BUYCheckout
;
@protocol
BUYPaymentToken
;
typedef
void
(
^
BUYCheckoutOperationCompletion
)(
BUYCheckout
*
_Nullable
checkout
,
NSError
*
_Nullable
error
);
@interface
BUYCheckoutOperation
:
BUYOperation
@property
(
strong
,
nonatomic
,
readonly
,
nonnull
)
BUYClient
*
client
;
+
(
instancetype
)
operationWithClient
:(
BUYClient
*
)
client
checkout
:(
BUYCheckout
*
)
checkout
token
:(
id
<
BUYPaymentToken
>
)
token
completion
:(
BUYCheckoutOperationCompletion
)
completion
;
-
(
instancetype
)
initWithClient
:(
BUYClient
*
)
client
checkout
:(
BUYCheckout
*
)
checkout
token
:(
id
<
BUYPaymentToken
>
)
token
completion
:(
BUYCheckoutOperationCompletion
)
completion
;
@end
NS_ASSUME_NONNULL_END
Mobile Buy SDK/Mobile Buy SDK/Operations/BUYCheckoutOperation.m
0 → 100644
View file @
e1ba41a2
//
// BUYCheckoutOperation.m
// Mobile Buy SDK
//
// Created by Shopify.
// Copyright (c) 2015 Shopify Inc. All rights reserved.
//
// Permission is hereby granted, free of charge, to any person obtaining a copy
// of this software and associated documentation files (the "Software"), to deal
// in the Software without restriction, including without limitation the rights
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
// copies of the Software, and to permit persons to whom the Software is
// furnished to do so, subject to the following conditions:
//
// The above copyright notice and this permission notice shall be included in
// all copies or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
// THE SOFTWARE.
//
#import "BUYCheckoutOperation.h"
#import "BUYClient+Checkout.h"
#import "BUYPaymentToken.h"
#import "BUYCheckout.h"
#import "BUYRequestOperation.h"
@interface
BUYClient
(
PrivateCheckout
)
-
(
BUYRequestOperation
*
)
beginCheckout
:(
BUYCheckout
*
)
checkout
paymentToken
:(
id
<
BUYPaymentToken
>
)
paymentToken
completion
:(
BUYDataCheckoutBlock
)
block
;
-
(
BUYRequestOperation
*
)
getCompletionStatusOfCheckoutToken
:(
NSString
*
)
token
start
:(
BOOL
)
start
completion
:(
BUYDataStatusBlock
)
block
;
-
(
BUYRequestOperation
*
)
getCheckout
:(
BUYCheckout
*
)
checkout
start
:(
BOOL
)
start
completion
:(
BUYDataCheckoutBlock
)
block
;
@end
@interface
BUYCheckoutOperation
()
@property
(
strong
,
nonatomic
,
readonly
)
BUYCheckout
*
checkout
;
@property
(
strong
,
nonatomic
,
readonly
)
id
<
BUYPaymentToken
>
token
;
@property
(
strong
,
nonatomic
,
readonly
)
BUYCheckoutOperationCompletion
completion
;
@property
(
strong
,
nonatomic
,
readonly
)
NSArray
*
operations
;
@end
@implementation
BUYCheckoutOperation
#pragma mark - Init -
+
(
instancetype
)
operationWithClient
:(
BUYClient
*
)
client
checkout
:(
BUYCheckout
*
)
checkout
token
:(
id
<
BUYPaymentToken
>
)
token
completion
:(
BUYCheckoutOperationCompletion
)
completion
{
return
[[[
self
class
]
alloc
]
initWithClient
:
client
checkout
:
checkout
token
:
token
completion
:
completion
];
}
-
(
instancetype
)
initWithClient
:(
BUYClient
*
)
client
checkout
:(
BUYCheckout
*
)
checkout
token
:(
id
<
BUYPaymentToken
>
)
token
completion
:(
BUYCheckoutOperationCompletion
)
completion
{
self
=
[
super
init
];
if
(
self
)
{
_client
=
client
;
_checkout
=
checkout
;
_token
=
token
;
_completion
=
completion
;
}
return
self
;
}
#pragma mark - Finishing -
-
(
void
)
finishWithCheckout
:(
BUYCheckout
*
)
checkout
{
[
self
finishExecution
];
self
.
completion
(
checkout
,
nil
);
}
-
(
void
)
finishWithError
:(
NSError
*
)
error
{
[
self
finishExecution
];
self
.
completion
(
nil
,
error
);
}
#pragma mark - Execution -
-
(
void
)
startExecution
{
[
super
startExecution
];
__weak
typeof
(
self
)
weakSelf
=
self
;
BUYRequestOperation
*
beginOperation
=
[
self
.
client
beginCheckout
:
self
.
checkout
paymentToken
:
self
.
token
completion
:^
(
BUYCheckout
*
checkout
,
NSError
*
error
)
{
if
(
weakSelf
.
isCancelled
||
!
checkout
)
{
[
weakSelf
cancel
];
return
;
}
}];
BUYRequestOperation
*
pollingOperation
=
[
self
.
client
getCompletionStatusOfCheckoutToken
:
self
.
checkout
.
token
start
:
NO
completion
:^
(
BUYStatus
status
,
NSError
*
error
)
{
if
(
weakSelf
.
isCancelled
||
status
!=
BUYStatusComplete
)
{
[
weakSelf
cancel
];
return
;
}
}];
pollingOperation
.
pollingHandler
=
^
BOOL
(
NSDictionary
*
json
,
NSHTTPURLResponse
*
response
,
NSError
*
error
)
{
return
response
.
statusCode
==
BUYStatusProcessing
;
};
BUYRequestOperation
*
getOperation
=
[
self
.
client
getCheckout
:
self
.
checkout
completion
:
^
(
BUYCheckout
*
checkout
,
NSError
*
error
)
{
if
(
weakSelf
.
isCancelled
||
!
checkout
)
{
[
weakSelf
cancel
];
return
;
}
}];
[
self
locked
:
^
{
_operations
=
@[
beginOperation
,
pollingOperation
,
getOperation
];
}];
[
self
.
client
.
requestQueue
addOperations
:
self
.
operations
waitUntilFinished
:
NO
];
}
-
(
void
)
cancelExecution
{
[
super
cancelExecution
];
for
(
NSOperation
*
operation
in
self
.
operations
)
{
[
operation
cancel
];
}
}
@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