This is untested, but should get you most of the way there:
- (RACSignal *)GET:(NSString *)url parameters:(NSDictionary *)parameters {
SEL sel = @selector(GET:parameters:success:failure:);
return [self signalForRequest:sel url:url parameters:parameters];
}
- (RACSignal *)POST:(NSString *)url parameters:(NSDictionary *)parameters {
SEL sel = @selector(POST:parameters:success:failure:);
return [self signalForRequest:sel url:url parameters:parameters];
}
- (RACSignal *)PUT:(NSString *)url parameters:(NSDictionary *)parameters {
SEL sel = @selector(PUT:parameters:success:failure:);
return [self signalForRequest:sel url:url parameters:parameters];
}
- (RACSignal *)DELETE:(NSString *)url parameters:(NSDictionary *)parameters {
SEL sel = @selector(DELETE:parameters:success:failure:);
return [self signalForRequest:sel url:url parameters:parameters];
}
- (RACSignal *)signalForRequest:(SEL)requestSEL url:(NSURL *)url parameters:(NSDictionary *)parameters {
@weakify(self);
return [RACSignal createSignal:^RACDisposable *(id<RACSubscriber> subscriber) {
@strongify(self);
void (^success)(AFHTTPRequestOperation *, NSDictionary *) = ^(AFHTTPRequestOperation *operation, NSDictionary *response) {
[subscriber sendNext:response];
[subscriber sendCompleted];
};
void (^failure)(AFHTTPRequestOperation *, NSDictionary *) = ^(AFHTTPRequestOperation *operation, NSError *error) {
[subscriber sendError:error];
};
NSMethodSignature *methodSignature = [self.manager methodSignatureForSelector:requestSEL];
NSInvocation *invocation = [NSInvocation invocationWithMethodSignature:methodSignature];
[invocation setSelector:requestSEL];
[invocation setTarget:self.manager];
[invocation rac_setArgument:url atIndex:2];
[invocation rac_setArgument:parameters atIndex:3];
[invocation rac_setArgument:success atIndex:4];
[invocation rac_setArgument:failure atIndex:5];
[invocation invoke];
}];
}