Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
105 commits
Select commit Hold shift + click to select a range
54ec094
Merge pull request #9 from pinguo-gaoshan/master
zhangchutian14 Oct 19, 2016
581f820
t
zhangchutian14 Oct 19, 2016
bc4b847
add a copy method
zhangchutian14 Nov 28, 2016
eb86c4a
change write cache logic
zhangchutian14 Dec 1, 2016
bcc358a
t
zhangchutian14 Dec 1, 2016
5338399
优化log输出
zhangchutian14 Dec 30, 2016
8b8b1d2
fix log
zhangchutian14 Jan 11, 2017
cef8c94
实现NSCopying
zhangchutian14 Jan 11, 2017
559e705
t
zhangchutian14 Jan 11, 2017
0beb77f
add close db queue methods
zhangchutian14 Mar 10, 2017
11c31a5
修改删除时间
zhangchutian14 Apr 1, 2017
e4b3596
t
zhangchutian14 Apr 1, 2017
1bd0015
t
jumperb May 8, 2017
23ef003
去掉断言
jumperb May 8, 2017
9de67ff
修改id转换问题
jumperb May 8, 2017
7b87392
修改依赖问题
jumperb May 22, 2017
31eb539
t
jumperb May 22, 2017
cba6b5b
t
jumperb May 22, 2017
f60bd76
t
jumperb May 22, 2017
dea5aa5
升级AF3
jumperb May 22, 2017
de06f8e
t
jumperb May 22, 2017
397af9b
t
jumperb May 22, 2017
00a88c6
t
jumperb May 22, 2017
47c4aa3
t
jumperb May 22, 2017
1bbb534
t
jumperb May 22, 2017
b847542
t
jumperb May 22, 2017
76b4b5f
t
jumperb May 23, 2017
921b472
add hook
jumperb Jun 7, 2017
30d318a
t
jumperb Jun 7, 2017
d314822
t
jumperb Jun 16, 2017
b60e9e2
t
jumperb Jun 20, 2017
21ad53a
bugdix
jumperb Jun 20, 2017
2b0234f
more interface
jumperb Jul 3, 2017
e23570a
add a redirect resp
jumperb Jul 4, 2017
9caf9cc
delete cache when deserialize fail
jumperb Jul 5, 2017
e36b2f7
bugfix
jumperb Jul 18, 2017
b1b0573
Update README.md
jumperb Jul 19, 2017
ba59c4b
Update README.md
jumperb Jul 26, 2017
ccebc69
Update README.md
jumperb Jul 26, 2017
8f7288a
mock
jumperb Aug 10, 2017
e35bbd4
Merge branch 'master' of github.com:jumperb/HAccess
jumperb Aug 10, 2017
81313a6
t
jumperb Aug 17, 2017
2b111b6
bugfix
jumperb Aug 29, 2017
c89f131
bugfix
jumperb Sep 14, 2017
da1e516
bugfix
jumperb Sep 28, 2017
18fc0be
add on reqiesting
jumperb Sep 29, 2017
b60414a
delete pb
jumperb Oct 16, 2017
32fe5cf
delete pb
jumperb Oct 16, 2017
dbaf666
bugfix
jumperb Mar 7, 2018
1a39398
fail时暴露response
Apr 2, 2018
5a5d6f4
bugfix
Apr 2, 2018
dd73789
提前设置responseSerializer
Jul 20, 2018
5a5921d
添加requestContentType字段
Aug 15, 2018
978d06a
修改request的时机
Aug 16, 2018
0c965ec
修改队列的bug
Oct 11, 2018
b20d26a
t
Oct 11, 2018
b6aa84c
队列bug修复
Oct 11, 2018
8485472
修改属性管理接口
Oct 15, 2018
1994779
增加可多态方法
Oct 23, 2018
f82cbbb
修改属性获取问题
jumperb Oct 25, 2018
4bd3bac
修改属性遍历深度
jumperb Oct 25, 2018
142df97
修改iOS8崩溃问题
Nov 22, 2018
86fbd53
增加初始化多态
Jan 23, 2019
e17ef8e
增加扩展方法
Feb 15, 2019
5def220
修改引用
Feb 15, 2019
c375bb3
t
Feb 15, 2019
f2724b5
t
Feb 18, 2019
83bf593
t
Feb 18, 2019
54150d9
调整字典转换问题
May 27, 2019
34b6ec3
修改字典类型相关问题
Jul 31, 2019
d44d68a
t
Jul 31, 2019
c327564
防止value为Array、Dict时崩溃
pinguo-songpan Sep 27, 2019
d292ea3
Merge pull request #11 from g00d-will/master
jumperb Sep 27, 2019
45cd9d8
t
Sep 27, 2019
38c06c2
add url validate
Nov 25, 2019
191a506
t
Nov 25, 2019
e740937
处理category和readonly属性的问题
Apr 7, 2020
65c3684
异常URL判断
May 13, 2020
ee4a89a
适配AF4.0+
Jun 8, 2020
8c14e11
t
Jun 9, 2020
ce5265a
处理错误问题
Aug 3, 2020
4e3c6bd
t
Aug 3, 2020
262d692
处理ios9问题
Sep 21, 2020
7281852
t
Sep 21, 2020
0d7f1c4
升级pod
May 10, 2021
e03feee
当mapkey取不到时使用pp.name来取数据
Sep 8, 2021
038a416
t
Sep 8, 2021
b682af3
add json request support
Dec 27, 2021
3568553
t
Dec 27, 2021
fc918f9
deal warning
Dec 27, 2021
d109188
t
Dec 27, 2021
9b11d35
t
Dec 27, 2021
67f850f
t
Dec 27, 2021
d390932
t
Dec 27, 2021
75c9745
fix: 多文件上传参数名错误
Mar 10, 2023
daec401
Merge pull request #12 from snail-xx/master
jumperb Mar 10, 2023
4369b94
增加tag:3.1.0
Mar 10, 2023
897164f
增加tag:3.1.1
Mar 10, 2023
f3bc969
取消类型限制
Dec 7, 2023
9abde80
增加tag:3.1.2
Dec 7, 2023
3da56ce
去除基类限制
Dec 8, 2023
6f33ecd
增加tag:3.1.3
Dec 8, 2023
72a96d3
处理@和NSObject类型的数据
Dec 29, 2023
48910b3
【feature】增加tag:3.1.4
Dec 29, 2023
d6983ab
add a new cache logic and refactor process
Mar 3, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
9 changes: 9 additions & 0 deletions Classes/Database/HDBMgr.h
Original file line number Diff line number Diff line change
Expand Up @@ -53,6 +53,15 @@
//name: name of db, config in HDBMgrDatasource
+ (FMDatabaseQueue *)queueWithKey:(NSString *)key;

//close queue
+ (void)closeQueue:(NSString *)key;
+ (void)closeAllQueue;



//reload queue
+ (void)reloadQueue:(NSString *)key;
+ (void)reloadAllQueue;

@end

Expand Down
40 changes: 29 additions & 11 deletions Classes/Database/HDBMgr.m
Original file line number Diff line number Diff line change
Expand Up @@ -66,18 +66,36 @@ - (FMDatabaseQueue *)queueWithKey:(NSString *)key
});
return res;
}
//- (FMDatabaseQueue *)defaultQueue
//{
// dispatch_sync(self.operateQueue, ^{
// if (!_defaultQueue)
// {
// _defaultQueue = [self queueInitWithKey:[self defaultDatabaseKey]];
// }
// });
// return _defaultQueue;
//}


//close queue
+ (void)closeQueue:(NSString *)key
{
dispatch_sync([HDBMgr shared].operateQueue, ^{
FMDatabaseQueue *queue = [HDBMgr shared].queuesDict[key];
[queue close];
[[HDBMgr shared].queuesDict removeObjectForKey:key];
});
}
+ (void)closeAllQueue
{
dispatch_sync([HDBMgr shared].operateQueue, ^{
for (NSString *key in [HDBMgr shared].queuesDict)
{
FMDatabaseQueue *queue = [HDBMgr shared].queuesDict[key];
[queue close];
}
[[HDBMgr shared].queuesDict removeAllObjects];
});
}
//reload queue
+ (void)reloadQueue:(NSString *)key
{
[self closeQueue:key];
}
+ (void)reloadAllQueue
{
[self closeAllQueue];
}
#pragma mark - db connect
- (id<HDBMgrDatasource>)getDBSourceWithKey:(NSString *)key
{
Expand Down
39 changes: 16 additions & 23 deletions Classes/Database/HDatabaseDAO.m
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@
#import "HDatabaseDAO.h"
#import "HPropertyMgr.h"
#import <objc/runtime.h>
#import <Hodor/HCommon.h>
#import <Hodor/NSString+ext.h>


/**
Expand Down Expand Up @@ -56,7 +56,7 @@ - (void)setWithResultSet:(FMResultSet*)result
self.ID = [result stringForColumn:@"id"];
self.created = [result longForColumn:@"created"];
self.modified = [result longForColumn:@"modified"];
NSArray *pplist = [[HPropertyMgr shared] entityPropertylist:NSStringFromClass(self.class) isDepSearch:YES];
NSArray *pplist = [[HPropertyMgr shared] entityPropertylist:NSStringFromClass(self.class) deepTo:[HEntity class]];
for (NSString *p in pplist)
{
NSArray *exts = [[self class] annotations:p];
Expand Down Expand Up @@ -207,8 +207,7 @@ - (BOOL)save:(HEntity *)entity
- (BOOL)save:(HEntity *)entity keypp:(NSString *)keypp
{
if (keypp.length == 0) return NO;
NSString *IDValue = [HDatabaseDAO cleanValue:entity.ID];
if (![keypp isEqualToString:@"id"]) IDValue = [entity hValueForKey:keypp];
NSString *IDValue = [HDatabaseDAO cleanValue:[entity hValueForKey:keypp]];
if(nil == [self get:IDValue])
{
return [self add:entity];
Expand All @@ -227,8 +226,8 @@ - (BOOL)add:(HEntity *)entity

[self inDatabase:^(FMDatabase* db)
{
NSArray *pplist = [self entityPropertylist:[entity class] isDepSearch:NO];
NSString *fields = [self entityPropertylistString:[entity class] isDepSearch:NO];
NSArray *pplist = [self entityPropertylist:[entity class]];
NSString *fields = [self entityPropertylistString:[entity class]];
NSMutableString *values = [[NSMutableString alloc] init];
int index = 0;
for (NSString *p in pplist)
Expand Down Expand Up @@ -299,7 +298,7 @@ - (BOOL)update:(HEntity *)entity keypp:(NSString *)keypp
[self inDatabase:^(FMDatabase* db)
{
NSMutableString *settes =[[NSMutableString alloc] init];
NSArray *pplist = [self entityPropertylist:[entity class] isDepSearch:NO];
NSArray *pplist = [self entityPropertylist:[entity class]];
int index = 0;
for (NSString *p in pplist)
{
Expand All @@ -313,8 +312,7 @@ - (BOOL)update:(HEntity *)entity keypp:(NSString *)keypp

long nowtime = time(NULL);
[settes appendFormat:@", modified = '%li'", nowtime];
NSString *IDValue = [HDatabaseDAO cleanValue:entity.ID];
if (![keypp isEqualToString:@"id"]) IDValue = [entity hValueForKey:keypp];
NSString *IDValue = [HDatabaseDAO cleanValue:[entity hValueForKey:keypp]];
NSString *sql = [NSString stringWithFormat:@"UPDATE %@ SET %@ WHERE %@ = '%@'", [self tableName], settes, keypp, IDValue];
res = [db executeUpdate:sql];
if (res)
Expand All @@ -331,7 +329,7 @@ - (BOOL)update:(HEntity *)entity keyppList:(NSArray *)keyppList
[self inDatabase:^(FMDatabase* db)
{
NSMutableString *settes =[[NSMutableString alloc] init];
NSArray *pplist = [self entityPropertylist:[entity class] isDepSearch:NO];
NSArray *pplist = [self entityPropertylist:[entity class]];
int index = 0;
for (NSString *p in pplist)
{
Expand All @@ -350,8 +348,7 @@ - (BOOL)update:(HEntity *)entity keyppList:(NSArray *)keyppList
NSMutableString *whereStatment = [[NSMutableString alloc] init];
for (NSString *pp in keyppList)
{
id value = [HDatabaseDAO cleanValue:entity.ID];
if (![pp isEqualToString:@"id"]) value = [entity hValueForKey:pp];
id value = [HDatabaseDAO cleanValue:[entity hValueForKey:pp]];
[whereStatment appendFormat:@" and %@ = '%@'",pp,[HDatabaseDAO cleanValue:[value stringValue]]];
}
NSString *sql = [NSString stringWithFormat:@"UPDATE %@ SET %@ WHERE 1 %@", [self tableName], settes, whereStatment];
Expand Down Expand Up @@ -459,8 +456,8 @@ - (BOOL)adds:(NSArray *)entities
if (![self tableName]) return NO;
if ([entities count] == 0) return NO;
Class entityClass = [entities.lastObject class];
NSArray *pplist = [self entityPropertylist:entityClass isDepSearch:NO];
NSString *fields = [self entityPropertylistString:entityClass isDepSearch:NO];
NSArray *pplist = [self entityPropertylist:entityClass];
NSString *fields = [self entityPropertylistString:entityClass];
fields = [fields stringByAppendingString:@",created,modified"];

__block BOOL res = YES;
Expand Down Expand Up @@ -725,9 +722,9 @@ - (NSString *)conditonsStringFromDict:(NSDictionary *)dict



- (NSArray *)entityPropertylist:(Class)entityClass isDepSearch:(BOOL)deepSearch
- (NSArray *)entityPropertylist:(Class)entityClass
{
NSArray *pplist = [[HPropertyMgr shared] entityPropertylist:NSStringFromClass(entityClass) isDepSearch:deepSearch];
NSArray *pplist = [[HPropertyMgr shared] entityPropertylist:NSStringFromClass(entityClass) deepTo:nil];
NSMutableArray *newPPlist = [NSMutableArray new];
for (NSString *p in pplist)
{
Expand All @@ -738,9 +735,9 @@ - (NSArray *)entityPropertylist:(Class)entityClass isDepSearch:(BOOL)deepSearch
}
return newPPlist;
}
- (NSArray<HPropertyDetail *> *)entityPropertyDetailList:(Class)entityClass isDepSearch:(BOOL)deepSearch
- (NSArray<HPropertyDetail *> *)entityPropertyDetailList:(Class)entityClass
{
NSArray<HPropertyDetail *> *pplist = [[HPropertyMgr shared] entityPropertyDetailList:NSStringFromClass(entityClass) isDepSearch:deepSearch];
NSArray<HPropertyDetail *> *pplist = [[HPropertyMgr shared] entityPropertyDetailList:NSStringFromClass(entityClass) deepTo:nil];
NSMutableArray<HPropertyDetail *> *newPPDetaillist = [NSMutableArray new];
for (HPropertyDetail *p in pplist)
{
Expand All @@ -754,11 +751,7 @@ - (NSArray *)entityPropertylist:(Class)entityClass isDepSearch:(BOOL)deepSearch

- (NSString *)entityPropertylistString:(Class)entityClass
{
return [self entityPropertylistString:entityClass isDepSearch:YES];
}
- (NSString *)entityPropertylistString:(Class)entityClass isDepSearch:(BOOL)deepSearch;
{
NSArray *pplist = [self entityPropertylist:entityClass isDepSearch:deepSearch];
NSArray *pplist = [self entityPropertylist:entityClass];
NSMutableString *fields = [[NSMutableString alloc] init];
int index = 0;
for (NSString *p in pplist)
Expand Down
2 changes: 1 addition & 1 deletion Classes/Database/HEntity+Persistence.m
Original file line number Diff line number Diff line change
Expand Up @@ -57,7 +57,7 @@ + (BOOL)adds:(NSArray *)entities
- (BOOL)remove
{
NSString *keyPP = [self keyProperty];
id value = [self hValueForKey:keyPP];
id value = [HDatabaseDAO cleanValue:[self hValueForKey:keyPP]];
return [[self.class dao] remove:[HDatabaseDAO cleanValue:value]];
}
- (BOOL)remove:(NSString *)keyppValue
Expand Down
54 changes: 16 additions & 38 deletions Classes/Entity/HDeserializableObject.h
Original file line number Diff line number Diff line change
Expand Up @@ -9,77 +9,55 @@
#import <Foundation/Foundation.h>
#import "HPropertyMgr.h"
#import <Hodor/NSObject+annotation.h>
#import "NSObject+HDeserializable.h"
#pragma mark - defines

//safe get property name
#define pp_name(k) (self.k?@#k:@#k)


#define HPTest(condition, errorInfo) if (!(condition))\
{\
self.format_error = [NSString stringWithFormat:@"%@:%@", NSStringFromClass(self.class), errorInfo];\
NSAssert(NO,self.format_error);\
return;\
}

#pragma mark - annotion keys

//ignore property
#define HPIgnore @"ignore"

//property could be nil
#define HPOptional @"optional"

//property map to another key name
#define HPMapto(s) @{@"mapto":s}

//autocast between NSNumber and NSString
#define HPAutoCast @"autocast"

//value scope, only use for NSNumber
#define HPScope(from,to) @{@"scope":@{@"from":@(from),@"to":@(to)}}

//inner type, specified the class in array or the class of dictionary
#define HPInnerType(s) @{@"innertype":s}

//type devide, use on array whose items is of one more type, or use on dictionary whose type if decide by data
//ie. data has a key 'type', if value == 1 , convert itself to Aclass if (value == 2) convert itself to Bclass
//you can write like ppx(@"type", @(1), Aclass, @(2), Bclass)
#define HPDivideType(typekey, type1, class1, ...) @{@"dividetype":@[typekey, type1, class1, __VA_ARGS__]}



@class HDOPropertyExt;











@interface HDeserializableObject : NSObject
@interface HDeserializableObject : NSObject <NSCopying>
@property (nonatomic, strong) NSString *format_error;

#pragma mark - basic method

- (instancetype)initWithDictionary:(NSDictionary *)dict;
- (instancetype)initWithDictionary:(NSDictionary *)dict enableKeyMap:(BOOL)enableKeyMap couldEmpty:(BOOL)couldEmpty;

//set data with dictionary
- (void)setWithDictionary:(NSDictionary *)dict;

//enableKeyMap: enable key mapping feature in deserialize progress?
- (void)setWithDictionary:(NSDictionary *)dict enableKeyMap:(BOOL)enableKeyMap;
- (void)setWithDictionary:(NSDictionary *)dict enableKeyMap:(BOOL)enableKeyMap couldEmpty:(BOOL)couldEmpty;
//set with anothor obj, just shallow copy
- (void)setWithDObj:(HDeserializableObject *)obj;

//before data examlation and value setting, you can pre-processing data there, if some error occured, please record to self.format_error and return nil
- (id)preMapValue:(id)value forKey:(NSString *)key;

//set value to property, you can rewrite it for some special design, if some error occured, please record to self.format_error and return nil
- (void)setValue:(id)value forProperty:(HPropertyDetail *)ppDetail exts:(HDOPropertyExt *)propertyExts enableKeyMap:(BOOL)enableKeyMap couldEmpty:(BOOL)couldEmpty;
#pragma mark - advance method

//decide the class in array, according to data, propert info and annotation, if some error occured, please record to self.format_error and return nil
- (Class)classInArray:(id)item ppDetail:(HPropertyDetail *)ppDetail;

//decide the class of a dictionaty , according to data, propert info and annotation, if some error occured, please record to self.format_error and return nil
- (Class)classForDictionary:(NSDictionary *)item ppDetail:(HPropertyDetail *)ppDetail;

//create obj
- (id)createObjectWithClass:(Class)cls;
@end



Loading