This PR contains all the work related to setting up this project as required to implement the [Assignment](https://repo.rock-n-code.com/rock-n-code/deep-linking-assignment/wiki/Assignment) on top, as intended. To summarise this work: - [x] created a new **Xcode** project; - [x] cloned the `Wikipedia` app and inserted it into the **Xcode** project; - [x] created the `Locations` app and also, its `Libraries` package; - [x] created the `Shared` package to share dependencies between the apps; - [x] added a `Makefile` file and implemented some **environment** and **help** commands. Co-authored-by: Javier Cicchelli <javier@rock-n-code.com> Reviewed-on: rock-n-code/deep-linking-assignment#1
115 lines
4.1 KiB
Objective-C
115 lines
4.1 KiB
Objective-C
#import "LSHTTPRequestDiff.h"
|
|
|
|
@interface LSHTTPRequestDiff ()
|
|
@property (nonatomic, strong) id<LSHTTPRequest>oneRequest;
|
|
@property (nonatomic, strong) id<LSHTTPRequest>anotherRequest;
|
|
|
|
- (BOOL)isMethodDifferent;
|
|
- (BOOL)isUrlDifferent;
|
|
- (BOOL)areHeadersDifferent;
|
|
- (BOOL)isBodyDifferent;
|
|
|
|
- (void)appendMethodDiff:(NSMutableString *)diff;
|
|
- (void)appendUrlDiff:(NSMutableString *)diff;
|
|
- (void)appendHeadersDiff:(NSMutableString *)diff;
|
|
- (void)appendBodyDiff:(NSMutableString *)diff;
|
|
@end
|
|
|
|
@implementation LSHTTPRequestDiff
|
|
- (id)initWithRequest:(id<LSHTTPRequest>)oneRequest andRequest:(id<LSHTTPRequest>)anotherRequest {
|
|
self = [super init];
|
|
if (self) {
|
|
_oneRequest = oneRequest;
|
|
_anotherRequest = anotherRequest;
|
|
}
|
|
return self;
|
|
}
|
|
|
|
- (BOOL)isEmpty {
|
|
if ([self isMethodDifferent] ||
|
|
[self isUrlDifferent] ||
|
|
[self areHeadersDifferent] ||
|
|
[self isBodyDifferent]) {
|
|
return NO;
|
|
}
|
|
return YES;
|
|
}
|
|
|
|
- (NSString *)description {
|
|
NSMutableString *diff = [@"" mutableCopy];
|
|
if ([self isMethodDifferent]) {
|
|
[self appendMethodDiff:diff];
|
|
}
|
|
if ([self isUrlDifferent]) {
|
|
[self appendUrlDiff:diff];
|
|
}
|
|
if([self areHeadersDifferent]) {
|
|
[self appendHeadersDiff:diff];
|
|
}
|
|
if([self isBodyDifferent]) {
|
|
[self appendBodyDiff:diff];
|
|
}
|
|
return [NSString stringWithString:diff];
|
|
}
|
|
|
|
#pragma mark - Private Methods
|
|
- (BOOL)isMethodDifferent {
|
|
return ![self.oneRequest.method isEqualToString:self.anotherRequest.method];
|
|
}
|
|
|
|
- (BOOL)isUrlDifferent {
|
|
return ![self.oneRequest.url isEqual:self.anotherRequest.url];
|
|
}
|
|
|
|
- (BOOL)areHeadersDifferent {
|
|
return ![self.oneRequest.headers isEqual:self.anotherRequest.headers];
|
|
}
|
|
|
|
- (BOOL)isBodyDifferent {
|
|
return (((self.oneRequest.body) && (![self.oneRequest.body isEqual:self.anotherRequest.body])) ||
|
|
((self.anotherRequest.body) && (![self.anotherRequest.body isEqual:self.oneRequest.body])));
|
|
}
|
|
|
|
- (void)appendMethodDiff:(NSMutableString *)diff {
|
|
[diff appendFormat:@"- Method: %@\n+ Method: %@\n", self.oneRequest.method, self.anotherRequest.method];
|
|
}
|
|
|
|
- (void)appendUrlDiff:(NSMutableString *)diff {
|
|
[diff appendFormat:@"- URL: %@\n+ URL: %@\n", [self.oneRequest.url absoluteString], [self.anotherRequest.url absoluteString]];
|
|
}
|
|
|
|
- (void)appendHeadersDiff:(NSMutableString *)diff {
|
|
[diff appendString:@" Headers:\n"];
|
|
NSSet *headersInOneButNotInTheOther = [self.oneRequest.headers keysOfEntriesPassingTest:^BOOL(id key, id obj, BOOL *stop) {
|
|
return ![self.anotherRequest.headers objectForKey:key] || ![obj isEqual:[self.anotherRequest.headers objectForKey:key]];
|
|
}];
|
|
NSSet *headersInTheOtherButNotInOne = [self.anotherRequest.headers keysOfEntriesPassingTest:^BOOL(id key, id obj, BOOL *stop) {
|
|
return ![self.oneRequest.headers objectForKey:key] || ![obj isEqual:[self.oneRequest.headers objectForKey:key]];
|
|
}];
|
|
|
|
NSArray *descriptors = @[[NSSortDescriptor sortDescriptorWithKey:@"" ascending:YES]];
|
|
NSArray * sortedHeadersInOneButNotInTheOther = [headersInOneButNotInTheOther sortedArrayUsingDescriptors:descriptors];
|
|
NSArray * sortedHeadersInTheOtherButNotInOne = [headersInTheOtherButNotInOne sortedArrayUsingDescriptors:descriptors];
|
|
for (NSString *header in sortedHeadersInOneButNotInTheOther) {
|
|
NSString *value = [self.oneRequest.headers objectForKey:header];
|
|
[diff appendFormat:@"-\t\"%@\": \"%@\"\n", header, value];
|
|
|
|
}
|
|
for (NSString *header in sortedHeadersInTheOtherButNotInOne) {
|
|
NSString *value = [self.anotherRequest.headers objectForKey:header];
|
|
[diff appendFormat:@"+\t\"%@\": \"%@\"\n", header, value];
|
|
}
|
|
}
|
|
|
|
- (void)appendBodyDiff:(NSMutableString *)diff {
|
|
NSString *oneBody = [[NSString alloc] initWithData:self.oneRequest.body encoding:NSUTF8StringEncoding];
|
|
if (oneBody.length) {
|
|
[diff appendFormat:@"- Body: \"%@\"\n", oneBody];
|
|
}
|
|
NSString *anotherBody = [[NSString alloc] initWithData:self.anotherRequest.body encoding:NSUTF8StringEncoding];
|
|
if (anotherBody.length) {
|
|
[diff appendFormat:@"+ Body: \"%@\"\n", anotherBody];
|
|
}
|
|
}
|
|
@end
|