Skip to content
Fetching contributors…
Cannot retrieve contributors at this time
215 lines (169 sloc) 6.56 KB
//
// RKRequestCache.h
// RestKit
//
// Created by Jeff Arena on 4/4/11.
// Copyright (c) 2009-2012 RestKit. All rights reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
//
#import "RKRequest.h"
#import "RKResponse.h"
#import "RKCache.h"
/**
Cache storage policy used to determines how long we keep a specific cache for.
*/
typedef enum {
/**
The cache is disabled. Attempts to store data will silently fail.
*/
RKRequestCacheStoragePolicyDisabled,
/**
Cache data for the length of the session and clear when the app exits.
*/
RKRequestCacheStoragePolicyForDurationOfSession,
/**
Cache data permanently until explicitly expired or flushed.
*/
RKRequestCacheStoragePolicyPermanently
} RKRequestCacheStoragePolicy;
/**
Location of session specific cache files within the Caches path.
*/
extern NSString * const RKRequestCacheSessionCacheDirectory;
/**
Location of permanent cache files within the Caches path.
*/
extern NSString * const RKRequestCachePermanentCacheDirectory;
/**
@constant RKRequestCache Header Keys
Constants for accessing cache specific X-RESTKIT
headers used to store cache metadata within the cache entry.
*/
/** The key for accessing the date the entry was cached. **/
extern NSString * const RKRequestCacheDateHeaderKey;
/** The key for accessing the status code of the cached request. **/
extern NSString * const RKRequestCacheStatusCodeHeadersKey;
/** The key for accessing the MIME Type of the cached request. **/
extern NSString * const RKRequestCacheMIMETypeHeadersKey;
/** The key for accessing the URL of the cached request. **/
extern NSString * const RKRequestCacheURLHeadersKey;
/**
Stores and retrieves cache entries for RestKit request objects.
*/
@interface RKRequestCache : NSObject {
RKRequestCacheStoragePolicy _storagePolicy;
RKCache *_cache;
}
///-----------------------------------------------------------------------------
/// @name Initializating the Cache
///-----------------------------------------------------------------------------
/**
Initializes the receiver with a cache at a given path and storage policy.
@param cachePath The path to store cached data in.
@param storagePolicy The storage policy to use for cached data.
@return An initialized request cache object.
*/
- (id)initWithPath:(NSString *)cachePath storagePolicy:(RKRequestCacheStoragePolicy)storagePolicy;
///-----------------------------------------------------------------------------
/// @name Locating the Cache
///-----------------------------------------------------------------------------
/**
Returns the full pathname to the cache.
*/
@property (nonatomic, readonly) NSString *path;
/**
Returns the cache path for the specified request.
@param request An RKRequest object to determine the cache path.
@return A string of the cache path for the specified request.
*/
- (NSString *)pathForRequest:(RKRequest *)request;
/**
Determine if a response exists for a request.
@param request An RKRequest object that is looking for cached content.
@return A boolean value for if a response exists in the cache.
*/
- (BOOL)hasResponseForRequest:(RKRequest *)request;
///-----------------------------------------------------------------------------
/// @name Populating the Cache
///-----------------------------------------------------------------------------
/**
Store a request's response in the cache.
@param response The response to be stored in the cache.
@param request The request that retrieved the response.
*/
- (void)storeResponse:(RKResponse *)response forRequest:(RKRequest *)request;
/**
Set the cache date for a request.
@param date The date the response for a request was cached.
@param request The request to store the cache date for.
*/
- (void)setCacheDate:(NSDate *)date forRequest:(RKRequest *)request;
///-----------------------------------------------------------------------------
/// @name Preparing Requests and Responses
///-----------------------------------------------------------------------------
/**
Returns a dictionary of cached headers for a cached request.
@param request The request to retrieve cached headers for.
@return An NSDictionary of the cached headers that were stored for the
specified request.
*/
- (NSDictionary *)headersForRequest:(RKRequest *)request;
/**
Returns an ETag for a request if it is stored in the cached headers.
@param request The request that an ETag is to be determined for.
@return A string of the ETag value stored for the specified request.
*/
- (NSString *)etagForRequest:(RKRequest *)request;
/**
Returns the date of the cached request.
@param request The request that needs a cache date returned.
@return A date object for the cached request.
*/
- (NSDate *)cacheDateForRequest:(RKRequest *)request;
/**
Returns the cached response for a given request.
@param request The request used to find the cached response.
@return An RKResponse object that was cached for a given request.
*/
- (RKResponse *)responseForRequest:(RKRequest *)request;
///-----------------------------------------------------------------------------
/// @name Invalidating the Cache
///-----------------------------------------------------------------------------
/**
The storage policy for the cache.
*/
@property (nonatomic, assign) RKRequestCacheStoragePolicy storagePolicy;
/**
Invalidate the cache for a given request.
@param request The request that needs its cache invalidated.
*/
- (void)invalidateRequest:(RKRequest *)request;
/**
Invalidate any caches that fall under the given storage policy.
@param storagePolicy The RKRequestCacheStorePolicy used to determine which
caches need to be invalidated.
*/
- (void)invalidateWithStoragePolicy:(RKRequestCacheStoragePolicy)storagePolicy;
/**
Invalidate all caches on disk.
*/
- (void)invalidateAll;
///-----------------------------------------------------------------------------
/// @name Helpers
///-----------------------------------------------------------------------------
/**
The date formatter used to generate the cache date for the HTTP header.
*/
+ (NSDateFormatter *)rfc1123DateFormatter;
@end
Something went wrong with that request. Please try again.