Skip to content

Commit

Permalink
Merge pull request #64 from strongloop/feature/add-find-methods
Browse files Browse the repository at this point in the history
Add findWithFilter/findOneWithFilter
  • Loading branch information
raymondfeng committed Sep 30, 2015
2 parents 4d082ed + a328161 commit 2f782b4
Show file tree
Hide file tree
Showing 3 changed files with 88 additions and 4 deletions.
12 changes: 8 additions & 4 deletions LoopBack/LBPersistedModel.h
Original file line number Diff line number Diff line change
Expand Up @@ -94,9 +94,13 @@ typedef void (^LBPersistedModelAllSuccessBlock)(NSArray *models);
- (void)allWithSuccess:(LBPersistedModelAllSuccessBlock)success
failure:(SLFailureBlock)failure;

//typedef void (^LBPersistedModelFindOneSuccessBlock)(LBPersistedModel *model);
//- (void)findOneWithFilter:(NSDictionary *)filter
// success:(LBPersistedModelFindOneSuccessBlock)success
// failure:(SLFailureBlock)failure;
typedef void (^LBPersistedModelFindOneSuccessBlock)(LBPersistedModel *model);
- (void)findOneWithFilter:(NSDictionary *)filter
success:(LBPersistedModelFindOneSuccessBlock)success
failure:(SLFailureBlock)failure;

- (void)findWithFilter:(NSDictionary *)filter
success:(LBPersistedModelAllSuccessBlock)success
failure:(SLFailureBlock)failure;

@end
41 changes: 41 additions & 0 deletions LoopBack/LBPersistedModel.m
Original file line number Diff line number Diff line change
Expand Up @@ -81,6 +81,10 @@ - (SLRESTContract *)contract {
forMethod:[NSString stringWithFormat:@"%@.findById", self.className]];
[contract addItem:[SLRESTContractItem itemWithPattern:[NSString stringWithFormat:@"/%@", self.className] verb:@"GET"]
forMethod:[NSString stringWithFormat:@"%@.all", self.className]];
[contract addItem:[SLRESTContractItem itemWithPattern:[NSString stringWithFormat:@"/%@", self.className] verb:@"GET"]
forMethod:[NSString stringWithFormat:@"%@.find", self.className]];
[contract addItem:[SLRESTContractItem itemWithPattern:[NSString stringWithFormat:@"/%@/findOne", self.className] verb:@"GET"]
forMethod:[NSString stringWithFormat:@"%@.findOne", self.className]];

return contract;
}
Expand Down Expand Up @@ -124,5 +128,42 @@ - (void)allWithSuccess:(LBPersistedModelAllSuccessBlock)success
failure:failure];
}

- (void)findOneWithFilter:(NSDictionary *)filter
success:(LBPersistedModelFindOneSuccessBlock)success
failure:(SLFailureBlock)failure {

if(!filter) {
filter = @{};
}
[self invokeStaticMethod:@"findOne"
parameters:@{@"filter": filter}
success:^(id value) {
NSAssert([[value class] isSubclassOfClass:[NSDictionary class]], @"Received non-Dictionary: %@", value);
success((LBPersistedModel*)[self modelWithDictionary:value]);
} failure:failure];
}

- (void)findWithFilter:(NSDictionary *) filter
success: (LBPersistedModelAllSuccessBlock)success
failure:(SLFailureBlock)failure {
if(!filter) {
filter = @{};
}
[self invokeStaticMethod:@"find"
parameters:@{@"filter": filter}
success:^(id value) {
NSAssert([[value class] isSubclassOfClass:[NSArray class]], @"Received non-Array: %@", value);

NSMutableArray *models = [NSMutableArray array];
[value enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {
[models addObject:[self modelWithDictionary:obj]];
}];

success(models);
}
failure:failure];
}



@end
39 changes: 39 additions & 0 deletions LoopBackTests/LBPersistedModelTests.m
Original file line number Diff line number Diff line change
Expand Up @@ -92,6 +92,45 @@ - (void)testAll {
ASYNC_TEST_END
}

- (void)testFindWithFilter {
ASYNC_TEST_START
[self.repository findWithFilter:@{@"where": @{ @"name" : @"Foo" }}
success:^(NSArray *models) {
XCTAssertNotNil(models, @"No models returned.");
XCTAssertTrue([models count] >= 1, @"Invalid # of models returned: %lu", (unsigned long)[models count]);
XCTAssertTrue([[models[0] class] isSubclassOfClass:[LBPersistedModel class]], @"Invalid class.");
XCTAssertEqualObjects(models[0][@"name"], @"Foo", @"Invalid name");
XCTAssertEqualObjects(models[0][@"bars"], @0, @"Invalid bars");
ASYNC_TEST_SIGNAL
} failure:ASYNC_TEST_FAILURE_BLOCK];
ASYNC_TEST_END
}

- (void)testFindOne {
ASYNC_TEST_START
[[self.repository adapter] invokeStaticMethod:@"widgets.findOne" parameters:
@{ @"filter": @{@"where": @{ @"name" : @"Foo" }}} success:^(LBPersistedModel *model) {
XCTAssertNotNil(model, @"No models returned.");
XCTAssertEqualObjects(model[@"name"], @"Foo", @"Invalid name");
XCTAssertEqualObjects(model[@"bars"], @0, @"Invalid bars");
ASYNC_TEST_SIGNAL
} failure:ASYNC_TEST_FAILURE_BLOCK];
ASYNC_TEST_END
}

- (void)testFindOneWithFilter {
ASYNC_TEST_START
[self.repository findOneWithFilter: @{@"where": @{ @"name" : @"Foo" }}
success:^(LBPersistedModel *model) {
XCTAssertNotNil(model, @"No models returned.");
XCTAssertEqualObjects(model[@"name"], @"Foo", @"Invalid name");
XCTAssertEqualObjects(model[@"bars"], @0, @"Invalid bars");
ASYNC_TEST_SIGNAL
} failure:ASYNC_TEST_FAILURE_BLOCK];
ASYNC_TEST_END
}


- (void)testUpdate {
ASYNC_TEST_START
LBPersistedModelFindSuccessBlock verify = ^(LBPersistedModel *model) {
Expand Down

0 comments on commit 2f782b4

Please sign in to comment.