{"action":"created","comment":{"url":"https://api.github.com/repos/Lightricks/ReactiveObjC/pulls/comments/228737580","pull_request_review_id":169081518,"id":228737580,"node_id":"MDI0OlB1bGxSZXF1ZXN0UmV2aWV3Q29tbWVudDIyODczNzU4MA==","diff_hunk":"@@ -846,22 +846,57 @@ - (RACSignal *)takeUntilReplacement:(RACSignal *)replacement {\n \n - (RACSignal *)switchToLatest {\n   return [[RACSignal createSignal:^(id<RACSubscriber> subscriber) {\n-    RACMulticastConnection *connection = [self publish];\n+    __block BOOL outerCompleted = NO;\n+    __block BOOL innerCompleted = NO;\n+    __block NSUInteger innerSignalIndex = 0;\n \n-    RACDisposable *subscriptionDisposable = [[connection.signal\n-      flattenMap:^(RACSignal *x) {\n-        NSCAssert(x == nil || [x isKindOfClass:RACSignal.class], @\"-switchToLatest requires that the source signal (%@) send signals. Instead we got: %@\", self, x);\n+    RACSerialDisposable *innerDisposable = [[RACSerialDisposable alloc] init];\n+    NSLock *lock = [[NSLock alloc] init];\n+\n+    RACDisposable *outerDisposable = [self subscribeNext:^(RACSignal *signal) {\n+      NSCAssert(signal == nil || [signal isKindOfClass:RACSignal.class], @\"-switchToLatest expects signals as values, instead we got: %@\", signal);\n+      signal = signal ?: [RACSignal empty];\n \n-        // -concat:[RACSignal never] prevents completion of the receiver from\n-        // prematurely terminating the inner signal.\n-        return [x takeUntil:[connection.signal concat:[RACSignal never]]];\n-      }]\n-      subscribe:subscriber];\n+      [innerDisposable.disposable dispose];\n+\n+      [lock lock];\n+      innerCompleted = NO;\n+      ++innerSignalIndex;\n+      NSUInteger signalIndex = innerSignalIndex;\n+      [lock unlock];\n+\n+      RACDisposable *disposable = [signal subscribeNext:^(id x) {\n+        [subscriber sendNext:x];\n+      } error:^(NSError *error) {\n+        [subscriber sendError:error];\n+      } completed:^{\n+        [lock lock];\n+        if (innerSignalIndex == signalIndex) {\n+          if (outerCompleted) {\n+            [subscriber sendCompleted];\n+          } else {\n+            innerCompleted = YES;\n+          }\n+        }\n+        [lock unlock];\n+      }];\n+\n+      [innerDisposable swapInDisposable:disposable];","path":"ReactiveObjC/RACSignal+Operations.m","position":48,"original_position":48,"commit_id":"cb3e96343228976cb4d307a6a9d40e018fc4abf4","original_commit_id":"cb3e96343228976cb4d307a6a9d40e018fc4abf4","user":{"login":"Shachlan","id":16204012,"node_id":"MDQ6VXNlcjE2MjA0MDEy","avatar_url":"https://avatars2.githubusercontent.com/u/16204012?v=4","gravatar_id":"","url":"https://api.github.com/users/Shachlan","html_url":"https://github.com/Shachlan","followers_url":"https://api.github.com/users/Shachlan/followers","following_url":"https://api.github.com/users/Shachlan/following{/other_user}","gists_url":"https://api.github.com/users/Shachlan/gists{/gist_id}","starred_url":"https://api.github.com/users/Shachlan/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/Shachlan/subscriptions","organizations_url":"https://api.github.com/users/Shachlan/orgs","repos_url":"https://api.github.com/users/Shachlan/repos","events_url":"https://api.github.com/users/Shachlan/events{/privacy}","received_events_url":"https://api.github.com/users/Shachlan/received_events","type":"User","site_admin":false},"body":"That wouldn't change.\r\n\r\nSee [this commit](https://github.com/Lightricks/ReactiveObjC/commit/6945e8210d4044a1e4d246e227c9acc2ad086544) for what I mean.","created_at":"2018-10-28T07:39:40Z","updated_at":"2018-10-28T07:39:40Z","html_url":"https://github.com/Lightricks/ReactiveObjC/pull/24#discussion_r228737580","pull_request_url":"https://api.github.com/repos/Lightricks/ReactiveObjC/pulls/24","author_association":"MEMBER","_links":{"self":{"href":"https://api.github.com/repos/Lightricks/ReactiveObjC/pulls/comments/228737580"},"html":{"href":"https://github.com/Lightricks/ReactiveObjC/pull/24#discussion_r228737580"},"pull_request":{"href":"https://api.github.com/repos/Lightricks/ReactiveObjC/pulls/24"}},"in_reply_to_id":226867024},"pull_request":{"url":"https://api.github.com/repos/Lightricks/ReactiveObjC/pulls/24","id":224546426,"node_id":"MDExOlB1bGxSZXF1ZXN0MjI0NTQ2NDI2","html_url":"https://github.com/Lightricks/ReactiveObjC/pull/24","diff_url":"https://github.com/Lightricks/ReactiveObjC/pull/24.diff","patch_url":"https://github.com/Lightricks/ReactiveObjC/pull/24.patch","issue_url":"https://api.github.com/repos/Lightricks/ReactiveObjC/issues/24","number":24,"state":"open","locked":false,"title":"RACSignal+Operations: rewrite -switchToLatest without -takeUntil:.","user":{"login":"StatusReport","id":1927614,"node_id":"MDQ6VXNlcjE5Mjc2MTQ=","avatar_url":"https://avatars1.githubusercontent.com/u/1927614?v=4","gravatar_id":"","url":"https://api.github.com/users/StatusReport","html_url":"https://github.com/StatusReport","followers_url":"https://api.github.com/users/StatusReport/followers","following_url":"https://api.github.com/users/StatusReport/following{/other_user}","gists_url":"https://api.github.com/users/StatusReport/gists{/gist_id}","starred_url":"https://api.github.com/users/StatusReport/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/StatusReport/subscriptions","organizations_url":"https://api.github.com/users/StatusReport/orgs","repos_url":"https://api.github.com/users/StatusReport/repos","events_url":"https://api.github.com/users/StatusReport/events{/privacy}","received_events_url":"https://api.github.com/users/StatusReport/received_events","type":"User","site_admin":false},"body":"The current implementation of `-switchToLatest` uses the built in\r\n`-flattenMap:` and `-takeUntil:` operators. Besides performance\r\noverhead, there are inherent issues in the current implementation:\r\n\r\n1. The current active inner signal is not being disposed before a new\r\n   inner signal is activated and subscribed to (see test for a\r\n   reproduction).\r\n\r\n2. A race condition is possible if the inner and outer signals are\r\n   running on different schedulers. See this for more info:\r\n   https://github.com/ReactiveCocoa/ReactiveCocoa/issues/2781\r\n\r\nNote that while the new implementation solves (1), (2) cannot be\r\nhermetically solved until `RACPassthroughSubscriber` will enforce\r\ncorrect disposal of its inner subscription.\r\n\r\nThe performance of the new operator was tested both on Simulator and\r\niPhone X with the following code:\r\n\r\n```objc\r\nRACSubject *subject = [RACSubject subject];\r\nRACSignal *stl = [subject switchToLatest];\r\n\r\n[stl subscribeNext:^(id _Nullable) {\r\n}];\r\n\r\nfor (int i = 0; i < 1000; ++i) {\r\n  auto inner = [RACSubject subject];\r\n  [subject sendNext:inner];\r\n\r\n  for (int j = 0; j < 1000; ++j) {\r\n    [inner sendNext:@(j)];\r\n  }\r\n}\r\n```\r\n\r\nAnd the measurements:\r\n\r\nSimulator: 10028.4 ms (old) vs. 6670.07 ms (new) - 33% improvement.\r\niPhone X: 1407.5 ms (old vs. 903.832 ms (new) - 37% improvement.","created_at":"2018-10-21T14:49:01Z","updated_at":"2018-10-28T07:39:40Z","closed_at":null,"merged_at":null,"merge_commit_sha":"19e1bf0b87519d7d86e0cac071a13acd41fa5fb1","assignee":{"login":"barakyoresh","id":9588051,"node_id":"MDQ6VXNlcjk1ODgwNTE=","avatar_url":"https://avatars0.githubusercontent.com/u/9588051?v=4","gravatar_id":"","url":"https://api.github.com/users/barakyoresh","html_url":"https://github.com/barakyoresh","followers_url":"https://api.github.com/users/barakyoresh/followers","following_url":"https://api.github.com/users/barakyoresh/following{/other_user}","gists_url":"https://api.github.com/users/barakyoresh/gists{/gist_id}","starred_url":"https://api.github.com/users/barakyoresh/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/barakyoresh/subscriptions","organizations_url":"https://api.github.com/users/barakyoresh/orgs","repos_url":"https://api.github.com/users/barakyoresh/repos","events_url":"https://api.github.com/users/barakyoresh/events{/privacy}","received_events_url":"https://api.github.com/users/barakyoresh/received_events","type":"User","site_admin":false},"assignees":[{"login":"barakyoresh","id":9588051,"node_id":"MDQ6VXNlcjk1ODgwNTE=","avatar_url":"https://avatars0.githubusercontent.com/u/9588051?v=4","gravatar_id":"","url":"https://api.github.com/users/barakyoresh","html_url":"https://github.com/barakyoresh","followers_url":"https://api.github.com/users/barakyoresh/followers","following_url":"https://api.github.com/users/barakyoresh/following{/other_user}","gists_url":"https://api.github.com/users/barakyoresh/gists{/gist_id}","starred_url":"https://api.github.com/users/barakyoresh/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/barakyoresh/subscriptions","organizations_url":"https://api.github.com/users/barakyoresh/orgs","repos_url":"https://api.github.com/users/barakyoresh/repos","events_url":"https://api.github.com/users/barakyoresh/events{/privacy}","received_events_url":"https://api.github.com/users/barakyoresh/received_events","type":"User","site_admin":false}],"requested_reviewers":[],"requested_teams":[],"labels":[],"milestone":null,"commits_url":"https://api.github.com/repos/Lightricks/ReactiveObjC/pulls/24/commits","review_comments_url":"https://api.github.com/repos/Lightricks/ReactiveObjC/pulls/24/comments","review_comment_url":"https://api.github.com/repos/Lightricks/ReactiveObjC/pulls/comments{/number}","comments_url":"https://api.github.com/repos/Lightricks/ReactiveObjC/issues/24/comments","statuses_url":"https://api.github.com/repos/Lightricks/ReactiveObjC/statuses/cb3e96343228976cb4d307a6a9d40e018fc4abf4","head":{"label":"Lightricks:feature/switch-to-latest-dispose-inner-signal-first","ref":"feature/switch-to-latest-dispose-inner-signal-first","sha":"cb3e96343228976cb4d307a6a9d40e018fc4abf4","user":{"login":"Lightricks","id":3170348,"node_id":"MDEyOk9yZ2FuaXphdGlvbjMxNzAzNDg=","avatar_url":"https://avatars3.githubusercontent.com/u/3170348?v=4","gravatar_id":"","url":"https://api.github.com/users/Lightricks","html_url":"https://github.com/Lightricks","followers_url":"https://api.github.com/users/Lightricks/followers","following_url":"https://api.github.com/users/Lightricks/following{/other_user}","gists_url":"https://api.github.com/users/Lightricks/gists{/gist_id}","starred_url":"https://api.github.com/users/Lightricks/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/Lightricks/subscriptions","organizations_url":"https://api.github.com/users/Lightricks/orgs","repos_url":"https://api.github.com/users/Lightricks/repos","events_url":"https://api.github.com/users/Lightricks/events{/privacy}","received_events_url":"https://api.github.com/users/Lightricks/received_events","type":"Organization","site_admin":false},"repo":{"id":96330880,"node_id":"MDEwOlJlcG9zaXRvcnk5NjMzMDg4MA==","name":"ReactiveObjC","full_name":"Lightricks/ReactiveObjC","private":false,"owner":{"login":"Lightricks","id":3170348,"node_id":"MDEyOk9yZ2FuaXphdGlvbjMxNzAzNDg=","avatar_url":"https://avatars3.githubusercontent.com/u/3170348?v=4","gravatar_id":"","url":"https://api.github.com/users/Lightricks","html_url":"https://github.com/Lightricks","followers_url":"https://api.github.com/users/Lightricks/followers","following_url":"https://api.github.com/users/Lightricks/following{/other_user}","gists_url":"https://api.github.com/users/Lightricks/gists{/gist_id}","starred_url":"https://api.github.com/users/Lightricks/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/Lightricks/subscriptions","organizations_url":"https://api.github.com/users/Lightricks/orgs","repos_url":"https://api.github.com/users/Lightricks/repos","events_url":"https://api.github.com/users/Lightricks/events{/privacy}","received_events_url":"https://api.github.com/users/Lightricks/received_events","type":"Organization","site_admin":false},"html_url":"https://github.com/Lightricks/ReactiveObjC","description":"The 2.x ReactiveCocoa Objective-C API: Streams of values over time","fork":true,"url":"https://api.github.com/repos/Lightricks/ReactiveObjC","forks_url":"https://api.github.com/repos/Lightricks/ReactiveObjC/forks","keys_url":"https://api.github.com/repos/Lightricks/ReactiveObjC/keys{/key_id}","collaborators_url":"https://api.github.com/repos/Lightricks/ReactiveObjC/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/Lightricks/ReactiveObjC/teams","hooks_url":"https://api.github.com/repos/Lightricks/ReactiveObjC/hooks","issue_events_url":"https://api.github.com/repos/Lightricks/ReactiveObjC/issues/events{/number}","events_url":"https://api.github.com/repos/Lightricks/ReactiveObjC/events","assignees_url":"https://api.github.com/repos/Lightricks/ReactiveObjC/assignees{/user}","branches_url":"https://api.github.com/repos/Lightricks/ReactiveObjC/branches{/branch}","tags_url":"https://api.github.com/repos/Lightricks/ReactiveObjC/tags","blobs_url":"https://api.github.com/repos/Lightricks/ReactiveObjC/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/Lightricks/ReactiveObjC/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/Lightricks/ReactiveObjC/git/refs{/sha}","trees_url":"https://api.github.com/repos/Lightricks/ReactiveObjC/git/trees{/sha}","statuses_url":"https://api.github.com/repos/Lightricks/ReactiveObjC/statuses/{sha}","languages_url":"https://api.github.com/repos/Lightricks/ReactiveObjC/languages","stargazers_url":"https://api.github.com/repos/Lightricks/ReactiveObjC/stargazers","contributors_url":"https://api.github.com/repos/Lightricks/ReactiveObjC/contributors","subscribers_url":"https://api.github.com/repos/Lightricks/ReactiveObjC/subscribers","subscription_url":"https://api.github.com/repos/Lightricks/ReactiveObjC/subscription","commits_url":"https://api.github.com/repos/Lightricks/ReactiveObjC/commits{/sha}","git_commits_url":"https://api.github.com/repos/Lightricks/ReactiveObjC/git/commits{/sha}","comments_url":"https://api.github.com/repos/Lightricks/ReactiveObjC/comments{/number}","issue_comment_url":"https://api.github.com/repos/Lightricks/ReactiveObjC/issues/comments{/number}","contents_url":"https://api.github.com/repos/Lightricks/ReactiveObjC/contents/{+path}","compare_url":"https://api.github.com/repos/Lightricks/ReactiveObjC/compare/{base}...{head}","merges_url":"https://api.github.com/repos/Lightricks/ReactiveObjC/merges","archive_url":"https://api.github.com/repos/Lightricks/ReactiveObjC/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/Lightricks/ReactiveObjC/downloads","issues_url":"https://api.github.com/repos/Lightricks/ReactiveObjC/issues{/number}","pulls_url":"https://api.github.com/repos/Lightricks/ReactiveObjC/pulls{/number}","milestones_url":"https://api.github.com/repos/Lightricks/ReactiveObjC/milestones{/number}","notifications_url":"https://api.github.com/repos/Lightricks/ReactiveObjC/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/Lightricks/ReactiveObjC/labels{/name}","releases_url":"https://api.github.com/repos/Lightricks/ReactiveObjC/releases{/id}","deployments_url":"https://api.github.com/repos/Lightricks/ReactiveObjC/deployments","created_at":"2017-07-05T14:54:07Z","updated_at":"2018-10-27T19:06:24Z","pushed_at":"2018-10-28T07:38:21Z","git_url":"git://github.com/Lightricks/ReactiveObjC.git","ssh_url":"git@github.com:Lightricks/ReactiveObjC.git","clone_url":"https://github.com/Lightricks/ReactiveObjC.git","svn_url":"https://github.com/Lightricks/ReactiveObjC","homepage":null,"size":14396,"stargazers_count":1,"watchers_count":1,"language":"Objective-C","has_issues":false,"has_projects":true,"has_downloads":true,"has_wiki":false,"has_pages":false,"forks_count":3,"mirror_url":null,"archived":false,"open_issues_count":1,"license":{"key":"other","name":"Other","spdx_id":"NOASSERTION","url":null,"node_id":"MDc6TGljZW5zZTA="},"forks":3,"open_issues":1,"watchers":1,"default_branch":"master"}},"base":{"label":"Lightricks:master","ref":"master","sha":"fb1551a06d37a8dc6702f4835bf9a0acaa7c9e24","user":{"login":"Lightricks","id":3170348,"node_id":"MDEyOk9yZ2FuaXphdGlvbjMxNzAzNDg=","avatar_url":"https://avatars3.githubusercontent.com/u/3170348?v=4","gravatar_id":"","url":"https://api.github.com/users/Lightricks","html_url":"https://github.com/Lightricks","followers_url":"https://api.github.com/users/Lightricks/followers","following_url":"https://api.github.com/users/Lightricks/following{/other_user}","gists_url":"https://api.github.com/users/Lightricks/gists{/gist_id}","starred_url":"https://api.github.com/users/Lightricks/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/Lightricks/subscriptions","organizations_url":"https://api.github.com/users/Lightricks/orgs","repos_url":"https://api.github.com/users/Lightricks/repos","events_url":"https://api.github.com/users/Lightricks/events{/privacy}","received_events_url":"https://api.github.com/users/Lightricks/received_events","type":"Organization","site_admin":false},"repo":{"id":96330880,"node_id":"MDEwOlJlcG9zaXRvcnk5NjMzMDg4MA==","name":"ReactiveObjC","full_name":"Lightricks/ReactiveObjC","private":false,"owner":{"login":"Lightricks","id":3170348,"node_id":"MDEyOk9yZ2FuaXphdGlvbjMxNzAzNDg=","avatar_url":"https://avatars3.githubusercontent.com/u/3170348?v=4","gravatar_id":"","url":"https://api.github.com/users/Lightricks","html_url":"https://github.com/Lightricks","followers_url":"https://api.github.com/users/Lightricks/followers","following_url":"https://api.github.com/users/Lightricks/following{/other_user}","gists_url":"https://api.github.com/users/Lightricks/gists{/gist_id}","starred_url":"https://api.github.com/users/Lightricks/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/Lightricks/subscriptions","organizations_url":"https://api.github.com/users/Lightricks/orgs","repos_url":"https://api.github.com/users/Lightricks/repos","events_url":"https://api.github.com/users/Lightricks/events{/privacy}","received_events_url":"https://api.github.com/users/Lightricks/received_events","type":"Organization","site_admin":false},"html_url":"https://github.com/Lightricks/ReactiveObjC","description":"The 2.x ReactiveCocoa Objective-C API: Streams of values over time","fork":true,"url":"https://api.github.com/repos/Lightricks/ReactiveObjC","forks_url":"https://api.github.com/repos/Lightricks/ReactiveObjC/forks","keys_url":"https://api.github.com/repos/Lightricks/ReactiveObjC/keys{/key_id}","collaborators_url":"https://api.github.com/repos/Lightricks/ReactiveObjC/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/Lightricks/ReactiveObjC/teams","hooks_url":"https://api.github.com/repos/Lightricks/ReactiveObjC/hooks","issue_events_url":"https://api.github.com/repos/Lightricks/ReactiveObjC/issues/events{/number}","events_url":"https://api.github.com/repos/Lightricks/ReactiveObjC/events","assignees_url":"https://api.github.com/repos/Lightricks/ReactiveObjC/assignees{/user}","branches_url":"https://api.github.com/repos/Lightricks/ReactiveObjC/branches{/branch}","tags_url":"https://api.github.com/repos/Lightricks/ReactiveObjC/tags","blobs_url":"https://api.github.com/repos/Lightricks/ReactiveObjC/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/Lightricks/ReactiveObjC/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/Lightricks/ReactiveObjC/git/refs{/sha}","trees_url":"https://api.github.com/repos/Lightricks/ReactiveObjC/git/trees{/sha}","statuses_url":"https://api.github.com/repos/Lightricks/ReactiveObjC/statuses/{sha}","languages_url":"https://api.github.com/repos/Lightricks/ReactiveObjC/languages","stargazers_url":"https://api.github.com/repos/Lightricks/ReactiveObjC/stargazers","contributors_url":"https://api.github.com/repos/Lightricks/ReactiveObjC/contributors","subscribers_url":"https://api.github.com/repos/Lightricks/ReactiveObjC/subscribers","subscription_url":"https://api.github.com/repos/Lightricks/ReactiveObjC/subscription","commits_url":"https://api.github.com/repos/Lightricks/ReactiveObjC/commits{/sha}","git_commits_url":"https://api.github.com/repos/Lightricks/ReactiveObjC/git/commits{/sha}","comments_url":"https://api.github.com/repos/Lightricks/ReactiveObjC/comments{/number}","issue_comment_url":"https://api.github.com/repos/Lightricks/ReactiveObjC/issues/comments{/number}","contents_url":"https://api.github.com/repos/Lightricks/ReactiveObjC/contents/{+path}","compare_url":"https://api.github.com/repos/Lightricks/ReactiveObjC/compare/{base}...{head}","merges_url":"https://api.github.com/repos/Lightricks/ReactiveObjC/merges","archive_url":"https://api.github.com/repos/Lightricks/ReactiveObjC/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/Lightricks/ReactiveObjC/downloads","issues_url":"https://api.github.com/repos/Lightricks/ReactiveObjC/issues{/number}","pulls_url":"https://api.github.com/repos/Lightricks/ReactiveObjC/pulls{/number}","milestones_url":"https://api.github.com/repos/Lightricks/ReactiveObjC/milestones{/number}","notifications_url":"https://api.github.com/repos/Lightricks/ReactiveObjC/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/Lightricks/ReactiveObjC/labels{/name}","releases_url":"https://api.github.com/repos/Lightricks/ReactiveObjC/releases{/id}","deployments_url":"https://api.github.com/repos/Lightricks/ReactiveObjC/deployments","created_at":"2017-07-05T14:54:07Z","updated_at":"2018-10-27T19:06:24Z","pushed_at":"2018-10-28T07:38:21Z","git_url":"git://github.com/Lightricks/ReactiveObjC.git","ssh_url":"git@github.com:Lightricks/ReactiveObjC.git","clone_url":"https://github.com/Lightricks/ReactiveObjC.git","svn_url":"https://github.com/Lightricks/ReactiveObjC","homepage":null,"size":14396,"stargazers_count":1,"watchers_count":1,"language":"Objective-C","has_issues":false,"has_projects":true,"has_downloads":true,"has_wiki":false,"has_pages":false,"forks_count":3,"mirror_url":null,"archived":false,"open_issues_count":1,"license":{"key":"other","name":"Other","spdx_id":"NOASSERTION","url":null,"node_id":"MDc6TGljZW5zZTA="},"forks":3,"open_issues":1,"watchers":1,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/Lightricks/ReactiveObjC/pulls/24"},"html":{"href":"https://github.com/Lightricks/ReactiveObjC/pull/24"},"issue":{"href":"https://api.github.com/repos/Lightricks/ReactiveObjC/issues/24"},"comments":{"href":"https://api.github.com/repos/Lightricks/ReactiveObjC/issues/24/comments"},"review_comments":{"href":"https://api.github.com/repos/Lightricks/ReactiveObjC/pulls/24/comments"},"review_comment":{"href":"https://api.github.com/repos/Lightricks/ReactiveObjC/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/Lightricks/ReactiveObjC/pulls/24/commits"},"statuses":{"href":"https://api.github.com/repos/Lightricks/ReactiveObjC/statuses/cb3e96343228976cb4d307a6a9d40e018fc4abf4"}},"author_association":"MEMBER"}}
{"actor":{"display_login":"Shachlan"}}