{"action":"created","comment":{"url":"https://api.github.com/repos/ReactiveCocoa/ReactiveCocoa/pulls/comments/39353141","id":39353141,"diff_hunk":"@@ -243,6 +243,324 @@ extension SignalType {\n \t}\n }\n \n+/// Describes how multiple producers should be joined together.\n+public enum FlattenStrategy: Equatable {\n+\t/// The producers should be merged, so that any value received on any of the\n+\t/// input producers will be forwarded immediately to the output producer.\n+\t///\n+\t/// The resulting producer will complete only when all inputs have completed.\n+\tcase Merge\n+\n+\t/// The producers should be concatenated, so that their values are sent in the\n+\t/// order of the producers themselves.\n+\t///\n+\t/// The resulting producer will complete only when all inputs have completed.\n+\tcase Concat\n+\n+\t/// Only the events from the latest input producer should be considered for\n+\t/// the output. Any producers received before that point will be disposed of.\n+\t///\n+\t/// The resulting producer will complete only when the producer-of-producers and\n+\t/// the latest producer has completed.\n+\tcase Latest\n+}\n+\n+extension Signal where T: SignalProducerType, E == T.E {\n+\t/// Flattens the inner producers sent upon `signal` (into a single signal of\n+\t/// values), according to the semantics of the given strategy.\n+\t///\n+\t/// If `signal` or an active inner producer emits an error, the returned\n+\t/// signal will forward that error immediately.\n+\t///\n+\t/// `Interrupted` events on inner producers will be treated like `Completed`\n+\t/// events on inner producers.\n+\t@warn_unused_result(message=\"Did you forget to call `observe` on the signal?\")\n+\tpublic func flatten(strategy: FlattenStrategy) -> Signal<T.T, E> {\n+\t\tswitch strategy {\n+\t\tcase .Merge:\n+\t\t\treturn signal.merge()\n+\n+\t\tcase .Concat:\n+\t\t\treturn signal.concat()\n+\n+\t\tcase .Latest:\n+\t\t\treturn signal.switchToLatest()\n+\t\t}\n+\t}\n+}\n+\n+extension Signal where T: SignalProducerType, E == T.E {\n+\t/// Returns a signal which sends all the values from producer signal emitted from\n+\t/// `signal`, waiting until each inner producer completes before beginning to\n+\t/// send the values from the next inner producer.\n+\t///\n+\t/// If any of the inner producers emit an error, the returned signal will emit\n+\t/// that error.\n+\t///\n+\t/// The returned signal completes only when `signal` and all producers\n+\t/// emitted from `signal` complete.\n+\t@warn_unused_result(message=\"Did you forget to call `observe` on the signal?\")\n+\tprivate func concat() -> Signal<T.T, E> {\n+\t\treturn Signal<T.T, E> { [signal = self.signal] observer in\n+\t\t\tlet disposable = CompositeDisposable()\n+\t\t\tlet state = ConcatState(observer: observer, disposable: disposable)\n+\n+\t\t\tdisposable += signal.observe { event in\n+\t\t\t\tswitch event {\n+\t\t\t\tcase .Next(let value):\n+\t\t\t\t\tstate.enqueueSignalProducer(value.producer)\n+\t\t\t\t\tbreak\n+\n+\t\t\t\tcase .Error(let error):\n+\t\t\t\t\tsendError(observer, error)\n+\n+\t\t\t\tcase .Completed:\n+\t\t\t\t\t// Add one last producer to the queue, whose sole job is to\n+\t\t\t\t\t// \"turn out the lights\" by completing `observer`.\n+\t\t\t\t\tlet completion: SignalProducer<T.T, E> = SignalProducer<T.T, E>\n+\t\t\t\t\t\t.empty\n+\t\t\t\t\t\t.on(completed: {\n+\t\t\t\t\t\t\tsendCompleted(observer)\n+\t\t\t\t\t\t})\n+\n+\t\t\t\t\tstate.enqueueSignalProducer(completion)\n+\t\t\t\t\tbreak\n+\n+\t\t\t\tcase .Interrupted:\n+\t\t\t\t\tsendInterrupted(observer)\n+\t\t\t\t}\n+\t\t\t}\n+\n+\t\t\treturn disposable\n+\t\t}\n+\t}\n+}\n+\n+private final class ConcatState<T, E: ErrorType> {\n+\t/// The observer of a started `concat` producer.\n+\tlet observer: Signal<T, E>.Observer\n+\n+\t/// The top level disposable of a started `concat` producer.\n+\tlet disposable: CompositeDisposable\n+\n+\t/// The active producer, if any, and the producers waiting to be started.\n+\tlet queuedSignalProducers: Atomic<[SignalProducer<T, E>]> = Atomic([])\n+\n+\tinit(observer: Signal<T, E>.Observer, disposable: CompositeDisposable) {\n+\t\tself.observer = observer\n+\t\tself.disposable = disposable\n+\t}\n+\n+\tfunc enqueueSignalProducer(producer: SignalProducer<T, E>) {\n+\t\tif disposable.disposed {\n+\t\t\treturn\n+\t\t}\n+\n+\t\tvar shouldStart = true\n+\n+\t\tqueuedSignalProducers.modify { (var queue) in\n+\t\t\t// An empty queue means the concat is idle, ready & waiting to start\n+\t\t\t// the next producer.\n+\t\t\tshouldStart = queue.isEmpty\n+\t\t\tqueue.append(producer)\n+\t\t\treturn queue\n+\t\t}\n+\n+\t\tif shouldStart {\n+\t\t\tstartNextSignalProducer(producer)\n+\t\t}\n+\t}\n+\n+\tfunc dequeueSignalProducer() -> SignalProducer<T, E>? {\n+\t\tif disposable.disposed {\n+\t\t\treturn nil\n+\t\t}\n+\n+\t\tvar nextSignalProducer: SignalProducer<T, E>?\n+\n+\t\tqueuedSignalProducers.modify { (var queue) in\n+\t\t\t// Active producers remain in the queue until completed. Since\n+\t\t\t// dequeueing happens at completion of the active producer, the\n+\t\t\t// first producer in the queue can be removed.\n+\t\t\tif !queue.isEmpty { queue.removeAtIndex(0) }\n+\t\t\tnextSignalProducer = queue.first\n+\t\t\treturn queue\n+\t\t}\n+\n+\t\treturn nextSignalProducer\n+\t}\n+\n+\t/// Subscribes to the given signal producer.\n+\tfunc startNextSignalProducer(signalProducer: SignalProducer<T, E>) {\n+\t\tsignalProducer.startWithSignal { signal, disposable in\n+\t\t\tlet handle = self.disposable.addDisposable(disposable)\n+\n+\t\t\tsignal.observe { event in\n+\t\t\t\tswitch event {\n+\t\t\t\tcase .Completed, .Interrupted:\n+\t\t\t\t\thandle.remove()\n+\n+\t\t\t\t\tif let nextSignalProducer = self.dequeueSignalProducer() {\n+\t\t\t\t\t\tself.startNextSignalProducer(nextSignalProducer)\n+\t\t\t\t\t}\n+\n+\t\t\t\tdefault:\n+\t\t\t\t\tself.observer(event)\n+\t\t\t\t}\n+\t\t\t}\n+\t\t}\n+\t}\n+}\n+\n+extension Signal where T: SignalProducerType, E == T.E {\n+\t/// Merges a `signal` of SignalProducers down into a single signal, biased toward the producer\n+\t/// added earlier. Returns a Signal that will forward events from the inner producers as they arrive.\n+\t@warn_unused_result(message=\"Did you forget to call `start` on the producer?\")\n+\tprivate func merge() -> Signal<T.T, E> {\n+\t\treturn Signal<T.T, E> { [signal = self.signal] relayObserver in\n+\t\t\tlet inFlight = Atomic(1)\n+\t\t\tlet decrementInFlight: () -> () = {\n+\t\t\t\tlet orig = inFlight.modify { $0 - 1 }\n+\t\t\t\tif orig == 1 {\n+\t\t\t\t\tsendCompleted(relayObserver)\n+\t\t\t\t}\n+\t\t\t}\n+\n+\t\t\tlet disposable = CompositeDisposable()\n+\t\t\tsignal.observe { event in\n+\t\t\t\tswitch event {\n+\t\t\t\tcase .Next(let producer):","path":"ReactiveCocoa/Swift/Signal.swift","position":190,"original_position":190,"commit_id":"100069f7abc0bafaaf46525d75035c9f032bf999","original_commit_id":"100069f7abc0bafaaf46525d75035c9f032bf999","user":{"login":"neilpa","id":42419,"avatar_url":"https://avatars.githubusercontent.com/u/42419?v=3","gravatar_id":"","url":"https://api.github.com/users/neilpa","html_url":"https://github.com/neilpa","followers_url":"https://api.github.com/users/neilpa/followers","following_url":"https://api.github.com/users/neilpa/following{/other_user}","gists_url":"https://api.github.com/users/neilpa/gists{/gist_id}","starred_url":"https://api.github.com/users/neilpa/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/neilpa/subscriptions","organizations_url":"https://api.github.com/users/neilpa/orgs","repos_url":"https://api.github.com/users/neilpa/repos","events_url":"https://api.github.com/users/neilpa/events{/privacy}","received_events_url":"https://api.github.com/users/neilpa/received_events","type":"User","site_admin":false},"body":"move `let`","created_at":"2015-09-13T22:23:23Z","updated_at":"2015-09-13T22:23:23Z","html_url":"https://github.com/ReactiveCocoa/ReactiveCocoa/pull/2350#discussion_r39353141","pull_request_url":"https://api.github.com/repos/ReactiveCocoa/ReactiveCocoa/pulls/2350","_links":{"self":{"href":"https://api.github.com/repos/ReactiveCocoa/ReactiveCocoa/pulls/comments/39353141"},"html":{"href":"https://github.com/ReactiveCocoa/ReactiveCocoa/pull/2350#discussion_r39353141"},"pull_request":{"href":"https://api.github.com/repos/ReactiveCocoa/ReactiveCocoa/pulls/2350"}}},"pull_request":{"url":"https://api.github.com/repos/ReactiveCocoa/ReactiveCocoa/pulls/2350","id":44881608,"html_url":"https://github.com/ReactiveCocoa/ReactiveCocoa/pull/2350","diff_url":"https://github.com/ReactiveCocoa/ReactiveCocoa/pull/2350.diff","patch_url":"https://github.com/ReactiveCocoa/ReactiveCocoa/pull/2350.patch","issue_url":"https://api.github.com/repos/ReactiveCocoa/ReactiveCocoa/issues/2350","number":2350,"state":"open","locked":false,"title":"Moved FlattenStrategy to Signal to re-enable flatten over signals of producers","user":{"login":"NachoSoto","id":685609,"avatar_url":"https://avatars.githubusercontent.com/u/685609?v=3","gravatar_id":"","url":"https://api.github.com/users/NachoSoto","html_url":"https://github.com/NachoSoto","followers_url":"https://api.github.com/users/NachoSoto/followers","following_url":"https://api.github.com/users/NachoSoto/following{/other_user}","gists_url":"https://api.github.com/users/NachoSoto/gists{/gist_id}","starred_url":"https://api.github.com/users/NachoSoto/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/NachoSoto/subscriptions","organizations_url":"https://api.github.com/users/NachoSoto/orgs","repos_url":"https://api.github.com/users/NachoSoto/repos","events_url":"https://api.github.com/users/NachoSoto/events{/privacy}","received_events_url":"https://api.github.com/users/NachoSoto/received_events","type":"User","site_admin":false},"body":"Fixes #2315\r\n\r\nI'll have to rebase after #2349 if I'm not fast enough :P","created_at":"2015-09-13T21:44:54Z","updated_at":"2015-09-13T22:23:23Z","closed_at":null,"merged_at":null,"merge_commit_sha":"3a19f009d3b141ffaa91fef7a2f1ad048951cb99","assignee":null,"milestone":{"url":"https://api.github.com/repos/ReactiveCocoa/ReactiveCocoa/milestones/5","html_url":"https://github.com/ReactiveCocoa/ReactiveCocoa/milestones/4.0","labels_url":"https://api.github.com/repos/ReactiveCocoa/ReactiveCocoa/milestones/5/labels","id":1167095,"number":5,"title":"4.0","description":"RAC4 targeting Swift 2","creator":{"login":"neilpa","id":42419,"avatar_url":"https://avatars.githubusercontent.com/u/42419?v=3","gravatar_id":"","url":"https://api.github.com/users/neilpa","html_url":"https://github.com/neilpa","followers_url":"https://api.github.com/users/neilpa/followers","following_url":"https://api.github.com/users/neilpa/following{/other_user}","gists_url":"https://api.github.com/users/neilpa/gists{/gist_id}","starred_url":"https://api.github.com/users/neilpa/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/neilpa/subscriptions","organizations_url":"https://api.github.com/users/neilpa/orgs","repos_url":"https://api.github.com/users/neilpa/repos","events_url":"https://api.github.com/users/neilpa/events{/privacy}","received_events_url":"https://api.github.com/users/neilpa/received_events","type":"User","site_admin":false},"open_issues":10,"closed_issues":24,"state":"open","created_at":"2015-06-16T16:34:39Z","updated_at":"2015-09-13T21:46:44Z","due_on":null,"closed_at":null},"commits_url":"https://api.github.com/repos/ReactiveCocoa/ReactiveCocoa/pulls/2350/commits","review_comments_url":"https://api.github.com/repos/ReactiveCocoa/ReactiveCocoa/pulls/2350/comments","review_comment_url":"https://api.github.com/repos/ReactiveCocoa/ReactiveCocoa/pulls/comments{/number}","comments_url":"https://api.github.com/repos/ReactiveCocoa/ReactiveCocoa/issues/2350/comments","statuses_url":"https://api.github.com/repos/ReactiveCocoa/ReactiveCocoa/statuses/100069f7abc0bafaaf46525d75035c9f032bf999","head":{"label":"NachoSoto:flatten-for-signal","ref":"flatten-for-signal","sha":"100069f7abc0bafaaf46525d75035c9f032bf999","user":{"login":"NachoSoto","id":685609,"avatar_url":"https://avatars.githubusercontent.com/u/685609?v=3","gravatar_id":"","url":"https://api.github.com/users/NachoSoto","html_url":"https://github.com/NachoSoto","followers_url":"https://api.github.com/users/NachoSoto/followers","following_url":"https://api.github.com/users/NachoSoto/following{/other_user}","gists_url":"https://api.github.com/users/NachoSoto/gists{/gist_id}","starred_url":"https://api.github.com/users/NachoSoto/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/NachoSoto/subscriptions","organizations_url":"https://api.github.com/users/NachoSoto/orgs","repos_url":"https://api.github.com/users/NachoSoto/repos","events_url":"https://api.github.com/users/NachoSoto/events{/privacy}","received_events_url":"https://api.github.com/users/NachoSoto/received_events","type":"User","site_admin":false},"repo":{"id":30810172,"name":"ReactiveCocoa","full_name":"NachoSoto/ReactiveCocoa","owner":{"login":"NachoSoto","id":685609,"avatar_url":"https://avatars.githubusercontent.com/u/685609?v=3","gravatar_id":"","url":"https://api.github.com/users/NachoSoto","html_url":"https://github.com/NachoSoto","followers_url":"https://api.github.com/users/NachoSoto/followers","following_url":"https://api.github.com/users/NachoSoto/following{/other_user}","gists_url":"https://api.github.com/users/NachoSoto/gists{/gist_id}","starred_url":"https://api.github.com/users/NachoSoto/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/NachoSoto/subscriptions","organizations_url":"https://api.github.com/users/NachoSoto/orgs","repos_url":"https://api.github.com/users/NachoSoto/repos","events_url":"https://api.github.com/users/NachoSoto/events{/privacy}","received_events_url":"https://api.github.com/users/NachoSoto/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/NachoSoto/ReactiveCocoa","description":"A framework for composing and transforming streams of values","fork":true,"url":"https://api.github.com/repos/NachoSoto/ReactiveCocoa","forks_url":"https://api.github.com/repos/NachoSoto/ReactiveCocoa/forks","keys_url":"https://api.github.com/repos/NachoSoto/ReactiveCocoa/keys{/key_id}","collaborators_url":"https://api.github.com/repos/NachoSoto/ReactiveCocoa/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/NachoSoto/ReactiveCocoa/teams","hooks_url":"https://api.github.com/repos/NachoSoto/ReactiveCocoa/hooks","issue_events_url":"https://api.github.com/repos/NachoSoto/ReactiveCocoa/issues/events{/number}","events_url":"https://api.github.com/repos/NachoSoto/ReactiveCocoa/events","assignees_url":"https://api.github.com/repos/NachoSoto/ReactiveCocoa/assignees{/user}","branches_url":"https://api.github.com/repos/NachoSoto/ReactiveCocoa/branches{/branch}","tags_url":"https://api.github.com/repos/NachoSoto/ReactiveCocoa/tags","blobs_url":"https://api.github.com/repos/NachoSoto/ReactiveCocoa/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/NachoSoto/ReactiveCocoa/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/NachoSoto/ReactiveCocoa/git/refs{/sha}","trees_url":"https://api.github.com/repos/NachoSoto/ReactiveCocoa/git/trees{/sha}","statuses_url":"https://api.github.com/repos/NachoSoto/ReactiveCocoa/statuses/{sha}","languages_url":"https://api.github.com/repos/NachoSoto/ReactiveCocoa/languages","stargazers_url":"https://api.github.com/repos/NachoSoto/ReactiveCocoa/stargazers","contributors_url":"https://api.github.com/repos/NachoSoto/ReactiveCocoa/contributors","subscribers_url":"https://api.github.com/repos/NachoSoto/ReactiveCocoa/subscribers","subscription_url":"https://api.github.com/repos/NachoSoto/ReactiveCocoa/subscription","commits_url":"https://api.github.com/repos/NachoSoto/ReactiveCocoa/commits{/sha}","git_commits_url":"https://api.github.com/repos/NachoSoto/ReactiveCocoa/git/commits{/sha}","comments_url":"https://api.github.com/repos/NachoSoto/ReactiveCocoa/comments{/number}","issue_comment_url":"https://api.github.com/repos/NachoSoto/ReactiveCocoa/issues/comments{/number}","contents_url":"https://api.github.com/repos/NachoSoto/ReactiveCocoa/contents/{+path}","compare_url":"https://api.github.com/repos/NachoSoto/ReactiveCocoa/compare/{base}...{head}","merges_url":"https://api.github.com/repos/NachoSoto/ReactiveCocoa/merges","archive_url":"https://api.github.com/repos/NachoSoto/ReactiveCocoa/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/NachoSoto/ReactiveCocoa/downloads","issues_url":"https://api.github.com/repos/NachoSoto/ReactiveCocoa/issues{/number}","pulls_url":"https://api.github.com/repos/NachoSoto/ReactiveCocoa/pulls{/number}","milestones_url":"https://api.github.com/repos/NachoSoto/ReactiveCocoa/milestones{/number}","notifications_url":"https://api.github.com/repos/NachoSoto/ReactiveCocoa/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/NachoSoto/ReactiveCocoa/labels{/name}","releases_url":"https://api.github.com/repos/NachoSoto/ReactiveCocoa/releases{/id}","created_at":"2015-02-14T22:03:23Z","updated_at":"2015-02-14T22:03:25Z","pushed_at":"2015-09-13T22:12:21Z","git_url":"git://github.com/NachoSoto/ReactiveCocoa.git","ssh_url":"git@github.com:NachoSoto/ReactiveCocoa.git","clone_url":"https://github.com/NachoSoto/ReactiveCocoa.git","svn_url":"https://github.com/NachoSoto/ReactiveCocoa","homepage":"","size":14065,"stargazers_count":0,"watchers_count":0,"language":"Objective-C","has_issues":false,"has_downloads":true,"has_wiki":false,"has_pages":false,"forks_count":0,"mirror_url":null,"open_issues_count":0,"forks":0,"open_issues":0,"watchers":0,"default_branch":"master"}},"base":{"label":"ReactiveCocoa:swift2","ref":"swift2","sha":"6b617c004d0e690e554caa9a9b8dd8e81ddd8f52","user":{"login":"ReactiveCocoa","id":3422977,"avatar_url":"https://avatars.githubusercontent.com/u/3422977?v=3","gravatar_id":"","url":"https://api.github.com/users/ReactiveCocoa","html_url":"https://github.com/ReactiveCocoa","followers_url":"https://api.github.com/users/ReactiveCocoa/followers","following_url":"https://api.github.com/users/ReactiveCocoa/following{/other_user}","gists_url":"https://api.github.com/users/ReactiveCocoa/gists{/gist_id}","starred_url":"https://api.github.com/users/ReactiveCocoa/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/ReactiveCocoa/subscriptions","organizations_url":"https://api.github.com/users/ReactiveCocoa/orgs","repos_url":"https://api.github.com/users/ReactiveCocoa/repos","events_url":"https://api.github.com/users/ReactiveCocoa/events{/privacy}","received_events_url":"https://api.github.com/users/ReactiveCocoa/received_events","type":"Organization","site_admin":false},"repo":{"id":3606624,"name":"ReactiveCocoa","full_name":"ReactiveCocoa/ReactiveCocoa","owner":{"login":"ReactiveCocoa","id":3422977,"avatar_url":"https://avatars.githubusercontent.com/u/3422977?v=3","gravatar_id":"","url":"https://api.github.com/users/ReactiveCocoa","html_url":"https://github.com/ReactiveCocoa","followers_url":"https://api.github.com/users/ReactiveCocoa/followers","following_url":"https://api.github.com/users/ReactiveCocoa/following{/other_user}","gists_url":"https://api.github.com/users/ReactiveCocoa/gists{/gist_id}","starred_url":"https://api.github.com/users/ReactiveCocoa/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/ReactiveCocoa/subscriptions","organizations_url":"https://api.github.com/users/ReactiveCocoa/orgs","repos_url":"https://api.github.com/users/ReactiveCocoa/repos","events_url":"https://api.github.com/users/ReactiveCocoa/events{/privacy}","received_events_url":"https://api.github.com/users/ReactiveCocoa/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/ReactiveCocoa/ReactiveCocoa","description":"Streams of values over time","fork":false,"url":"https://api.github.com/repos/ReactiveCocoa/ReactiveCocoa","forks_url":"https://api.github.com/repos/ReactiveCocoa/ReactiveCocoa/forks","keys_url":"https://api.github.com/repos/ReactiveCocoa/ReactiveCocoa/keys{/key_id}","collaborators_url":"https://api.github.com/repos/ReactiveCocoa/ReactiveCocoa/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/ReactiveCocoa/ReactiveCocoa/teams","hooks_url":"https://api.github.com/repos/ReactiveCocoa/ReactiveCocoa/hooks","issue_events_url":"https://api.github.com/repos/ReactiveCocoa/ReactiveCocoa/issues/events{/number}","events_url":"https://api.github.com/repos/ReactiveCocoa/ReactiveCocoa/events","assignees_url":"https://api.github.com/repos/ReactiveCocoa/ReactiveCocoa/assignees{/user}","branches_url":"https://api.github.com/repos/ReactiveCocoa/ReactiveCocoa/branches{/branch}","tags_url":"https://api.github.com/repos/ReactiveCocoa/ReactiveCocoa/tags","blobs_url":"https://api.github.com/repos/ReactiveCocoa/ReactiveCocoa/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/ReactiveCocoa/ReactiveCocoa/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/ReactiveCocoa/ReactiveCocoa/git/refs{/sha}","trees_url":"https://api.github.com/repos/ReactiveCocoa/ReactiveCocoa/git/trees{/sha}","statuses_url":"https://api.github.com/repos/ReactiveCocoa/ReactiveCocoa/statuses/{sha}","languages_url":"https://api.github.com/repos/ReactiveCocoa/ReactiveCocoa/languages","stargazers_url":"https://api.github.com/repos/ReactiveCocoa/ReactiveCocoa/stargazers","contributors_url":"https://api.github.com/repos/ReactiveCocoa/ReactiveCocoa/contributors","subscribers_url":"https://api.github.com/repos/ReactiveCocoa/ReactiveCocoa/subscribers","subscription_url":"https://api.github.com/repos/ReactiveCocoa/ReactiveCocoa/subscription","commits_url":"https://api.github.com/repos/ReactiveCocoa/ReactiveCocoa/commits{/sha}","git_commits_url":"https://api.github.com/repos/ReactiveCocoa/ReactiveCocoa/git/commits{/sha}","comments_url":"https://api.github.com/repos/ReactiveCocoa/ReactiveCocoa/comments{/number}","issue_comment_url":"https://api.github.com/repos/ReactiveCocoa/ReactiveCocoa/issues/comments{/number}","contents_url":"https://api.github.com/repos/ReactiveCocoa/ReactiveCocoa/contents/{+path}","compare_url":"https://api.github.com/repos/ReactiveCocoa/ReactiveCocoa/compare/{base}...{head}","merges_url":"https://api.github.com/repos/ReactiveCocoa/ReactiveCocoa/merges","archive_url":"https://api.github.com/repos/ReactiveCocoa/ReactiveCocoa/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/ReactiveCocoa/ReactiveCocoa/downloads","issues_url":"https://api.github.com/repos/ReactiveCocoa/ReactiveCocoa/issues{/number}","pulls_url":"https://api.github.com/repos/ReactiveCocoa/ReactiveCocoa/pulls{/number}","milestones_url":"https://api.github.com/repos/ReactiveCocoa/ReactiveCocoa/milestones{/number}","notifications_url":"https://api.github.com/repos/ReactiveCocoa/ReactiveCocoa/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/ReactiveCocoa/ReactiveCocoa/labels{/name}","releases_url":"https://api.github.com/repos/ReactiveCocoa/ReactiveCocoa/releases{/id}","created_at":"2012-03-02T22:11:24Z","updated_at":"2015-09-13T06:41:56Z","pushed_at":"2015-09-13T22:12:22Z","git_url":"git://github.com/ReactiveCocoa/ReactiveCocoa.git","ssh_url":"git@github.com:ReactiveCocoa/ReactiveCocoa.git","clone_url":"https://github.com/ReactiveCocoa/ReactiveCocoa.git","svn_url":"https://github.com/ReactiveCocoa/ReactiveCocoa","homepage":"","size":28481,"stargazers_count":10124,"watchers_count":10124,"language":"Objective-C","has_issues":true,"has_downloads":true,"has_wiki":false,"has_pages":false,"forks_count":1676,"mirror_url":null,"open_issues_count":161,"forks":1676,"open_issues":161,"watchers":10124,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/ReactiveCocoa/ReactiveCocoa/pulls/2350"},"html":{"href":"https://github.com/ReactiveCocoa/ReactiveCocoa/pull/2350"},"issue":{"href":"https://api.github.com/repos/ReactiveCocoa/ReactiveCocoa/issues/2350"},"comments":{"href":"https://api.github.com/repos/ReactiveCocoa/ReactiveCocoa/issues/2350/comments"},"review_comments":{"href":"https://api.github.com/repos/ReactiveCocoa/ReactiveCocoa/pulls/2350/comments"},"review_comment":{"href":"https://api.github.com/repos/ReactiveCocoa/ReactiveCocoa/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/ReactiveCocoa/ReactiveCocoa/pulls/2350/commits"},"statuses":{"href":"https://api.github.com/repos/ReactiveCocoa/ReactiveCocoa/statuses/100069f7abc0bafaaf46525d75035c9f032bf999"}}}}