diff --git a/.travis.yml b/.travis.yml index e7f9200..a53078a 100644 --- a/.travis.yml +++ b/.travis.yml @@ -3,9 +3,7 @@ branches: only: master before_install: - - gem install activesupport -N - - gem install slather --no-rdoc --no-ri --no-document --quiet - - gem i cocoapods --no-ri --no-rdoc + - bundle - pod install script: - xctool test -workspace DeepLinkKit.xcworkspace -scheme ReceiverDemo -sdk iphonesimulator ONLY_ACTIVE_ARCH=NO diff --git a/DeepLinkKit/Router/DPLDeepLinkRouter.h b/DeepLinkKit/Router/DPLDeepLinkRouter.h index 0fcd442..3b84155 100644 --- a/DeepLinkKit/Router/DPLDeepLinkRouter.h +++ b/DeepLinkKit/Router/DPLDeepLinkRouter.h @@ -1,7 +1,6 @@ @import Foundation; -@class DPLDeepLink; -@protocol DPLRouteHandler; +@class DPLDeepLink; /** @@ -48,7 +47,7 @@ typedef void(^DPLRouteCompletionBlock)(BOOL handled, NSError *error); For example, you can register a class for a route as follows: @code deepLinkRouter[@"table/book/:id"] = [MyBookingRouteHandler class]; @endcode */ -- (void)registerHandlerClass:(Class )handlerClass forRoute:(NSString *)route; +- (void)registerHandlerClass:(Class)handlerClass forRoute:(NSString *)route; /** diff --git a/DeepLinkKit/Router/DPLDeepLinkRouter.m b/DeepLinkKit/Router/DPLDeepLinkRouter.m index 2909294..3dad9bc 100644 --- a/DeepLinkKit/Router/DPLDeepLinkRouter.m +++ b/DeepLinkKit/Router/DPLDeepLinkRouter.m @@ -42,9 +42,9 @@ - (BOOL)applicationCanHandleDeepLinks { #pragma mark - Registering Routes -- (void)registerHandlerClass:(Class )handlerClass forRoute:(NSString *)route { +- (void)registerHandlerClass:(Class)handlerClass forRoute:(NSString *)route { - if (handlerClass && [route length]) { + if (handlerClass && [handlerClass isSubclassOfClass:[DPLRouteHandler class]] && [route length]) { [self.routes addObject:route]; [self.blocksByRoute removeObjectForKey:route]; self.classesByRoute[route] = handlerClass; diff --git a/Tests/Router/DPLDeepLinkRouterSpec.m b/Tests/Router/DPLDeepLinkRouterSpec.m index 081bf96..f7b2551 100644 --- a/Tests/Router/DPLDeepLinkRouterSpec.m +++ b/Tests/Router/DPLDeepLinkRouterSpec.m @@ -29,11 +29,21 @@ expect(router[route]).to.equal([DPLRouteHandler class]); }); + it(@"registers a class for a route with registerHandlerClass:forRoute:", ^{ + [router registerHandlerClass:[DPLRouteHandler class] forRoute:route]; + expect(router[route]).to.equal([DPLRouteHandler class]); + }); + it(@"does NOT register a class not conforming to DPLRouteHandler protocol", ^{ router[route] = [NSObject class]; expect(router[route]).to.beNil(); }); + it(@"does NOT register not a subclass of DPLRouteHandler with registerHandlerClass:forRoute:", ^{ + [router registerHandlerClass:[NSObject class] forRoute:route]; + expect(router[route]).to.beNil(); + }); + it(@"does NOT register routes that are not strings", ^{ router[(id)@(0)] = [DPLRouteHandler class]; expect(router[route]).to.beNil();