Skip to content

Commit

Permalink
Config with object (#6)
Browse files Browse the repository at this point in the history
* Updated readme
Better embedding

* Routing to singletons

* Route callback can now return class, instance or nil

* Fixes
  • Loading branch information
aronbalog committed Aug 4, 2016
1 parent 3c30d01 commit 93783fa
Show file tree
Hide file tree
Showing 35 changed files with 1,066 additions and 659 deletions.
6 changes: 3 additions & 3 deletions ARoute.podspec
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
Pod::Spec.new do |s|

s.name = "ARoute"
s.version = "0.0.7"
s.version = "0.0.8"
s.summary = "ARoute"

s.description = <<-DESC
Expand All @@ -12,9 +12,9 @@ Pod::Spec.new do |s|
s.license = "MIT"
s.author = { "Aron Balog" => "aronbalog@gmail.com" }
s.platform = :ios
s.platform = :ios, "7.0"
s.platform = :ios, "8.0"

s.source = { :git => "https://github.com/aronbalog/ARoute.git", :tag => "0.0.7" }
s.source = { :git => "https://github.com/aronbalog/ARoute.git", :tag => "0.0.8" }
s.source_files = "ARoute", "ARoute/**/*.{h,m}"
s.public_header_files = "ARoute/Classes/Public/**/*.h"
s.requires_arc = true
Expand Down
9 changes: 9 additions & 0 deletions ARoute/Classes/Private/Configuration/ARouteConfiguration.m
Original file line number Diff line number Diff line change
Expand Up @@ -28,4 +28,13 @@ - (NSString *)castingSeparator
return _castingSeparator;
}

- (BOOL)animate
{
if (!_animate) {
_animate = YES;
}

return _animate;
}

@end
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
//
// UIViewController+TransitioningDelegate.h
// Pods
//
// Created by Aron Balog on 01/08/16.
//
//

#import <UIKit/UIKit.h>

@interface UIViewController (TransitioningDelegate)

@property (strong, nonatomic, nullable) id <UIViewControllerTransitioningDelegate> aroute_transitioningDelegate;

@end
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
//
// UIViewController+TransitioningDelegate.m
// ARoute
//
// Created by Aron Balog on 01/08/16.
//
//

#import "UIViewController+TransitioningDelegate.h"
#import <objc/runtime.h>

@implementation UIViewController (TransitioningDelegate)

@dynamic aroute_transitioningDelegate;

- (void)setAroute_transitioningDelegate:(id<UIViewControllerTransitioningDelegate>)aroute_transitioningDelegate
{
objc_setAssociatedObject(self, @selector(aroute_transitioningDelegate), aroute_transitioningDelegate, OBJC_ASSOCIATION_RETAIN_NONATOMIC);
}

- (id<UIViewControllerTransitioningDelegate>)aroute_transitioningDelegate
{
return objc_getAssociatedObject(self, @selector(aroute_transitioningDelegate));
}

@end
31 changes: 21 additions & 10 deletions ARoute/Classes/Private/Registration/ARouteRegistration.m
Original file line number Diff line number Diff line change
Expand Up @@ -39,11 +39,7 @@ + (instancetype)routeRegistrationWithRouter:(ARoute *)router routes:(nonnull NSD

id value = routes.allValues.firstObject;

if (object_isClass(value)) {
item.destinationViewControllerClass = value;
} else {
item.destinationCallback = value;
}
[self processDestinationValue:value forItem:item];

item.router = router;
item.routeName = routeName;
Expand All @@ -68,11 +64,7 @@ + (instancetype)routeRegistrationWithRouter:(ARoute *)router routes:(NSDictionar

ARouteRegistrationItem *item = [ARouteRegistrationItem new];

if (object_isClass(value)) {
item.destinationViewControllerClass = value;
} else {
item.destinationCallback = value;
}
[self processDestinationValue:value forItem:item];

item.router = router;
item.route = route;
Expand All @@ -93,6 +85,7 @@ - (instancetype)embedInNavigationController
[self.items enumerateObjectsUsingBlock:^(ARouteRegistrationItem * _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {
obj.embeddingType = ARouteEmbeddingTypeNavigationController;
}];

return self;
}

Expand All @@ -102,6 +95,7 @@ - (instancetype)embedInNavigationController:(NSArray *(^)(ARouteResponse *))prev
obj.previousViewControllersBlock = previousViewControllers;
obj.embeddingType = ARouteEmbeddingTypeNavigationController;
}];

return self;
}

Expand All @@ -110,6 +104,7 @@ - (instancetype)embedInTabBarController
[self.items enumerateObjectsUsingBlock:^(ARouteRegistrationItem * _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {
obj.embeddingType = ARouteEmbeddingTypeTabBarController;
}];

return self;
}

Expand All @@ -118,6 +113,7 @@ - (instancetype)embedIn:(__kindof UIViewController<AEmbeddable> *(^)(ARouteRespo
[self.items enumerateObjectsUsingBlock:^(ARouteRegistrationItem * _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {
obj.embeddingType = ARouteEmbeddingTypeCustomViewController;
}];

return self;
}

Expand Down Expand Up @@ -174,6 +170,21 @@ - (void)execute
[self.routeRegistrationStorage storeRouteRegistration:self];
}

#pragma mark - Private

+ (void)processDestinationValue:(id)value forItem:(ARouteRegistrationItem *)item
{
if (object_isClass(value)) {
item.destinationViewControllerClass = value;
} else if ([value conformsToProtocol:@protocol(AConfigurable)]) {
item.configurationObject = value;
} else if ([value isKindOfClass:[UIViewController class]]) {
item.destinationViewController = value;
} else {
item.destinationCallback = value;
}
}

#pragma mark - Properties

- (ARouteRegistrationStorage *)routeRegistrationStorage
Expand Down
20 changes: 7 additions & 13 deletions ARoute/Classes/Private/RegistrationItem/ARouteRegistrationItem.h
Original file line number Diff line number Diff line change
Expand Up @@ -7,35 +7,29 @@
//

#import <Foundation/Foundation.h>

@class ARoute;
#import "ARoute.h"
#import "AConfigurable.h"

typedef NS_ENUM(NSInteger, ARouteRegistrationItemType) {
ARouteRegistrationItemTypeRoute,
ARouteRegistrationItemTypeNamedRoute
};

typedef NS_ENUM(NSInteger, ARouteEmbeddingType) {
ARouteEmbeddingTypeNotDefined,
ARouteEmbeddingTypeDoNotEmbed,
ARouteEmbeddingTypeNavigationController,
ARouteEmbeddingTypeTabBarController,
ARouteEmbeddingTypeCustomViewController
};

@interface ARouteRegistrationItem : NSObject

@property (strong, nonatomic, nonnull) ARoute *router;
@property (strong, nonatomic, nonnull) NSString *route;
@property (strong, nonatomic, nonnull) NSString *routeName;
@property (strong, nonatomic, nonnull) Class destinationViewControllerClass;
@property (strong, nonatomic, nonnull) void (^destinationCallback)(ARouteResponse * _Nonnull routeResponse);
@property (strong, nonatomic, nullable) Class destinationViewControllerClass;
@property (strong, nonatomic, nullable) __kindof UIViewController *destinationViewController;
@property (strong, nonatomic, nonnull) id _Nullable(^destinationCallback)(ARouteResponse * _Nonnull routeResponse);
@property (strong, nonatomic, nonnull) BOOL (^protectBlock)(ARouteResponse * _Nonnull routeResponse, NSError * __autoreleasing _Nullable * _Nullable errorPtr);
@property (strong, nonatomic, nullable) NSDictionary <id, id> * _Nullable(^parametersBlock)();
@property (strong, nonatomic, nonnull) NSString *separator;
@property (strong, nonatomic, nonnull) NSString *castingSeparator;
@property (assign, nonatomic) ARouteRegistrationItemType type;
@property (assign, nonatomic) ARouteEmbeddingType embeddingType;
@property (assign, nonatomic) NSArray * _Nonnull(^ _Nonnull previousViewControllersBlock)(ARouteResponse * _Nonnull routeResponse);
@property (assign, nonatomic, nonnull) NSArray * _Nonnull(^previousViewControllersBlock)(ARouteResponse * _Nonnull routeResponse);
@property (strong, nonatomic, nonnull) id <AConfigurable> configurationObject;

@end
2 changes: 1 addition & 1 deletion ARoute/Classes/Private/Request/ARouteRequest.h
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@ typedef NS_ENUM(NSInteger, ARouteRequestType) {
@property (strong, nonatomic, nullable, readonly) NSString *route;
@property (strong, nonatomic, nullable, readonly) NSString *routeName;
@property (strong, nonatomic, nonnull, readonly) ARouteRequestConfiguration *configuration;
@property (strong, nonatomic, nullable, readonly) __kindof UIViewController *viewController;
@property (strong, nonatomic, nullable, readonly) __kindof UIViewController *viewControllerObject;
@property (strong, nonatomic, nullable, readonly) NSURL *URL;

+ (nonnull instancetype)routeRequestWithRouter:(nonnull ARoute *)router route:(nonnull NSString *)route;
Expand Down
28 changes: 25 additions & 3 deletions ARoute/Classes/Private/Request/ARouteRequest.m
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ @interface ARouteRequest ()
@property (strong, nonatomic, nonnull, readwrite) NSString *route;
@property (strong, nonatomic, nonnull, readwrite) NSString *routeName;
@property (strong, nonatomic, nonnull, readwrite) ARouteRequestConfiguration *configuration;
@property (strong, nonatomic, nullable, readwrite) __kindof UIViewController *viewController;
@property (strong, nonatomic, nullable, readwrite) __kindof UIViewController *viewControllerObject;

@property (strong, nonatomic, nullable, readwrite) NSURL *URL;

Expand Down Expand Up @@ -55,7 +55,7 @@ + (instancetype)routeRequestWithRouter:(ARoute *)router viewController:(__kindof

routeRequest.type = ARouteRequestTypeViewController;
routeRequest.router = router;
routeRequest.viewController = viewController;
routeRequest.viewControllerObject = viewController;

return routeRequest;
}
Expand Down Expand Up @@ -101,6 +101,13 @@ + (instancetype)routeRequestWithRouter:(ARoute *)router URL:(nonnull __kindof NS
return self;
}

- (id<ARouteRequestExecutable,ARouteRequestProtectable,ARouteRequestEmbeddable,ARouteRequestConfigurable>)embedInTabBarController
{
self.configuration.embeddingType = ARouteEmbeddingTypeTabBarController;

return self;
}

- (id<ARouteRequestInitiable,ARouteRequestExecutable,ARouteRequestProtectable,ARouteRequestEmbeddable,ARouteRequestConfigurable>)parameters:(NSDictionary <id, id> * _Nullable (^)())parameters
{
if (parameters) {
Expand Down Expand Up @@ -174,19 +181,34 @@ + (instancetype)routeRequestWithRouter:(ARoute *)router URL:(nonnull __kindof NS

- (void)execute
{
[self.executor executeRouteRequest:self routeResponse:nil];
[self execute:nil];
}

- (void)execute:(void (^)(ARouteResponse * _Nonnull))routeResponse
{
[self.executor executeRouteRequest:self routeResponse:routeResponse];
}

- (void)push
{
[self push:nil];
}

- (void)push:(void (^)(ARouteResponse * _Nonnull))routeResponse
{
[self.executor pushRouteRequest:self routeResponse:routeResponse];
}

- (UIViewController *)viewController
{
return [self.executor viewControllerForRouteRequest:self];
}

- (UIViewController *)embeddingViewController
{
return [self.executor embeddingViewControllerForRouteRequest:self];
}

#pragma mark - Private

- (ARouteRequestConfiguration *)configuration
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,8 @@
+ (nonnull instancetype)sharedInstance;

- (void)executeRouteRequest:(nonnull ARouteRequest *)routeRequest routeResponse:(void (^ _Nullable)(ARouteResponse * _Nonnull))routeResponseCallback;
- (void)pushRouteRequest:(nonnull ARouteRequest *)routeRequest routeResponse:(void (^ _Nullable)(ARouteResponse * _Nonnull))routeResponseCallback;
- (nullable UIViewController *)viewControllerForRouteRequest:(nonnull ARouteRequest *)routeRequest;
- (nullable UIViewController *)embeddingViewControllerForRouteRequest:(nonnull ARouteRequest *)routeRequest;

@end
Loading

0 comments on commit 93783fa

Please sign in to comment.