From bdb889dea37c9aabe722203b2e2fbd952c6b8165 Mon Sep 17 00:00:00 2001 From: Diamond Lewis Date: Fri, 10 Jan 2025 18:40:02 -0600 Subject: [PATCH 1/5] feat: Add support for `PFObject.objectFromDictionary` --- Parse/Parse/Source/PFObject.h | 13 +++++++++++++ Parse/Parse/Source/PFObject.m | 7 +++++++ Parse/Tests/Unit/ObjectUnitTests.m | 9 +++++++++ 3 files changed, 29 insertions(+) diff --git a/Parse/Parse/Source/PFObject.h b/Parse/Parse/Source/PFObject.h index be1738c7d..6f035def0 100644 --- a/Parse/Parse/Source/PFObject.h +++ b/Parse/Parse/Source/PFObject.h @@ -880,6 +880,19 @@ NS_REQUIRES_PROPERTY_DEFINITIONS withName:(NSString *)name block:(nullable PFBooleanResultBlock)block; +///-------------------------------------- +#pragma mark - Serialization +///-------------------------------------- + +/** + Creates a PFObject from a dictionary object. + + @param dictionary Undecoded dictionary. + @param defaultClassName The className of the resulting object if none is given by the dictionary. + */ ++ (id)objectFromDictionary:(NSDictionary *)dictionary + defaultClassName:(NSString *)defaultClassName; + @end NS_ASSUME_NONNULL_END diff --git a/Parse/Parse/Source/PFObject.m b/Parse/Parse/Source/PFObject.m index 48c24a801..c856d88ed 100644 --- a/Parse/Parse/Source/PFObject.m +++ b/Parse/Parse/Source/PFObject.m @@ -809,6 +809,13 @@ - (BOOL)resolveLocalId:(NSError *__autoreleasing*)error { return YES; } ++ (id)objectFromDictionary:(NSDictionary *)dictionary + defaultClassName:(NSString *)defaultClassName { + return [self _objectFromDictionary:dictionary + defaultClassName:defaultClassName + completeData:YES]; +} + + (id)_objectFromDictionary:(NSDictionary *)dictionary defaultClassName:(NSString *)defaultClassName completeData:(BOOL)completeData { diff --git a/Parse/Tests/Unit/ObjectUnitTests.m b/Parse/Tests/Unit/ObjectUnitTests.m index 56b7333f3..4fe1e2372 100644 --- a/Parse/Tests/Unit/ObjectUnitTests.m +++ b/Parse/Tests/Unit/ObjectUnitTests.m @@ -361,4 +361,13 @@ -(void)testLocalRESTEncoding { XCTAssertNil(error); } +- (void)testObjectFromDictionary { + NSDictionary *dict = @{ @"objectId": @"XYZ", @"score" : @1.0 }; + PFObject *object = [PFObject objectFromDictionary:dict + defaultClassName:@"Test"]; + + XCTAssertEqualObjects(dict[@"objectId"], object.objectId); + XCTAssertEqualObjects(dict[@"score"], object[@"score"]); +} + @end From 2a35deb8f6754d89d05784b2081db4289b916a6e Mon Sep 17 00:00:00 2001 From: Diamond Lewis Date: Mon, 13 Jan 2025 11:58:57 -0600 Subject: [PATCH 2/5] watch series 7 --- Rakefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Rakefile b/Rakefile index 7601b3812..948581224 100644 --- a/Rakefile +++ b/Rakefile @@ -14,7 +14,7 @@ starters_path = File.join(SCRIPT_PATH, 'ParseStarterProject') ios_simulator = 'platform="iOS Simulator",name="iPhone 14"' tvos_simulator = 'platform="tvOS Simulator",name="Apple TV"' -watchos_simulator = 'platform="watchOS Simulator",name="Apple Watch Series 8 (45mm)"' +watchos_simulator = 'platform="watchOS Simulator",name="Apple Watch Series 7 (45mm)"' build_action = [XCTask::BuildAction::CLEAN, XCTask::BuildAction::BUILD]; From 7182a747fbc5fbb4af91aae2e7206daa37d2fdec Mon Sep 17 00:00:00 2001 From: Diamond Lewis Date: Mon, 13 Jan 2025 12:56:02 -0600 Subject: [PATCH 3/5] try iphone 15 --- Rakefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Rakefile b/Rakefile index 948581224..58ca8fcfb 100644 --- a/Rakefile +++ b/Rakefile @@ -12,7 +12,7 @@ require_relative 'Vendor/xctoolchain/Scripts/xctask/build_task' SCRIPT_PATH = File.expand_path(File.dirname(__FILE__)) starters_path = File.join(SCRIPT_PATH, 'ParseStarterProject') -ios_simulator = 'platform="iOS Simulator",name="iPhone 14"' +ios_simulator = 'platform="iOS Simulator",name="iPhone 15"' tvos_simulator = 'platform="tvOS Simulator",name="Apple TV"' watchos_simulator = 'platform="watchOS Simulator",name="Apple Watch Series 7 (45mm)"' From 9446df6ea9434290c0718341d69fadc77e6f9c96 Mon Sep 17 00:00:00 2001 From: Diamond Lewis Date: Mon, 27 Jan 2025 19:07:59 -0600 Subject: [PATCH 4/5] Update Rakefile --- Rakefile | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Rakefile b/Rakefile index 58ca8fcfb..7601b3812 100644 --- a/Rakefile +++ b/Rakefile @@ -12,9 +12,9 @@ require_relative 'Vendor/xctoolchain/Scripts/xctask/build_task' SCRIPT_PATH = File.expand_path(File.dirname(__FILE__)) starters_path = File.join(SCRIPT_PATH, 'ParseStarterProject') -ios_simulator = 'platform="iOS Simulator",name="iPhone 15"' +ios_simulator = 'platform="iOS Simulator",name="iPhone 14"' tvos_simulator = 'platform="tvOS Simulator",name="Apple TV"' -watchos_simulator = 'platform="watchOS Simulator",name="Apple Watch Series 7 (45mm)"' +watchos_simulator = 'platform="watchOS Simulator",name="Apple Watch Series 8 (45mm)"' build_action = [XCTask::BuildAction::CLEAN, XCTask::BuildAction::BUILD]; From b14d63dfac50a40e882598710b8531ddf32e8c4e Mon Sep 17 00:00:00 2001 From: Diamond Lewis Date: Tue, 28 Jan 2025 05:17:55 -0600 Subject: [PATCH 5/5] shorten name to fromDictionary --- Parse/Parse/Source/PFObject.h | 4 ++-- Parse/Parse/Source/PFObject.m | 4 ++-- Parse/Tests/Unit/ObjectUnitTests.m | 6 +++--- 3 files changed, 7 insertions(+), 7 deletions(-) diff --git a/Parse/Parse/Source/PFObject.h b/Parse/Parse/Source/PFObject.h index 6f035def0..9f89866d7 100644 --- a/Parse/Parse/Source/PFObject.h +++ b/Parse/Parse/Source/PFObject.h @@ -890,8 +890,8 @@ NS_REQUIRES_PROPERTY_DEFINITIONS @param dictionary Undecoded dictionary. @param defaultClassName The className of the resulting object if none is given by the dictionary. */ -+ (id)objectFromDictionary:(NSDictionary *)dictionary - defaultClassName:(NSString *)defaultClassName; ++ (id)fromDictionary:(NSDictionary *)dictionary + defaultClassName:(NSString *)defaultClassName; @end diff --git a/Parse/Parse/Source/PFObject.m b/Parse/Parse/Source/PFObject.m index c856d88ed..11e97e3bf 100644 --- a/Parse/Parse/Source/PFObject.m +++ b/Parse/Parse/Source/PFObject.m @@ -809,8 +809,8 @@ - (BOOL)resolveLocalId:(NSError *__autoreleasing*)error { return YES; } -+ (id)objectFromDictionary:(NSDictionary *)dictionary - defaultClassName:(NSString *)defaultClassName { ++ (id)fromDictionary:(NSDictionary *)dictionary + defaultClassName:(NSString *)defaultClassName { return [self _objectFromDictionary:dictionary defaultClassName:defaultClassName completeData:YES]; diff --git a/Parse/Tests/Unit/ObjectUnitTests.m b/Parse/Tests/Unit/ObjectUnitTests.m index 4fe1e2372..8c95f0f78 100644 --- a/Parse/Tests/Unit/ObjectUnitTests.m +++ b/Parse/Tests/Unit/ObjectUnitTests.m @@ -361,10 +361,10 @@ -(void)testLocalRESTEncoding { XCTAssertNil(error); } -- (void)testObjectFromDictionary { +- (void)testFromDictionary { NSDictionary *dict = @{ @"objectId": @"XYZ", @"score" : @1.0 }; - PFObject *object = [PFObject objectFromDictionary:dict - defaultClassName:@"Test"]; + PFObject *object = [PFObject fromDictionary:dict + defaultClassName:@"Test"]; XCTAssertEqualObjects(dict[@"objectId"], object.objectId); XCTAssertEqualObjects(dict[@"score"], object[@"score"]);