From fc3ff9c58e7b34c31b38cf643b950c4b0cbccdd0 Mon Sep 17 00:00:00 2001 From: Karl Krukow Date: Sat, 20 Jul 2013 21:44:08 +0200 Subject: [PATCH 1/2] added engines to version command --- lib/Shelley | 2 +- src/SelectorEngineRegistry.h | 1 + src/SelectorEngineRegistry.m | 4 ++++ src/VersionCommand.m | 20 +++++++++++++++++++- 4 files changed, 25 insertions(+), 2 deletions(-) diff --git a/lib/Shelley b/lib/Shelley index fa1b642..2fd9c59 160000 --- a/lib/Shelley +++ b/lib/Shelley @@ -1 +1 @@ -Subproject commit fa1b64247f41ec81acb623a44279c814f88eb72c +Subproject commit 2fd9c5978893b593b03a2d65dceed0f7c7628f97 diff --git a/src/SelectorEngineRegistry.h b/src/SelectorEngineRegistry.h index c1118e5..2f55657 100644 --- a/src/SelectorEngineRegistry.h +++ b/src/SelectorEngineRegistry.h @@ -21,4 +21,5 @@ + (NSArray *) selectViewsWithEngineNamed:(NSString *)engineName usingSelector:(NSString *)selector; + (NSArray *)getEngineNames; ++ (id)engineForName:(NSString *)engineName; @end diff --git a/src/SelectorEngineRegistry.m b/src/SelectorEngineRegistry.m index f0abc7b..21e9a24 100644 --- a/src/SelectorEngineRegistry.m +++ b/src/SelectorEngineRegistry.m @@ -32,4 +32,8 @@ + (NSArray *) selectViewsWithEngineNamed:(NSString *)engineName usingSelector:(N + (NSArray *)getEngineNames { return [s_engines allKeys]; } + ++ (id)engineForName:(NSString *)engineName { + return [s_engines objectForKey:engineName]; +} @end diff --git a/src/VersionCommand.m b/src/VersionCommand.m index e9b564f..e876f05 100644 --- a/src/VersionCommand.m +++ b/src/VersionCommand.m @@ -7,6 +7,8 @@ // #import "VersionCommand.h" +#import "SelectorEngineRegistry.h" +#import "JSON.h" @implementation VersionCommand { NSString *_version; @@ -28,7 +30,23 @@ - (void)dealloc } - (NSString *)handleCommandWithRequestBody:(NSString *)requestBody { - return [NSString stringWithFormat:@"{\"version\":\"%@\"}",_version]; + NSMutableDictionary *engineVersions = [[NSMutableDictionary alloc] init]; + for (NSString *engineName in [SelectorEngineRegistry getEngineNames]) { + id engine = [SelectorEngineRegistry engineForName:engineName]; + SEL versionSel = @selector(version); + if ([engine respondsToSelector:versionSel]) { + NSDictionary *engineVersionData = [engine performSelector:versionSel]; + [engineVersions setObject:engineVersionData forKey:engineName]; + } + else { + [engineVersions setObject:[NSNull null] forKey:engineName]; + } + } + NSDictionary *versionResult = [NSDictionary dictionaryWithObjectsAndKeys: + _version, @"version", + engineVersions, @"engines", + nil]; + return TO_JSON(versionResult); } @end \ No newline at end of file From a94da206621a91eba1369529a192c4f0381a092f Mon Sep 17 00:00:00 2001 From: Karl Krukow Date: Sat, 20 Jul 2013 21:56:28 +0200 Subject: [PATCH 2/2] fix accidental leak --- src/VersionCommand.m | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/VersionCommand.m b/src/VersionCommand.m index e876f05..4e315f7 100644 --- a/src/VersionCommand.m +++ b/src/VersionCommand.m @@ -30,7 +30,7 @@ - (void)dealloc } - (NSString *)handleCommandWithRequestBody:(NSString *)requestBody { - NSMutableDictionary *engineVersions = [[NSMutableDictionary alloc] init]; + NSMutableDictionary *engineVersions = [NSMutableDictionary dictionary]; for (NSString *engineName in [SelectorEngineRegistry getEngineNames]) { id engine = [SelectorEngineRegistry engineForName:engineName]; SEL versionSel = @selector(version);