YapDatabase/Testing/UnitTesting/TestObject.h
2013-10-21 17:06:59 -07:00

71 lines
2.9 KiB
Objective-C

#import <Foundation/Foundation.h>
@class TestObjectMetadata;
/**
* You can place any kind of object into the database so long as it can be archived / unarchived.
* That is, the database needs to be able to turn the object into NSData (archive),
* and then recreate the object later from that data (unarchive).
*
* YapDatabase actually supports configurable serializers / deserializers.
* So you can fully configure how your app goes about doing the archiving / unarchiving.
*
* But the most simple (and Apple supported) technique for this is the NSCoding protocol.
* If you're not already familiar with it, you have nothing to fear! It's extremely simple!
* Follow these 3 steps:
* 1. Add the <NSCoding> protocol specifier to the header file of your class
* 2. Implement encodeWithCoder: method (archiving)
* 3. Implement initWithCoder: method (unarchiving)
*
* Take a look at the implementation of this class to see how simple it is.
**/
@interface TestObject : NSObject <NSCoding>
+ (TestObject *)generateTestObject;
+ (TestObject *)generateTestObjectWithSomeDate:(NSDate *)someDate someInt:(int)someInt;
/**
* These are all dummy values.
* We're not trying to do anything special here.
* Just trying to make the object somewhat represent something that may be used in a real application.
**/
@property (nonatomic, strong, readonly) NSString * someString;
@property (nonatomic, strong, readonly) NSNumber * someNumber;
@property (nonatomic, strong, readonly) NSDate * someDate;
@property (nonatomic, strong, readonly) NSArray * someArray;
@property (nonatomic, assign, readonly) int someInt;
@property (nonatomic, assign, readonly) double someDouble;
- (TestObjectMetadata *)extractMetadata;
@end
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
#pragma mark -
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/**
* Metadata is entirely optional.
* If you want to use metadata, you can use whatever you want.
*
* One common usage for metadata is timestamps.
* For example, if you're downloading data from a server somewhere,
* you might use metadata to timestamp when you originally fetched it.
* You can later refer to the timestamp to decide if the data is stale and needs to be refreshed.
*
* Another common usage is to use a small subset of a large object as metadata.
* This can reduce overhead if the metadata fields are needed often, but the full object is rarely needed.
*
* Thus metadata can be very flexible.
*
* This example is rather silly because the object itself isn't big.
* This example is just here to demonstrate that you can use a custom metadata object too.
**/
@interface TestObjectMetadata : NSObject <NSCoding>
@property (nonatomic, strong, readonly) NSDate * someDate;
@property (nonatomic, assign, readonly) int someInt;
@end