@@ -61,26 +61,11 @@ - (NSDictionary *)parametersFromRequestObject:(id<STHTTPNetTaskRequestObject>)re
6161 continue ;
6262 }
6363
64- id propertyValue = [(NSObject *)requestObject valueForKey: propertyName];
65- if ([propertyValue conformsToProtocol: @protocol (STHTTPNetTaskRequestObject)]) {
66- [parameters addEntriesFromDictionary: [self parametersFromRequestObject: propertyValue]];
67- }
68- else if ([propertyValue isKindOfClass: [NSDictionary class ]]) {
69- [parameters addEntriesFromDictionary: propertyValue];
70- }
71- else {
72- if (![propertyValue isKindOfClass: [NSNumber class ]] &&
73- ![propertyValue isKindOfClass: [NSString class ]] &&
74- ![propertyValue isKindOfClass: [NSArray class ]]) {
75- continue ;
76- }
77-
78- NSString *separator = STHTTPNetTaskRequestObjectDefaultSeparator;
79- if ([requestObject respondsToSelector: @selector (parameterNameSeparator )]) {
80- separator = [requestObject parameterNameSeparator ];
81- }
82- NSString *parameterName = [self parameterNameOfProperty: propertyName withSeparator: separator];
83- parameters[parameterName] = propertyValue;
64+ NSString *separator = [self separatorFromRequestObject: requestObject];
65+ NSString *parameterName = [self parameterNameFromName: propertyName withSeparator: separator];
66+ id parameterValue = [self parameterValueFromValue: [(NSObject *)requestObject valueForKey: propertyName] inRequestObject: requestObject];
67+ if (parameterName && parameterValue) {
68+ parameters[parameterName] = parameterValue;
8469 }
8570 }
8671
@@ -89,23 +74,53 @@ - (NSDictionary *)parametersFromRequestObject:(id<STHTTPNetTaskRequestObject>)re
8974 return parameters;
9075}
9176
92- - (BOOL ) shouldPackPropertyWithAttributes : ( NSArray *)attributes
77+ - (NSDictionary *) parametersFromDictionary : ( NSDictionary *)dictionary inRequestObject : ( id <STHTTPNetTaskRequestObject>) requestObject
9378{
94- // Only pack non-readonly property
95- return ![attributes containsObject: @" R" ];
79+ NSString *separator = [self separatorFromRequestObject: requestObject];
80+ NSMutableDictionary *parameters = [NSMutableDictionary new ];
81+ for (NSString *key in dictionary) {
82+ NSString *parameterName = [self parameterNameFromName: key withSeparator: separator];
83+ id parameterValue = [self parameterValueFromValue: dictionary[key] inRequestObject: requestObject];
84+ if (parameterName && parameterValue) {
85+ parameters[parameterName] = parameterValue;
86+ }
87+ }
88+ return parameters;
89+ }
90+
91+ - (id )parameterValueFromValue : (id )value inRequestObject : (id <STHTTPNetTaskRequestObject>)requestObject
92+ {
93+ if ([requestObject respondsToSelector: @selector (transformedValue: )]) {
94+ id transformedValue = [requestObject transformValue: value];
95+ if (transformedValue != value) {
96+ return transformedValue;
97+ }
98+ }
99+ if ([value conformsToProtocol: @protocol (STHTTPNetTaskRequestObject)]) {
100+ return [self parametersFromRequestObject: value];
101+ }
102+ else if ([value isKindOfClass: [NSDictionary class ]]) {
103+ return [self parametersFromDictionary: value inRequestObject: requestObject];
104+ }
105+ else if ([value isKindOfClass: [NSNumber class ]] ||
106+ [value isKindOfClass: [NSString class ]] ||
107+ [value isKindOfClass: [NSArray class ]]) {
108+ return value;
109+ }
110+ return nil ;
96111}
97112
98- - (NSString *)parameterNameOfProperty : (NSString *)propertyName withSeparator : (NSString *)separator
113+ - (NSString *)parameterNameFromName : (NSString *)name withSeparator : (NSString *)separator
99114{
100115 if (!separator) {
101- return propertyName ;
116+ return name ;
102117 }
103118
104119 NSMutableString *parameterName = [NSMutableString new ];
105- const char *chars = propertyName .UTF8String ;
106- for (NSUInteger i = 0 ; i < propertyName .length ; i++) {
120+ const char *chars = name .UTF8String ;
121+ for (NSUInteger i = 0 ; i < name .length ; i++) {
107122 BOOL hasPrevious = i != 0 ;
108- BOOL hasNext = i + 1 < propertyName .length ;
123+ BOOL hasNext = i + 1 < name .length ;
109124 BOOL prependUnderscore = NO ;
110125 char ch = chars[i];
111126 if (isupper (ch)) {
@@ -132,4 +147,19 @@ - (NSString *)parameterNameOfProperty:(NSString *)propertyName withSeparator:(NS
132147 return [NSString stringWithString: parameterName];
133148}
134149
150+ - (NSString *)separatorFromRequestObject : (id <STHTTPNetTaskRequestObject>)requestObject
151+ {
152+ NSString *separator = STHTTPNetTaskRequestObjectDefaultSeparator;
153+ if ([requestObject respondsToSelector: @selector (parameterNameSeparator )]) {
154+ separator = [requestObject parameterNameSeparator ];
155+ }
156+ return separator;
157+ }
158+
159+ - (BOOL )shouldPackPropertyWithAttributes : (NSArray *)attributes
160+ {
161+ // Only pack non-readonly property
162+ return ![attributes containsObject: @" R" ];
163+ }
164+
135165@end
0 commit comments