Skip to content

Commit

Permalink
Fix #113: decoding stats properties should not return nil
Browse files Browse the repository at this point in the history
  • Loading branch information
ricardopereira authored and tcard committed Jan 4, 2016
1 parent dfe7ffb commit 9b44334
Show file tree
Hide file tree
Showing 3 changed files with 46 additions and 9 deletions.
19 changes: 10 additions & 9 deletions ably-ios/ARTJsonEncoder.m
Original file line number Diff line number Diff line change
Expand Up @@ -482,6 +482,7 @@ - (ARTStats *)statsFromDictionary:(NSDictionary *)input {
if (![input isKindOfClass:[NSDictionary class]]) {
return nil;
}

ARTStatsMessageTypes *all = [self statsMessageTypesFromDictionary:[input objectForKey:@"all"]];
ARTStatsMessageTraffic *inbound = [self statsMessageTrafficFromDictionary:[input objectForKey:@"inbound"]];
ARTStatsMessageTraffic *outbound = [self statsMessageTrafficFromDictionary:[input objectForKey:@"outbound"]];
Expand All @@ -505,7 +506,7 @@ - (ARTStats *)statsFromDictionary:(NSDictionary *)input {

- (ARTStatsMessageTypes *)statsMessageTypesFromDictionary:(NSDictionary *)input {
if (![input isKindOfClass:[NSDictionary class]]) {
return nil;
return [ARTStatsMessageTypes empty];
}

ARTStatsMessageCount *all = [self statsMessageCountFromDictionary:[input objectForKey:@"all"]];
Expand All @@ -516,12 +517,12 @@ - (ARTStatsMessageTypes *)statsMessageTypesFromDictionary:(NSDictionary *)input
return [[ARTStatsMessageTypes alloc] initWithAll:all messages:messages presence:presence];
}

return nil;
return [ARTStatsMessageTypes empty];
}

- (ARTStatsMessageCount *)statsMessageCountFromDictionary:(NSDictionary *)input {
if (![input isKindOfClass:[NSDictionary class]]) {
return nil;
return [ARTStatsMessageCount empty];
}

NSNumber *count = [input artTyped:[NSNumber class] key:@"count"];
Expand All @@ -532,7 +533,7 @@ - (ARTStatsMessageCount *)statsMessageCountFromDictionary:(NSDictionary *)input

- (ARTStatsMessageTraffic *)statsMessageTrafficFromDictionary:(NSDictionary *)input {
if (![input isKindOfClass:[NSDictionary class]]) {
return nil;
return [ARTStatsMessageTraffic empty];
}

ARTStatsMessageTypes *all = [self statsMessageTypesFromDictionary:[input objectForKey:@"all"]];
Expand All @@ -545,12 +546,12 @@ - (ARTStatsMessageTraffic *)statsMessageTrafficFromDictionary:(NSDictionary *)in
return [[ARTStatsMessageTraffic alloc] initWithAll:all realtime:realtime rest:rest push:push httpStream:httpStream];
}

return nil;
return [ARTStatsMessageTraffic empty];
}

- (ARTStatsConnectionTypes *)statsConnectionTypesFromDictionary:(NSDictionary *)input {
if (![input isKindOfClass:[NSDictionary class]]) {
return nil;
return [ARTStatsConnectionTypes empty];
}

ARTStatsResourceCount *all = [self statsResourceCountFromDictionary:[input objectForKey:@"all"]];
Expand All @@ -561,12 +562,12 @@ - (ARTStatsConnectionTypes *)statsConnectionTypesFromDictionary:(NSDictionary *)
return [[ARTStatsConnectionTypes alloc] initWithAll:all plain:plain tls:tls];
}

return nil;
return [ARTStatsConnectionTypes empty];
}

- (ARTStatsResourceCount *)statsResourceCountFromDictionary:(NSDictionary *)input {
if (![input isKindOfClass:[NSDictionary class]]) {
return nil;
return [ARTStatsResourceCount empty];
}

NSNumber *opened = [input artTyped:[NSNumber class] key:@"opened"];
Expand Down Expand Up @@ -595,7 +596,7 @@ - (NSError *)decodeError:(NSData *)error {
- (ARTStatsRequestCount *)statsRequestCountFromDictionary:(NSDictionary *)input {
[self.logger verbose:@"ARTJsonEncoder: statsRequestCountFromDictionary %@", input];
if (![input isKindOfClass:[NSDictionary class]]) {
return nil;
return [ARTStatsRequestCount empty];
}

NSNumber *succeeded = [input artTyped:[NSNumber class] key:@"succeeded"];
Expand Down
12 changes: 12 additions & 0 deletions ably-ios/ARTStats.h
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,8 @@ ART_ASSUME_NONNULL_BEGIN
- (instancetype)init UNAVAILABLE_ATTRIBUTE;
- (instancetype)initWithCount:(double)count data:(double)data;

+ (instancetype)empty;

@end

@interface ARTStatsMessageTypes : NSObject
Expand All @@ -43,6 +45,8 @@ ART_ASSUME_NONNULL_BEGIN
- (instancetype)init UNAVAILABLE_ATTRIBUTE;
- (instancetype)initWithAll:(ARTStatsMessageCount *)all messages:(ARTStatsMessageCount *)messages presence:(ARTStatsMessageCount *)presence;

+ (instancetype)empty;

@end

@interface ARTStatsMessageTraffic : NSObject
Expand All @@ -56,6 +60,8 @@ ART_ASSUME_NONNULL_BEGIN
- (instancetype)init UNAVAILABLE_ATTRIBUTE;
- (instancetype)initWithAll:(ARTStatsMessageTypes *)all realtime:(ARTStatsMessageTypes *)realtime rest:(ARTStatsMessageTypes *)rest push:(ARTStatsMessageTypes *)push httpStream:(ARTStatsMessageTypes *)httpStream;

+ (instancetype)empty;

@end

@interface ARTStatsResourceCount : NSObject
Expand All @@ -69,6 +75,8 @@ ART_ASSUME_NONNULL_BEGIN
- (instancetype)init UNAVAILABLE_ATTRIBUTE;
- (instancetype)initWithOpened:(double)opened peak:(double)peak mean:(double)mean min:(double)min refused:(double)refused;

+ (instancetype)empty;

@end

@interface ARTStatsConnectionTypes : NSObject
Expand All @@ -80,6 +88,8 @@ ART_ASSUME_NONNULL_BEGIN
- (instancetype)init UNAVAILABLE_ATTRIBUTE;
- (instancetype)initWithAll:(ARTStatsResourceCount *)all plain:(ARTStatsResourceCount *)plain tls:(ARTStatsResourceCount *)tls;

+ (instancetype)empty;

@end

@interface ARTStatsRequestCount : NSObject
Expand All @@ -91,6 +101,8 @@ ART_ASSUME_NONNULL_BEGIN
- (instancetype)init UNAVAILABLE_ATTRIBUTE;
- (instancetype)initWithSucceeded:(double)succeeded failed:(double)failed refused:(double)refused;

+ (instancetype)empty;

@end

@interface ARTStats : NSObject
Expand Down
24 changes: 24 additions & 0 deletions ably-ios/ARTStats.m
Original file line number Diff line number Diff line change
Expand Up @@ -52,6 +52,10 @@ - (instancetype)initWithCount:(double)count data:(double)data {
return self;
}

+ (instancetype)empty {
return [[ARTStatsMessageCount alloc] initWithCount:0 data:0];
}

@end

@implementation ARTStatsMessageTypes
Expand All @@ -66,6 +70,10 @@ - (instancetype)initWithAll:(ARTStatsMessageCount *)all messages:(ARTStatsMessag
return self;
}

+ (instancetype)empty {
return [[ARTStatsMessageTypes alloc] initWithAll:[ARTStatsMessageCount empty] messages:[ARTStatsMessageCount empty] presence:[ARTStatsMessageCount empty]];
}

@end

@implementation ARTStatsMessageTraffic
Expand All @@ -82,6 +90,10 @@ - (instancetype)initWithAll:(ARTStatsMessageTypes *)all realtime:(ARTStatsMessag
return self;
}

+ (instancetype)empty {
return [[ARTStatsMessageTraffic alloc] initWithAll:[ARTStatsMessageTypes empty] realtime:[ARTStatsMessageTypes empty] rest:[ARTStatsMessageTypes empty] push:[ARTStatsMessageTypes empty] httpStream:[ARTStatsMessageTypes empty]];
}

@end

@implementation ARTStatsResourceCount
Expand All @@ -98,6 +110,10 @@ - (instancetype)initWithOpened:(double)opened peak:(double)peak mean:(double)mea
return self;
}

+ (instancetype)empty {
return [[ARTStatsResourceCount alloc] initWithOpened:0 peak:0 mean:0 min:0 refused:0];
}

@end

@implementation ARTStatsConnectionTypes
Expand All @@ -112,6 +128,10 @@ - (instancetype)initWithAll:(ARTStatsResourceCount *)all plain:(ARTStatsResource
return self;
}

+ (instancetype)empty {
return [[ARTStatsConnectionTypes alloc] initWithAll:[ARTStatsResourceCount empty] plain:[ARTStatsResourceCount empty] tls:[ARTStatsResourceCount empty]];
}

@end

@implementation ARTStatsRequestCount
Expand All @@ -126,6 +146,10 @@ - (instancetype)initWithSucceeded:(double)succeeded failed:(double)failed refuse
return self;
}

+ (instancetype)empty {
return [[ARTStatsRequestCount alloc] initWithSucceeded:0 failed:0 refused:0];
}

@end

@implementation ARTStats
Expand Down

0 comments on commit 9b44334

Please sign in to comment.