123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687 |
- //
- // FLEXGlobalsEntry.m
- // FLEX
- //
- // Created by Javier Soto on 7/26/14.
- // Copyright (c) 2020 FLEX Team. All rights reserved.
- //
- #import "FLEXGlobalsEntry.h"
- @implementation FLEXGlobalsEntry
- + (instancetype)entryWithEntry:(Class<FLEXGlobalsEntry>)cls row:(FLEXGlobalsRow)row {
- BOOL providesVCs = [cls respondsToSelector:@selector(globalsEntryViewController:)];
- BOOL providesActions = [cls respondsToSelector:@selector(globalsEntryRowAction:)];
- NSParameterAssert(cls);
- NSParameterAssert(providesVCs || providesActions);
- FLEXGlobalsEntry *entry = [self new];
- entry->_entryNameFuture = ^{ return [cls globalsEntryTitle:row]; };
- if (providesVCs) {
- id action = providesActions ? [cls globalsEntryRowAction:row] : nil;
- if (action) {
- entry->_rowAction = action;
- } else {
- entry->_viewControllerFuture = ^{ return [cls globalsEntryViewController:row]; };
- }
- } else {
- entry->_rowAction = [cls globalsEntryRowAction:row];
- }
- return entry;
- }
- + (instancetype)entryWithNameFuture:(FLEXGlobalsEntryNameFuture)nameFuture
- viewControllerFuture:(FLEXGlobalsEntryViewControllerFuture)viewControllerFuture {
- NSParameterAssert(nameFuture);
- NSParameterAssert(viewControllerFuture);
- FLEXGlobalsEntry *entry = [self new];
- entry->_entryNameFuture = [nameFuture copy];
- entry->_viewControllerFuture = [viewControllerFuture copy];
- return entry;
- }
- + (instancetype)entryWithNameFuture:(FLEXGlobalsEntryNameFuture)nameFuture
- action:(FLEXGlobalsEntryRowAction)rowSelectedAction {
- NSParameterAssert(nameFuture);
- NSParameterAssert(rowSelectedAction);
- FLEXGlobalsEntry *entry = [self new];
- entry->_entryNameFuture = [nameFuture copy];
- entry->_rowAction = [rowSelectedAction copy];
- return entry;
- }
- @end
- @interface FLEXGlobalsEntry (Debugging)
- @property (nonatomic, readonly) NSString *name;
- @end
- @implementation FLEXGlobalsEntry (Debugging)
- - (NSString *)name {
- return self.entryNameFuture();
- }
- @end
- #pragma mark - flex_concreteGlobalsEntry
- @implementation NSObject (FLEXGlobalsEntry)
- + (FLEXGlobalsEntry *)flex_concreteGlobalsEntry:(FLEXGlobalsRow)row {
- if ([self conformsToProtocol:@protocol(FLEXGlobalsEntry)]) {
- return [FLEXGlobalsEntry entryWithEntry:self row:row];
- }
- return nil;
- }
- @end
|