stripe-ios/Stripe/STPToken.m

93 lines
2.5 KiB
Objective-C

//
// STPToken.m
// Stripe
//
// Created by Saikat Chakrabarti on 11/5/12.
//
//
#import "STPToken.h"
#import "STPCard.h"
#import "STPBankAccount.h"
#import "NSDictionary+Stripe.h"
@interface STPToken()
@property (nonatomic, nonnull) NSString *tokenId;
@property (nonatomic) BOOL livemode;
@property (nonatomic, nullable) STPCard *card;
@property (nonatomic, nullable) STPBankAccount *bankAccount;
@property (nonatomic, nullable) NSDate *created;
@end
@implementation STPToken
- (NSString *)description {
return self.tokenId ?: @"Unknown token";
}
- (NSString *)debugDescription {
NSString *token = self.tokenId ?: @"Unknown token";
NSString *livemode = self.livemode ? @"live mode" : @"test mode";
return [NSString stringWithFormat:@"%@ (%@)", token, livemode];
}
- (BOOL)isEqual:(id)object {
return [self isEqualToToken:object];
}
- (NSUInteger)hash {
return [self.tokenId hash];
}
- (BOOL)isEqualToToken:(STPToken *)object {
if (self == object) {
return YES;
}
if (!object || ![object isKindOfClass:self.class]) {
return NO;
}
if ((self.card || object.card) && (![self.card isEqual:object.card])) {
return NO;
}
if ((self.bankAccount || object.bankAccount) && (![self.bankAccount isEqual:object.bankAccount])) {
return NO;
}
return self.livemode == object.livemode && [self.tokenId isEqualToString:object.tokenId] && [self.created isEqualToDate:object.created] &&
[self.card isEqual:object.card] && [self.tokenId isEqualToString:object.tokenId] && [self.created isEqualToDate:object.created];
}
#pragma mark STPAPIResponseDecodable
+ (NSArray *)requiredFields {
return @[@"id", @"livemode", @"created"];
}
+ (instancetype)decodedObjectFromAPIResponse:(NSDictionary *)response {
NSDictionary *dict = [response stp_dictionaryByRemovingNullsValidatingRequiredFields:[self requiredFields]];
if (!dict) {
return nil;
}
STPToken *token = [self new];
token.tokenId = dict[@"id"];
token.livemode = [dict[@"livemode"] boolValue];
token.created = [NSDate dateWithTimeIntervalSince1970:[dict[@"created"] doubleValue]];
NSDictionary *cardDictionary = dict[@"card"];
if (cardDictionary) {
token.card = [STPCard decodedObjectFromAPIResponse:cardDictionary];
}
NSDictionary *bankAccountDictionary = dict[@"bank_account"];
if (bankAccountDictionary) {
token.bankAccount = [STPBankAccount decodedObjectFromAPIResponse:bankAccountDictionary];
}
return token;
}
@end