Commit 8ba3ccc7 by Dima Bart

Add nullability annotations and missing asserts.

parent 4c5d7c92
...@@ -78,9 +78,9 @@ typedef NS_ENUM(NSUInteger, BUYCollectionSort) { ...@@ -78,9 +78,9 @@ typedef NS_ENUM(NSUInteger, BUYCollectionSort) {
BUYCollectionSortCreatedDescending BUYCollectionSortCreatedDescending
}; };
extern NSString * const BUYVersionString; extern NSString * _Nonnull const BUYVersionString;
extern NSString * const BUYClientCustomerAccessToken; extern NSString * _Nonnull const BUYClientCustomerAccessToken;
/** /**
* A BUYStatus is associated with the completion of an enqueued job on Shopify. * A BUYStatus is associated with the completion of an enqueued job on Shopify.
...@@ -120,7 +120,7 @@ typedef NS_ENUM(NSUInteger, BUYStatus) { ...@@ -120,7 +120,7 @@ typedef NS_ENUM(NSUInteger, BUYStatus) {
* @param paymentToken An opaque payment token type that wraps necessary credentials for payment * @param paymentToken An opaque payment token type that wraps necessary credentials for payment
* @param error Optional NSError * @param error Optional NSError
*/ */
typedef void (^BUYDataCreditCardBlock)(BUYCheckout *checkout, id<BUYPaymentToken> paymentToken, NSError *error); typedef void (^BUYDataCreditCardBlock)(BUYCheckout * _Nullable checkout, id<BUYPaymentToken> _Nullable paymentToken, NSError * _Nullable error);
/** /**
* Return block containing a BUYCheckout and/or an NSError * Return block containing a BUYCheckout and/or an NSError
...@@ -128,7 +128,7 @@ typedef void (^BUYDataCreditCardBlock)(BUYCheckout *checkout, id<BUYPaymentToken ...@@ -128,7 +128,7 @@ typedef void (^BUYDataCreditCardBlock)(BUYCheckout *checkout, id<BUYPaymentToken
* @param checkout The returned BUYCheckout * @param checkout The returned BUYCheckout
* @param error Optional NSError * @param error Optional NSError
*/ */
typedef void (^BUYDataCheckoutBlock)(BUYCheckout *checkout, NSError *error); typedef void (^BUYDataCheckoutBlock)(BUYCheckout * _Nullable checkout, NSError * _Nullable error);
/** /**
* Return block containing a BUYCheckout, a BUYStatus and/or an NSError * Return block containing a BUYCheckout, a BUYStatus and/or an NSError
...@@ -136,7 +136,7 @@ typedef void (^BUYDataCheckoutBlock)(BUYCheckout *checkout, NSError *error); ...@@ -136,7 +136,7 @@ typedef void (^BUYDataCheckoutBlock)(BUYCheckout *checkout, NSError *error);
* @param status A BUYStatus specifying the requested job's completion status * @param status A BUYStatus specifying the requested job's completion status
* @param error Optional NSError * @param error Optional NSError
*/ */
typedef void (^BUYDataCheckoutStatusBlock)(BUYStatus status, NSError *error); typedef void (^BUYDataCheckoutStatusBlock)(BUYStatus status, NSError * _Nullable error);
/** /**
* Return block containing BUYShippingRate objects, a BUYStatus and/or an NSError * Return block containing BUYShippingRate objects, a BUYStatus and/or an NSError
...@@ -145,7 +145,7 @@ typedef void (^BUYDataCheckoutStatusBlock)(BUYStatus status, NSError *error); ...@@ -145,7 +145,7 @@ typedef void (^BUYDataCheckoutStatusBlock)(BUYStatus status, NSError *error);
* @param status A BUYStatus specifying the requested job's completion status * @param status A BUYStatus specifying the requested job's completion status
* @param error Optional NSError * @param error Optional NSError
*/ */
typedef void (^BUYDataShippingRatesBlock)(NSArray *shippingRates, BUYStatus status, NSError *error); typedef void (^BUYDataShippingRatesBlock)(NSArray * _Nullable shippingRates, BUYStatus status, NSError * _Nullable error);
/** /**
* Return block containing a BUYShop and/or an NSError * Return block containing a BUYShop and/or an NSError
...@@ -153,7 +153,7 @@ typedef void (^BUYDataShippingRatesBlock)(NSArray *shippingRates, BUYStatus stat ...@@ -153,7 +153,7 @@ typedef void (^BUYDataShippingRatesBlock)(NSArray *shippingRates, BUYStatus stat
* @param shop A BUYShop object * @param shop A BUYShop object
* @param error Optional NSError * @param error Optional NSError
*/ */
typedef void (^BUYDataShopBlock)(BUYShop *shop, NSError *error); typedef void (^BUYDataShopBlock)(BUYShop * _Nullable shop, NSError * _Nullable error);
/** /**
* Return block containing a list of BUYCollection objects and/or an NSError * Return block containing a list of BUYCollection objects and/or an NSError
...@@ -161,7 +161,7 @@ typedef void (^BUYDataShopBlock)(BUYShop *shop, NSError *error); ...@@ -161,7 +161,7 @@ typedef void (^BUYDataShopBlock)(BUYShop *shop, NSError *error);
* @param collections An array of BUYCollection objects * @param collections An array of BUYCollection objects
* @param error Optional NSError * @param error Optional NSError
*/ */
typedef void (^BUYDataCollectionsBlock)(NSArray<BUYCollection *> *collections, NSError *error); typedef void (^BUYDataCollectionsBlock)(NSArray<BUYCollection *> * _Nullable collections, NSError * _Nullable error);
/** /**
* Return block containing a BUYProduct and/or an NSError * Return block containing a BUYProduct and/or an NSError
...@@ -169,7 +169,7 @@ typedef void (^BUYDataCollectionsBlock)(NSArray<BUYCollection *> *collections, N ...@@ -169,7 +169,7 @@ typedef void (^BUYDataCollectionsBlock)(NSArray<BUYCollection *> *collections, N
* @param product A BUYProduct * @param product A BUYProduct
* @param error Optional NSError * @param error Optional NSError
*/ */
typedef void (^BUYDataProductBlock)(BUYProduct *product, NSError *error); typedef void (^BUYDataProductBlock)(BUYProduct * _Nullable product, NSError * _Nullable error);
/** /**
* Return block containing a list of BUYProduct objects and/or an NSError * Return block containing a list of BUYProduct objects and/or an NSError
...@@ -177,7 +177,7 @@ typedef void (^BUYDataProductBlock)(BUYProduct *product, NSError *error); ...@@ -177,7 +177,7 @@ typedef void (^BUYDataProductBlock)(BUYProduct *product, NSError *error);
* @param products An array of BUYProduct objects * @param products An array of BUYProduct objects
* @param error Optional NSError * @param error Optional NSError
*/ */
typedef void (^BUYDataProductsBlock)(NSArray<BUYProduct *> *products, NSError *error); typedef void (^BUYDataProductsBlock)(NSArray<BUYProduct *> * _Nullable products, NSError * _Nullable error);
/** /**
* Return block containing list of collections * Return block containing list of collections
...@@ -185,7 +185,7 @@ typedef void (^BUYDataProductsBlock)(NSArray<BUYProduct *> *products, NSError *e ...@@ -185,7 +185,7 @@ typedef void (^BUYDataProductsBlock)(NSArray<BUYProduct *> *products, NSError *e
* @param collections An array of BUYCollection objects * @param collections An array of BUYCollection objects
* @param error Optional NSError * @param error Optional NSError
*/ */
typedef void (^BUYDataCollectionsListBlock)(NSArray<BUYCollection *> *collections, NSUInteger page, BOOL reachedEnd, NSError *error); typedef void (^BUYDataCollectionsListBlock)(NSArray<BUYCollection *> * _Nullable collections, NSUInteger page, BOOL reachedEnd, NSError * _Nullable error);
/** /**
* Return block containing a list of BUYProduct objects, the page requested, a boolean to determine whether the end of the list has been reach and/or an optional NSError * Return block containing a list of BUYProduct objects, the page requested, a boolean to determine whether the end of the list has been reach and/or an optional NSError
...@@ -195,7 +195,7 @@ typedef void (^BUYDataCollectionsListBlock)(NSArray<BUYCollection *> *collection ...@@ -195,7 +195,7 @@ typedef void (^BUYDataCollectionsListBlock)(NSArray<BUYCollection *> *collection
* @param reachedEnd Boolean indicating whether additional pages exist * @param reachedEnd Boolean indicating whether additional pages exist
* @param error An optional NSError * @param error An optional NSError
*/ */
typedef void (^BUYDataProductListBlock)(NSArray<BUYProduct *> *products, NSUInteger page, BOOL reachedEnd, NSError *error); typedef void (^BUYDataProductListBlock)(NSArray<BUYProduct *> * _Nullable products, NSUInteger page, BOOL reachedEnd, NSError * _Nullable error);
/** /**
* Return block containing a list of BUYProductImage objects and/or an NSError * Return block containing a list of BUYProductImage objects and/or an NSError
...@@ -203,7 +203,7 @@ typedef void (^BUYDataProductListBlock)(NSArray<BUYProduct *> *products, NSUInte ...@@ -203,7 +203,7 @@ typedef void (^BUYDataProductListBlock)(NSArray<BUYProduct *> *products, NSUInte
* @param images An array of BUYProductImage objects * @param images An array of BUYProductImage objects
* @param error An optional NSError * @param error An optional NSError
*/ */
typedef void (^BUYDataImagesListBlock)(NSArray *images, NSError *error); typedef void (^BUYDataImagesListBlock)(NSArray * _Nullable images, NSError * _Nullable error);
/** /**
* Return block containing a BUYGiftCard * Return block containing a BUYGiftCard
...@@ -211,7 +211,7 @@ typedef void (^BUYDataImagesListBlock)(NSArray *images, NSError *error); ...@@ -211,7 +211,7 @@ typedef void (^BUYDataImagesListBlock)(NSArray *images, NSError *error);
* @param giftCard A BUYGiftCard * @param giftCard A BUYGiftCard
* @param error An optional NSError * @param error An optional NSError
*/ */
typedef void (^BUYDataGiftCardBlock)(BUYGiftCard *giftCard, NSError *error); typedef void (^BUYDataGiftCardBlock)(BUYGiftCard * _Nullable giftCard, NSError * _Nullable error);
/** /**
The BUYDataClient provides all requests needed to perform request on the Shopify Checkout API. The BUYDataClient provides all requests needed to perform request on the Shopify Checkout API.
...@@ -219,6 +219,7 @@ typedef void (^BUYDataGiftCardBlock)(BUYGiftCard *giftCard, NSError *error); ...@@ -219,6 +219,7 @@ typedef void (^BUYDataGiftCardBlock)(BUYGiftCard *giftCard, NSError *error);
and completing Checkouts. and completing Checkouts.
*/ */
@interface BUYClient : NSObject @interface BUYClient : NSObject
NS_ASSUME_NONNULL_BEGIN
- (instancetype)init NS_UNAVAILABLE; - (instancetype)init NS_UNAVAILABLE;
...@@ -236,13 +237,13 @@ typedef void (^BUYDataGiftCardBlock)(BUYGiftCard *giftCard, NSError *error); ...@@ -236,13 +237,13 @@ typedef void (^BUYDataGiftCardBlock)(BUYGiftCard *giftCard, NSError *error);
/** /**
* *
*/ */
@property (nonatomic, strong) BUYModelManager *modelManager; @property (nonatomic, strong, nonnull) BUYModelManager *modelManager;
/** /**
* Queue where callbacks will be called * Queue where callbacks will be called
* defaults to main queue * defaults to main queue
*/ */
@property (nonatomic, strong) dispatch_queue_t queue; @property (nonatomic, strong, nonnull) dispatch_queue_t queue;
/** /**
* The page size for any paged request. This can range from 1-250. Default is 25 * The page size for any paged request. This can range from 1-250. Default is 25
...@@ -252,39 +253,39 @@ typedef void (^BUYDataGiftCardBlock)(BUYGiftCard *giftCard, NSError *error); ...@@ -252,39 +253,39 @@ typedef void (^BUYDataGiftCardBlock)(BUYGiftCard *giftCard, NSError *error);
/** /**
* The shop domain set using the initializer * The shop domain set using the initializer
*/ */
@property (nonatomic, strong, readonly) NSString *shopDomain; @property (nonatomic, strong, readonly, nonnull) NSString *shopDomain;
/** /**
* The API Key set using the initializer * The API Key set using the initializer
*/ */
@property (nonatomic, strong, readonly) NSString *apiKey; @property (nonatomic, strong, readonly, nonnull) NSString *apiKey;
/** /**
* The Channel ID set using the initializer * The Channel ID set using the initializer
*/ */
@property (nonatomic, strong, readonly) NSString *appId; @property (nonatomic, strong, readonly, nonnull) NSString *appId;
/** /**
* The Merchant ID is used for Apple Pay and set using `enableApplePayWithMerchantId:` * The Merchant ID is used for Apple Pay and set using `enableApplePayWithMerchantId:`
*/ */
@property (nonatomic, strong, readonly) NSString *merchantId NS_DEPRECATED_IOS(8_0, 9_0, "Set the `merchantId` on a BUYViewController subclass instead"); @property (nonatomic, strong, readonly, nullable) NSString *merchantId NS_DEPRECATED_IOS(8_0, 9_0, "Set the `merchantId` on a BUYViewController subclass instead");
/** /**
* Application name to attribute orders to. Defaults to app bundle name (CFBundleName) * Application name to attribute orders to. Defaults to app bundle name (CFBundleName)
*/ */
@property (nonatomic, strong) NSString *applicationName; @property (nonatomic, strong, nonnull) NSString *applicationName;
/** /**
* The applications URLScheme, used to return to the application after a complete web checkout. Ex. @"storeApp://" * The applications URLScheme, used to return to the application after a complete web checkout. Ex. @"storeApp://"
*/ */
@property (nonatomic, strong) NSString *urlScheme; @property (nonatomic, strong, nullable) NSString *urlScheme;
/** /**
* Allows the client to hold onto the customer token * Allows the client to hold onto the customer token
* *
* @param token The token received from the create and login callbacks * @param token The token received from the create and login callbacks
*/ */
@property (strong, nonatomic) NSString *customerToken; @property (strong, nonatomic, nullable) NSString *customerToken;
#pragma mark - Storefront #pragma mark - Storefront
...@@ -452,12 +453,12 @@ typedef void (^BUYDataGiftCardBlock)(BUYGiftCard *giftCard, NSError *error); ...@@ -452,12 +453,12 @@ typedef void (^BUYDataGiftCardBlock)(BUYGiftCard *giftCard, NSError *error);
* We recommended using the BUYCheckout returned in the block. * We recommended using the BUYCheckout returned in the block.
* *
* @param checkout The BUYCheckout to complete * @param checkout The BUYCheckout to complete
* @param paymentToken Opaque payment token object * @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); * @param block (^BUYDataCheckoutBlock)(BUYCheckout *checkout, NSError *error);
* *
* @return The associated NSURLSessionDataTask * @return The associated NSURLSessionDataTask
*/ */
- (NSURLSessionDataTask *)completeCheckout:(BUYCheckout *)checkout paymentToken:(id<BUYPaymentToken>)paymentToken completion:(BUYDataCheckoutBlock)block; - (NSURLSessionDataTask *)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. * Retrieve the status of a BUYCheckout. This checks the status of the current payment processing job for the provided checkout.
...@@ -534,4 +535,5 @@ typedef void (^BUYDataGiftCardBlock)(BUYGiftCard *giftCard, NSError *error); ...@@ -534,4 +535,5 @@ typedef void (^BUYDataGiftCardBlock)(BUYGiftCard *giftCard, NSError *error);
*/ */
- (void)enableApplePayWithMerchantId:(NSString *)merchantId NS_DEPRECATED_IOS(8_0, 9_0, "Set the merchantId on a `BUYViewController` subclass instead"); - (void)enableApplePayWithMerchantId:(NSString *)merchantId NS_DEPRECATED_IOS(8_0, 9_0, "Set the merchantId on a `BUYViewController` subclass instead");
NS_ASSUME_NONNULL_END
@end @end
...@@ -160,6 +160,8 @@ NSString *const BUYClientCustomerAccessToken = @"X-Shopify-Customer-Access-Token ...@@ -160,6 +160,8 @@ NSString *const BUYClientCustomerAccessToken = @"X-Shopify-Customer-Access-Token
- (NSURLSessionDataTask *)getProductById:(NSString *)productId completion:(BUYDataProductBlock)block; - (NSURLSessionDataTask *)getProductById:(NSString *)productId completion:(BUYDataProductBlock)block;
{ {
NSAssert(productId, @"Failed to get product by ID. Product ID must not be nil.");
return [self getProductsByIds:@[productId] completion:^(NSArray *products, NSError *error) { return [self getProductsByIds:@[productId] completion:^(NSArray *products, NSError *error) {
if (products.count > 0) { if (products.count > 0) {
block(products[0], error); block(products[0], error);
...@@ -174,6 +176,8 @@ NSString *const BUYClientCustomerAccessToken = @"X-Shopify-Customer-Access-Token ...@@ -174,6 +176,8 @@ NSString *const BUYClientCustomerAccessToken = @"X-Shopify-Customer-Access-Token
- (NSURLSessionDataTask *)getProductsByIds:(NSArray *)productIds completion:(BUYDataProductsBlock)block - (NSURLSessionDataTask *)getProductsByIds:(NSArray *)productIds completion:(BUYDataProductsBlock)block
{ {
NSAssert(productIds, @"Failed to get product by IDs. Product IDs array must not be nil.");
NSURLComponents *components = [self URLComponentsForChannelsAppendingPath:kBUYClientPathProductPublications NSURLComponents *components = [self URLComponentsForChannelsAppendingPath:kBUYClientPathProductPublications
queryItems:@{ queryItems:@{
@"product_ids" : [productIds componentsJoinedByString:@","] @"product_ids" : [productIds componentsJoinedByString:@","]
...@@ -320,6 +324,8 @@ NSString *const BUYClientCustomerAccessToken = @"X-Shopify-Customer-Access-Token ...@@ -320,6 +324,8 @@ NSString *const BUYClientCustomerAccessToken = @"X-Shopify-Customer-Access-Token
- (NSURLSessionDataTask *)createCheckout:(BUYCheckout *)checkout completion:(BUYDataCheckoutBlock)block - (NSURLSessionDataTask *)createCheckout:(BUYCheckout *)checkout completion:(BUYDataCheckoutBlock)block
{ {
NSAssert(checkout, @"Failed to create checkout. Invalid checkout object.");
// Inject channel and marketing attributions // Inject channel and marketing attributions
[self configureCheckout:checkout]; [self configureCheckout:checkout];
...@@ -329,6 +335,7 @@ NSString *const BUYClientCustomerAccessToken = @"X-Shopify-Customer-Access-Token ...@@ -329,6 +335,7 @@ NSString *const BUYClientCustomerAccessToken = @"X-Shopify-Customer-Access-Token
- (NSURLSessionDataTask *)createCheckoutWithCartToken:(NSString *)cartToken completion:(BUYDataCheckoutBlock)block - (NSURLSessionDataTask *)createCheckoutWithCartToken:(NSString *)cartToken completion:(BUYDataCheckoutBlock)block
{ {
NSAssert(cartToken, @"Failed to create checkout. Invalid cart token");
BUYCheckout *checkout = [self.modelManager checkoutwithCartToken:cartToken]; BUYCheckout *checkout = [self.modelManager checkoutwithCartToken:cartToken];
[self configureCheckout:checkout]; [self configureCheckout:checkout];
...@@ -350,6 +357,7 @@ NSString *const BUYClientCustomerAccessToken = @"X-Shopify-Customer-Access-Token ...@@ -350,6 +357,7 @@ NSString *const BUYClientCustomerAccessToken = @"X-Shopify-Customer-Access-Token
- (NSURLSessionDataTask *)applyGiftCardWithCode:(NSString *)giftCardCode toCheckout:(BUYCheckout *)checkout completion:(BUYDataCheckoutBlock)block - (NSURLSessionDataTask *)applyGiftCardWithCode:(NSString *)giftCardCode toCheckout:(BUYCheckout *)checkout completion:(BUYDataCheckoutBlock)block
{ {
BUYAssertCheckout(checkout);
NSAssert(giftCardCode.length > 0, @"Failed to apply gift card code. Invalid gift card code."); NSAssert(giftCardCode.length > 0, @"Failed to apply gift card code. Invalid gift card code.");
BUYGiftCard *giftCard = [self.modelManager giftCardWithCode:giftCardCode]; BUYGiftCard *giftCard = [self.modelManager giftCardWithCode:giftCardCode];
...@@ -367,6 +375,7 @@ NSString *const BUYClientCustomerAccessToken = @"X-Shopify-Customer-Access-Token ...@@ -367,6 +375,7 @@ NSString *const BUYClientCustomerAccessToken = @"X-Shopify-Customer-Access-Token
- (NSURLSessionDataTask *)removeGiftCard:(BUYGiftCard *)giftCard fromCheckout:(BUYCheckout *)checkout completion:(BUYDataCheckoutBlock)block - (NSURLSessionDataTask *)removeGiftCard:(BUYGiftCard *)giftCard fromCheckout:(BUYCheckout *)checkout completion:(BUYDataCheckoutBlock)block
{ {
BUYAssertCheckout(checkout);
NSAssert(giftCard.identifier, @"Failed to remove gift card. Gift card must have a valid identifier."); NSAssert(giftCard.identifier, @"Failed to remove gift card. Gift card must have a valid identifier.");
NSURLComponents *components = [self URLComponentsForCheckoutsAppendingPath:[NSString stringWithFormat:@"gift_cards/%@", giftCard.identifier] NSURLComponents *components = [self URLComponentsForCheckoutsAppendingPath:[NSString stringWithFormat:@"gift_cards/%@", giftCard.identifier]
...@@ -399,6 +408,7 @@ NSString *const BUYClientCustomerAccessToken = @"X-Shopify-Customer-Access-Token ...@@ -399,6 +408,7 @@ NSString *const BUYClientCustomerAccessToken = @"X-Shopify-Customer-Access-Token
- (NSURLSessionDataTask *)getCheckout:(BUYCheckout *)checkout completion:(BUYDataCheckoutBlock)block - (NSURLSessionDataTask *)getCheckout:(BUYCheckout *)checkout completion:(BUYDataCheckoutBlock)block
{ {
BUYAssertCheckout(checkout);
NSURLComponents *components = [self URLComponentsForCheckoutsAppendingPath:nil NSURLComponents *components = [self URLComponentsForCheckoutsAppendingPath:nil
checkoutToken:checkout.token checkoutToken:checkout.token
queryItems:nil]; queryItems:nil];
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment