Proyectos de Subversion Iphone Microlearning

Rev

| Ultima modificación | Ver Log |

Rev Autor Línea Nro. Línea
1 efrain 1
/**
2
 Copyright 2018 Google Inc. All rights reserved.
3
 
4
 Licensed under the Apache License, Version 2.0 (the "License");
5
 you may not use this file except in compliance with the License.
6
 You may obtain a copy of the License at:
7
 
8
 http://www.apache.org/licenses/LICENSE-2.0
9
 
10
 Unless required by applicable law or agreed to in writing, software
11
 distributed under the License is distributed on an "AS IS" BASIS,
12
 WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
 See the License for the specific language governing permissions and
14
 limitations under the License.
15
 */
16
 
17
#import "FBLPromise+Wrap.h"
18
 
19
#import "FBLPromise+Async.h"
20
 
21
@implementation FBLPromise (WrapAdditions)
22
 
23
+ (instancetype)wrapCompletion:(void (^)(FBLPromiseCompletion))work {
24
  return [self onQueue:self.defaultDispatchQueue wrapCompletion:work];
25
}
26
 
27
+ (instancetype)onQueue:(dispatch_queue_t)queue
28
         wrapCompletion:(void (^)(FBLPromiseCompletion))work {
29
  NSParameterAssert(queue);
30
  NSParameterAssert(work);
31
 
32
  return [self onQueue:queue
33
                 async:^(FBLPromiseFulfillBlock fulfill, FBLPromiseRejectBlock __unused _) {
34
                   work(^{
35
                     fulfill(nil);
36
                   });
37
                 }];
38
}
39
 
40
+ (instancetype)wrapObjectCompletion:(void (^)(FBLPromiseObjectCompletion))work {
41
  return [self onQueue:self.defaultDispatchQueue wrapObjectCompletion:work];
42
}
43
 
44
+ (instancetype)onQueue:(dispatch_queue_t)queue
45
    wrapObjectCompletion:(void (^)(FBLPromiseObjectCompletion))work {
46
  NSParameterAssert(queue);
47
  NSParameterAssert(work);
48
 
49
  return [self onQueue:queue
50
                 async:^(FBLPromiseFulfillBlock fulfill, FBLPromiseRejectBlock __unused _) {
51
                   work(^(id __nullable value) {
52
                     fulfill(value);
53
                   });
54
                 }];
55
}
56
 
57
+ (instancetype)wrapErrorCompletion:(void (^)(FBLPromiseErrorCompletion))work {
58
  return [self onQueue:self.defaultDispatchQueue wrapErrorCompletion:work];
59
}
60
 
61
+ (instancetype)onQueue:(dispatch_queue_t)queue
62
    wrapErrorCompletion:(void (^)(FBLPromiseErrorCompletion))work {
63
  NSParameterAssert(queue);
64
  NSParameterAssert(work);
65
 
66
  return [self onQueue:queue
67
                 async:^(FBLPromiseFulfillBlock fulfill, FBLPromiseRejectBlock reject) {
68
                   work(^(NSError *__nullable error) {
69
                     if (error) {
70
                       reject(error);
71
                     } else {
72
                       fulfill(nil);
73
                     }
74
                   });
75
                 }];
76
}
77
 
78
+ (instancetype)wrapObjectOrErrorCompletion:(void (^)(FBLPromiseObjectOrErrorCompletion))work {
79
  return [self onQueue:self.defaultDispatchQueue wrapObjectOrErrorCompletion:work];
80
}
81
 
82
+ (instancetype)onQueue:(dispatch_queue_t)queue
83
    wrapObjectOrErrorCompletion:(void (^)(FBLPromiseObjectOrErrorCompletion))work {
84
  NSParameterAssert(queue);
85
  NSParameterAssert(work);
86
 
87
  return [self onQueue:queue
88
                 async:^(FBLPromiseFulfillBlock fulfill, FBLPromiseRejectBlock reject) {
89
                   work(^(id __nullable value, NSError *__nullable error) {
90
                     if (error) {
91
                       reject(error);
92
                     } else {
93
                       fulfill(value);
94
                     }
95
                   });
96
                 }];
97
}
98
 
99
+ (instancetype)wrapErrorOrObjectCompletion:(void (^)(FBLPromiseErrorOrObjectCompletion))work {
100
  return [self onQueue:self.defaultDispatchQueue wrapErrorOrObjectCompletion:work];
101
}
102
 
103
+ (instancetype)onQueue:(dispatch_queue_t)queue
104
    wrapErrorOrObjectCompletion:(void (^)(FBLPromiseErrorOrObjectCompletion))work {
105
  NSParameterAssert(queue);
106
  NSParameterAssert(work);
107
 
108
  return [self onQueue:queue
109
                 async:^(FBLPromiseFulfillBlock fulfill, FBLPromiseRejectBlock reject) {
110
                   work(^(NSError *__nullable error, id __nullable value) {
111
                     if (error) {
112
                       reject(error);
113
                     } else {
114
                       fulfill(value);
115
                     }
116
                   });
117
                 }];
118
}
119
 
120
+ (FBLPromise<NSArray *> *)wrap2ObjectsOrErrorCompletion:
121
    (void (^)(FBLPromise2ObjectsOrErrorCompletion))work {
122
  return [self onQueue:self.defaultDispatchQueue wrap2ObjectsOrErrorCompletion:work];
123
}
124
 
125
+ (FBLPromise<NSArray *> *)onQueue:(dispatch_queue_t)queue
126
     wrap2ObjectsOrErrorCompletion:(void (^)(FBLPromise2ObjectsOrErrorCompletion))work {
127
  NSParameterAssert(queue);
128
  NSParameterAssert(work);
129
 
130
  return [self onQueue:queue
131
                 async:^(FBLPromiseFulfillBlock fulfill, FBLPromiseRejectBlock reject) {
132
                   work(^(id __nullable value1, id __nullable value2, NSError *__nullable error) {
133
                     if (error) {
134
                       reject(error);
135
                     } else {
136
                       fulfill(@[ value1 ?: [NSNull null], value2 ?: [NSNull null] ]);
137
                     }
138
                   });
139
                 }];
140
}
141
 
142
+ (FBLPromise<NSNumber *> *)wrapBoolCompletion:(void (^)(FBLPromiseBoolCompletion))work {
143
  return [self onQueue:self.defaultDispatchQueue wrapBoolCompletion:work];
144
}
145
 
146
+ (FBLPromise<NSNumber *> *)onQueue:(dispatch_queue_t)queue
147
                 wrapBoolCompletion:(void (^)(FBLPromiseBoolCompletion))work {
148
  NSParameterAssert(queue);
149
  NSParameterAssert(work);
150
 
151
  return [self onQueue:queue
152
                 async:^(FBLPromiseFulfillBlock fulfill, FBLPromiseRejectBlock __unused _) {
153
                   work(^(BOOL value) {
154
                     fulfill(@(value));
155
                   });
156
                 }];
157
}
158
 
159
+ (FBLPromise<NSNumber *> *)wrapBoolOrErrorCompletion:
160
    (void (^)(FBLPromiseBoolOrErrorCompletion))work {
161
  return [self onQueue:self.defaultDispatchQueue wrapBoolOrErrorCompletion:work];
162
}
163
 
164
+ (FBLPromise<NSNumber *> *)onQueue:(dispatch_queue_t)queue
165
          wrapBoolOrErrorCompletion:(void (^)(FBLPromiseBoolOrErrorCompletion))work {
166
  NSParameterAssert(queue);
167
  NSParameterAssert(work);
168
 
169
  return [self onQueue:queue
170
                 async:^(FBLPromiseFulfillBlock fulfill, FBLPromiseRejectBlock reject) {
171
                   work(^(BOOL value, NSError *__nullable error) {
172
                     if (error) {
173
                       reject(error);
174
                     } else {
175
                       fulfill(@(value));
176
                     }
177
                   });
178
                 }];
179
}
180
 
181
+ (FBLPromise<NSNumber *> *)wrapIntegerCompletion:(void (^)(FBLPromiseIntegerCompletion))work {
182
  return [self onQueue:self.defaultDispatchQueue wrapIntegerCompletion:work];
183
}
184
 
185
+ (FBLPromise<NSNumber *> *)onQueue:(dispatch_queue_t)queue
186
              wrapIntegerCompletion:(void (^)(FBLPromiseIntegerCompletion))work {
187
  NSParameterAssert(queue);
188
  NSParameterAssert(work);
189
 
190
  return [self onQueue:queue
191
                 async:^(FBLPromiseFulfillBlock fulfill, FBLPromiseRejectBlock __unused _) {
192
                   work(^(NSInteger value) {
193
                     fulfill(@(value));
194
                   });
195
                 }];
196
}
197
 
198
+ (FBLPromise<NSNumber *> *)wrapIntegerOrErrorCompletion:
199
    (void (^)(FBLPromiseIntegerOrErrorCompletion))work {
200
  return [self onQueue:self.defaultDispatchQueue wrapIntegerOrErrorCompletion:work];
201
}
202
 
203
+ (FBLPromise<NSNumber *> *)onQueue:(dispatch_queue_t)queue
204
       wrapIntegerOrErrorCompletion:(void (^)(FBLPromiseIntegerOrErrorCompletion))work {
205
  NSParameterAssert(queue);
206
  NSParameterAssert(work);
207
 
208
  return [self onQueue:queue
209
                 async:^(FBLPromiseFulfillBlock fulfill, FBLPromiseRejectBlock reject) {
210
                   work(^(NSInteger value, NSError *__nullable error) {
211
                     if (error) {
212
                       reject(error);
213
                     } else {
214
                       fulfill(@(value));
215
                     }
216
                   });
217
                 }];
218
}
219
 
220
+ (FBLPromise<NSNumber *> *)wrapDoubleCompletion:(void (^)(FBLPromiseDoubleCompletion))work {
221
  return [self onQueue:self.defaultDispatchQueue wrapDoubleCompletion:work];
222
}
223
 
224
+ (FBLPromise<NSNumber *> *)onQueue:(dispatch_queue_t)queue
225
               wrapDoubleCompletion:(void (^)(FBLPromiseDoubleCompletion))work {
226
  NSParameterAssert(queue);
227
  NSParameterAssert(work);
228
 
229
  return [self onQueue:(dispatch_queue_t)queue
230
                 async:^(FBLPromiseFulfillBlock fulfill, FBLPromiseRejectBlock __unused _) {
231
                   work(^(double value) {
232
                     fulfill(@(value));
233
                   });
234
                 }];
235
}
236
 
237
+ (FBLPromise<NSNumber *> *)wrapDoubleOrErrorCompletion:
238
    (void (^)(FBLPromiseDoubleOrErrorCompletion))work {
239
  return [self onQueue:self.defaultDispatchQueue wrapDoubleOrErrorCompletion:work];
240
}
241
 
242
+ (FBLPromise<NSNumber *> *)onQueue:(dispatch_queue_t)queue
243
        wrapDoubleOrErrorCompletion:(void (^)(FBLPromiseDoubleOrErrorCompletion))work {
244
  NSParameterAssert(queue);
245
  NSParameterAssert(work);
246
 
247
  return [self onQueue:queue
248
                 async:^(FBLPromiseFulfillBlock fulfill, FBLPromiseRejectBlock reject) {
249
                   work(^(double value, NSError *__nullable error) {
250
                     if (error) {
251
                       reject(error);
252
                     } else {
253
                       fulfill(@(value));
254
                     }
255
                   });
256
                 }];
257
}
258
 
259
@end
260
 
261
@implementation FBLPromise (DotSyntax_WrapAdditions)
262
 
263
+ (FBLPromise * (^)(void (^)(FBLPromiseCompletion)))wrapCompletion {
264
  return ^(void (^work)(FBLPromiseCompletion)) {
265
    return [self wrapCompletion:work];
266
  };
267
}
268
 
269
+ (FBLPromise * (^)(dispatch_queue_t, void (^)(FBLPromiseCompletion)))wrapCompletionOn {
270
  return ^(dispatch_queue_t queue, void (^work)(FBLPromiseCompletion)) {
271
    return [self onQueue:queue wrapCompletion:work];
272
  };
273
}
274
 
275
+ (FBLPromise * (^)(void (^)(FBLPromiseObjectCompletion)))wrapObjectCompletion {
276
  return ^(void (^work)(FBLPromiseObjectCompletion)) {
277
    return [self wrapObjectCompletion:work];
278
  };
279
}
280
 
281
+ (FBLPromise * (^)(dispatch_queue_t, void (^)(FBLPromiseObjectCompletion)))wrapObjectCompletionOn {
282
  return ^(dispatch_queue_t queue, void (^work)(FBLPromiseObjectCompletion)) {
283
    return [self onQueue:queue wrapObjectCompletion:work];
284
  };
285
}
286
 
287
+ (FBLPromise * (^)(void (^)(FBLPromiseErrorCompletion)))wrapErrorCompletion {
288
  return ^(void (^work)(FBLPromiseErrorCompletion)) {
289
    return [self wrapErrorCompletion:work];
290
  };
291
}
292
 
293
+ (FBLPromise * (^)(dispatch_queue_t, void (^)(FBLPromiseErrorCompletion)))wrapErrorCompletionOn {
294
  return ^(dispatch_queue_t queue, void (^work)(FBLPromiseErrorCompletion)) {
295
    return [self onQueue:queue wrapErrorCompletion:work];
296
  };
297
}
298
 
299
+ (FBLPromise * (^)(void (^)(FBLPromiseObjectOrErrorCompletion)))wrapObjectOrErrorCompletion {
300
  return ^(void (^work)(FBLPromiseObjectOrErrorCompletion)) {
301
    return [self wrapObjectOrErrorCompletion:work];
302
  };
303
}
304
 
305
+ (FBLPromise * (^)(dispatch_queue_t,
306
                    void (^)(FBLPromiseObjectOrErrorCompletion)))wrapObjectOrErrorCompletionOn {
307
  return ^(dispatch_queue_t queue, void (^work)(FBLPromiseObjectOrErrorCompletion)) {
308
    return [self onQueue:queue wrapObjectOrErrorCompletion:work];
309
  };
310
}
311
 
312
+ (FBLPromise * (^)(void (^)(FBLPromiseErrorOrObjectCompletion)))wrapErrorOrObjectCompletion {
313
  return ^(void (^work)(FBLPromiseErrorOrObjectCompletion)) {
314
    return [self wrapErrorOrObjectCompletion:work];
315
  };
316
}
317
 
318
+ (FBLPromise * (^)(dispatch_queue_t,
319
                    void (^)(FBLPromiseErrorOrObjectCompletion)))wrapErrorOrObjectCompletionOn {
320
  return ^(dispatch_queue_t queue, void (^work)(FBLPromiseErrorOrObjectCompletion)) {
321
    return [self onQueue:queue wrapErrorOrObjectCompletion:work];
322
  };
323
}
324
 
325
+ (FBLPromise<NSArray *> * (^)(void (^)(FBLPromise2ObjectsOrErrorCompletion)))
326
    wrap2ObjectsOrErrorCompletion {
327
  return ^(void (^work)(FBLPromise2ObjectsOrErrorCompletion)) {
328
    return [self wrap2ObjectsOrErrorCompletion:work];
329
  };
330
}
331
 
332
+ (FBLPromise<NSArray *> * (^)(dispatch_queue_t, void (^)(FBLPromise2ObjectsOrErrorCompletion)))
333
    wrap2ObjectsOrErrorCompletionOn {
334
  return ^(dispatch_queue_t queue, void (^work)(FBLPromise2ObjectsOrErrorCompletion)) {
335
    return [self onQueue:queue wrap2ObjectsOrErrorCompletion:work];
336
  };
337
}
338
 
339
+ (FBLPromise<NSNumber *> * (^)(void (^)(FBLPromiseBoolCompletion)))wrapBoolCompletion {
340
  return ^(void (^work)(FBLPromiseBoolCompletion)) {
341
    return [self wrapBoolCompletion:work];
342
  };
343
}
344
 
345
+ (FBLPromise<NSNumber *> * (^)(dispatch_queue_t,
346
                                void (^)(FBLPromiseBoolCompletion)))wrapBoolCompletionOn {
347
  return ^(dispatch_queue_t queue, void (^work)(FBLPromiseBoolCompletion)) {
348
    return [self onQueue:queue wrapBoolCompletion:work];
349
  };
350
}
351
 
352
+ (FBLPromise<NSNumber *> * (^)(void (^)(FBLPromiseBoolOrErrorCompletion)))
353
    wrapBoolOrErrorCompletion {
354
  return ^(void (^work)(FBLPromiseBoolOrErrorCompletion)) {
355
    return [self wrapBoolOrErrorCompletion:work];
356
  };
357
}
358
 
359
+ (FBLPromise<NSNumber *> * (^)(dispatch_queue_t, void (^)(FBLPromiseBoolOrErrorCompletion)))
360
    wrapBoolOrErrorCompletionOn {
361
  return ^(dispatch_queue_t queue, void (^work)(FBLPromiseBoolOrErrorCompletion)) {
362
    return [self onQueue:queue wrapBoolOrErrorCompletion:work];
363
  };
364
}
365
 
366
+ (FBLPromise<NSNumber *> * (^)(void (^)(FBLPromiseIntegerCompletion)))wrapIntegerCompletion {
367
  return ^(void (^work)(FBLPromiseIntegerCompletion)) {
368
    return [self wrapIntegerCompletion:work];
369
  };
370
}
371
 
372
+ (FBLPromise<NSNumber *> * (^)(dispatch_queue_t,
373
                                void (^)(FBLPromiseIntegerCompletion)))wrapIntegerCompletionOn {
374
  return ^(dispatch_queue_t queue, void (^work)(FBLPromiseIntegerCompletion)) {
375
    return [self onQueue:queue wrapIntegerCompletion:work];
376
  };
377
}
378
 
379
+ (FBLPromise<NSNumber *> * (^)(void (^)(FBLPromiseIntegerOrErrorCompletion)))
380
    wrapIntegerOrErrorCompletion {
381
  return ^(void (^work)(FBLPromiseIntegerOrErrorCompletion)) {
382
    return [self wrapIntegerOrErrorCompletion:work];
383
  };
384
}
385
 
386
+ (FBLPromise<NSNumber *> * (^)(dispatch_queue_t, void (^)(FBLPromiseIntegerOrErrorCompletion)))
387
    wrapIntegerOrErrorCompletionOn {
388
  return ^(dispatch_queue_t queue, void (^work)(FBLPromiseIntegerOrErrorCompletion)) {
389
    return [self onQueue:queue wrapIntegerOrErrorCompletion:work];
390
  };
391
}
392
 
393
+ (FBLPromise<NSNumber *> * (^)(void (^)(FBLPromiseDoubleCompletion)))wrapDoubleCompletion {
394
  return ^(void (^work)(FBLPromiseDoubleCompletion)) {
395
    return [self wrapDoubleCompletion:work];
396
  };
397
}
398
 
399
+ (FBLPromise<NSNumber *> * (^)(dispatch_queue_t,
400
                                void (^)(FBLPromiseDoubleCompletion)))wrapDoubleCompletionOn {
401
  return ^(dispatch_queue_t queue, void (^work)(FBLPromiseDoubleCompletion)) {
402
    return [self onQueue:queue wrapDoubleCompletion:work];
403
  };
404
}
405
 
406
+ (FBLPromise<NSNumber *> * (^)(void (^)(FBLPromiseDoubleOrErrorCompletion)))
407
    wrapDoubleOrErrorCompletion {
408
  return ^(void (^work)(FBLPromiseDoubleOrErrorCompletion)) {
409
    return [self wrapDoubleOrErrorCompletion:work];
410
  };
411
}
412
 
413
+ (FBLPromise<NSNumber *> * (^)(dispatch_queue_t, void (^)(FBLPromiseDoubleOrErrorCompletion)))
414
    wrapDoubleOrErrorCompletionOn {
415
  return ^(dispatch_queue_t queue, void (^work)(FBLPromiseDoubleOrErrorCompletion)) {
416
    return [self onQueue:queue wrapDoubleOrErrorCompletion:work];
417
  };
418
}
419
 
420
@end