Skip to content

Commit

Permalink
Merge pull request #159 from jzucker2/is-enabled
Browse files Browse the repository at this point in the history
Added isEnabled getters for OHHTTPStubs.
  • Loading branch information
AliSoftware committed Mar 13, 2016
2 parents 8fb51b1 + e3ad6db commit cd1020a
Show file tree
Hide file tree
Showing 2 changed files with 71 additions and 7 deletions.
16 changes: 16 additions & 0 deletions OHHTTPStubs/Sources/OHHTTPStubs.h
Original file line number Diff line number Diff line change
Expand Up @@ -128,6 +128,13 @@ typedef OHHTTPStubsResponse* __nonnull (^OHHTTPStubsResponseBlock)( NSURLRequest
*/
+(void)setEnabled:(BOOL)enabled;

/**
* Whether or not stubs are enabled for the shared session or for `NSURLConnection`
*
* @return If `YES` the stubs are enabled. If `NO` then the stubs are disabled
*/
+(BOOL)isEnabled;

#if defined(__IPHONE_7_0) || defined(__MAC_10_9)
/**
* Enable or disable the stubs on a given `NSURLSessionConfiguration`.
Expand All @@ -149,6 +156,15 @@ typedef OHHTTPStubsResponse* __nonnull (^OHHTTPStubsResponseBlock)( NSURLRequest
* created sessions.
*/
+ (void)setEnabled:(BOOL)enabled forSessionConfiguration:(NSURLSessionConfiguration *)sessionConfig;

/**
* Whether stubs are enabled or disabled on a given `NSURLSessionConfiguration`
*
* @param sessionConfig The NSURLSessionConfiguration on which to enable/disable the stubs
*
* @return If `YES` the stubs are enabled for sessionConfig. If `NO` then the stubs are disabled
*/
+ (BOOL)isEnabledForSessionConfiguration:(NSURLSessionConfiguration *)sessionConfig;
#endif

#pragma mark - Debug Methods
Expand Down
62 changes: 55 additions & 7 deletions OHHTTPStubs/Sources/OHHTTPStubs.m
Original file line number Diff line number Diff line change
Expand Up @@ -44,6 +44,7 @@ @interface OHHTTPStubsProtocol : NSURLProtocol @end
@interface OHHTTPStubs()
+ (instancetype)sharedInstance;
@property(atomic, copy) NSMutableArray* stubDescriptors;
@property(atomic, assign) BOOL enabledState;
@property(atomic, copy, nullable) void (^onStubActivationBlock)(NSURLRequest*, id<OHHTTPStubsDescriptor>);
@end

Expand Down Expand Up @@ -105,7 +106,7 @@ + (void)initialize
{
if (self == [OHHTTPStubs class])
{
[self setEnabled:YES];
[self _setEnable:YES];
}
}
- (instancetype)init
Expand All @@ -114,13 +115,14 @@ - (instancetype)init
if (self)
{
_stubDescriptors = [NSMutableArray array];
_enabledState = YES; // assume initialize has already been run
}
return self;
}

- (void)dealloc
{
[self.class setEnabled:NO];
[self.class _setEnable:NO];
}

////////////////////////////////////////////////////////////////////////////////
Expand Down Expand Up @@ -149,18 +151,26 @@ +(void)removeAllStubs

#pragma mark > Disabling & Re-Enabling stubs

+(void)setEnabled:(BOOL)enable
+(void)_setEnable:(BOOL)enable
{
static BOOL currentEnabledState = NO;
if (enable && !currentEnabledState)
if (enable)
{
[NSURLProtocol registerClass:OHHTTPStubsProtocol.class];
}
else if (!enable && currentEnabledState)
else
{
[NSURLProtocol unregisterClass:OHHTTPStubsProtocol.class];
}
currentEnabledState = enable;
}

+(void)setEnabled:(BOOL)enabled
{
[OHHTTPStubs.sharedInstance setEnabled:enabled];
}

+(BOOL)isEnabled
{
return OHHTTPStubs.sharedInstance.isEnabled;
}

#if defined(__IPHONE_7_0) || defined(__MAC_10_9)
Expand Down Expand Up @@ -189,6 +199,25 @@ + (void)setEnabled:(BOOL)enable forSessionConfiguration:(NSURLSessionConfigurati
@"this method if the user is running iOS7+/OSX9+.", NSStringFromSelector(_cmd));
}
}

+ (BOOL)isEnabledForSessionConfiguration:(NSURLSessionConfiguration *)sessionConfig
{
// Runtime check to make sure the API is available on this version
if ( [sessionConfig respondsToSelector:@selector(protocolClasses)]
&& [sessionConfig respondsToSelector:@selector(setProtocolClasses:)])
{
NSMutableArray * urlProtocolClasses = [NSMutableArray arrayWithArray:sessionConfig.protocolClasses];
Class protoCls = OHHTTPStubsProtocol.class;
return [urlProtocolClasses containsObject:protoCls];
}
else
{
NSLog(@"[OHHTTPStubs] %@ is only available when running on iOS7+/OSX9+. "
@"Use conditions like 'if ([NSURLSessionConfiguration class])' to only call "
@"this method if the user is running iOS7+/OSX9+.", NSStringFromSelector(_cmd));
return NO;
}
}
#endif

#pragma mark > Debug Methods
Expand All @@ -208,6 +237,25 @@ +(void)onStubActivation:( nullable void(^)(NSURLRequest* request, id<OHHTTPStubs
////////////////////////////////////////////////////////////////////////////////
#pragma mark - Private instance methods

-(BOOL)isEnabled
{
BOOL enabled = NO;
@synchronized(self)
{
enabled = _enabledState;
}
return enabled;
}

-(void)setEnabled:(BOOL)enable
{
@synchronized(self)
{
_enabledState = enable;
[self.class _setEnable:_enabledState];
}
}

-(void)addStub:(OHHTTPStubsDescriptor*)stubDesc
{
@synchronized(_stubDescriptors)
Expand Down

0 comments on commit cd1020a

Please sign in to comment.