{"action":"created","comment":{"url":"https://api.github.com/repos/FriendsOfSymfony/FOSHttpCache/pulls/comments/32369902","id":32369902,"diff_hunk":"@@ -0,0 +1,221 @@\n+<?php\n+\n+/*\n+ * This file is part of the FOSHttpCache package.\n+ *\n+ * (c) FriendsOfSymfony <http://friendsofsymfony.github.com/>\n+ *\n+ * For the full copyright and license information, please view the LICENSE\n+ * file that was distributed with this source code.\n+ */\n+\n+namespace FOS\\HttpCache\\ProxyClient\\Request;\n+\n+use FOS\\HttpCache\\Exception\\InvalidUrlException;\n+use Http\\Discovery\\UriFactoryDiscovery;\n+use Psr\\Http\\Message\\RequestInterface;\n+use Psr\\Http\\Message\\UriInterface;\n+\n+/**\n+ * Stores each invalidation request and replicates it over all HTTP cache servers\n+ *\n+ * @author David de Boer <david@ddeboer.nl>\n+ */\n+class RequestQueue implements \\Countable","path":"src/ProxyClient/Request/RequestQueue.php","position":24,"original_position":24,"commit_id":"59fcc6f859cb71074e86da2cc75cfd8d7ca34f7d","original_commit_id":"59fcc6f859cb71074e86da2cc75cfd8d7ca34f7d","user":{"login":"dbu","id":76576,"avatar_url":"https://avatars.githubusercontent.com/u/76576?v=3","gravatar_id":"","url":"https://api.github.com/users/dbu","html_url":"https://github.com/dbu","followers_url":"https://api.github.com/users/dbu/followers","following_url":"https://api.github.com/users/dbu/following{/other_user}","gists_url":"https://api.github.com/users/dbu/gists{/gist_id}","starred_url":"https://api.github.com/users/dbu/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/dbu/subscriptions","organizations_url":"https://api.github.com/users/dbu/orgs","repos_url":"https://api.github.com/users/dbu/repos","events_url":"https://api.github.com/users/dbu/events{/privacy}","received_events_url":"https://api.github.com/users/dbu/received_events","type":"User","site_admin":false},"body":"i was thinking RequestCollection, but it is more than a collection. RequestReplicator sounds not that wrong. or something else that explains this kind of duplicates the requests in the collection for each server, without implying that it would be responsible of actually *sending* the request. RequestDuplicator is strange because its not really duplicate, and its not distribute as each request has to go to every server...","created_at":"2015-06-13T11:45:42Z","updated_at":"2015-06-13T11:45:42Z","html_url":"https://github.com/FriendsOfSymfony/FOSHttpCache/pull/173#discussion_r32369902","pull_request_url":"https://api.github.com/repos/FriendsOfSymfony/FOSHttpCache/pulls/173","_links":{"self":{"href":"https://api.github.com/repos/FriendsOfSymfony/FOSHttpCache/pulls/comments/32369902"},"html":{"href":"https://github.com/FriendsOfSymfony/FOSHttpCache/pull/173#discussion_r32369902"},"pull_request":{"href":"https://api.github.com/repos/FriendsOfSymfony/FOSHttpCache/pulls/173"}}},"pull_request":{"url":"https://api.github.com/repos/FriendsOfSymfony/FOSHttpCache/pulls/173","id":29730018,"html_url":"https://github.com/FriendsOfSymfony/FOSHttpCache/pull/173","diff_url":"https://github.com/FriendsOfSymfony/FOSHttpCache/pull/173.diff","patch_url":"https://github.com/FriendsOfSymfony/FOSHttpCache/pull/173.patch","issue_url":"https://api.github.com/repos/FriendsOfSymfony/FOSHttpCache/issues/173","number":173,"state":"open","locked":false,"title":"[WIP] Decouple from HTTP client library","user":{"login":"ddeboer","id":89267,"avatar_url":"https://avatars.githubusercontent.com/u/89267?v=3","gravatar_id":"","url":"https://api.github.com/users/ddeboer","html_url":"https://github.com/ddeboer","followers_url":"https://api.github.com/users/ddeboer/followers","following_url":"https://api.github.com/users/ddeboer/following{/other_user}","gists_url":"https://api.github.com/users/ddeboer/gists{/gist_id}","starred_url":"https://api.github.com/users/ddeboer/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/ddeboer/subscriptions","organizations_url":"https://api.github.com/users/ddeboer/orgs","repos_url":"https://api.github.com/users/ddeboer/repos","events_url":"https://api.github.com/users/ddeboer/events{/privacy}","received_events_url":"https://api.github.com/users/ddeboer/received_events","type":"User","site_admin":false},"body":"Fix #53.\r\n\r\nGoals:\r\n* Completely decouple our caching proxy clients from any HTTP client implementation.\r\n* Remove dependency on Guzzle (or any other) HTTP client.\r\n* Depend only on PSR-7 and the generic php-http/adapter instead.\r\n\r\nTodo:\r\n- [x] update docs to reflect changes\r\n- [x] fix missing host test\r\n- [ ] Switch RTD default to stable, so users won't be confused by our updated (2.0) docs","created_at":"2015-02-20T20:54:07Z","updated_at":"2015-06-13T11:45:42Z","closed_at":null,"merged_at":null,"merge_commit_sha":"6d5260b3dd6445bdcc2f147396eaf3515904eb29","assignee":null,"milestone":{"url":"https://api.github.com/repos/FriendsOfSymfony/FOSHttpCache/milestones/4","html_url":"https://github.com/FriendsOfSymfony/FOSHttpCache/milestones/2.0","labels_url":"https://api.github.com/repos/FriendsOfSymfony/FOSHttpCache/milestones/4/labels","id":1148818,"number":4,"title":"2.0","description":"","creator":{"login":"dbu","id":76576,"avatar_url":"https://avatars.githubusercontent.com/u/76576?v=3","gravatar_id":"","url":"https://api.github.com/users/dbu","html_url":"https://github.com/dbu","followers_url":"https://api.github.com/users/dbu/followers","following_url":"https://api.github.com/users/dbu/following{/other_user}","gists_url":"https://api.github.com/users/dbu/gists{/gist_id}","starred_url":"https://api.github.com/users/dbu/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/dbu/subscriptions","organizations_url":"https://api.github.com/users/dbu/orgs","repos_url":"https://api.github.com/users/dbu/repos","events_url":"https://api.github.com/users/dbu/events{/privacy}","received_events_url":"https://api.github.com/users/dbu/received_events","type":"User","site_admin":false},"open_issues":8,"closed_issues":0,"state":"open","created_at":"2015-06-04T06:40:44Z","updated_at":"2015-06-06T16:04:21Z","due_on":null,"closed_at":null},"commits_url":"https://api.github.com/repos/FriendsOfSymfony/FOSHttpCache/pulls/173/commits","review_comments_url":"https://api.github.com/repos/FriendsOfSymfony/FOSHttpCache/pulls/173/comments","review_comment_url":"https://api.github.com/repos/FriendsOfSymfony/FOSHttpCache/pulls/comments{/number}","comments_url":"https://api.github.com/repos/FriendsOfSymfony/FOSHttpCache/issues/173/comments","statuses_url":"https://api.github.com/repos/FriendsOfSymfony/FOSHttpCache/statuses/59fcc6f859cb71074e86da2cc75cfd8d7ca34f7d","head":{"label":"FriendsOfSymfony:http-client","ref":"http-client","sha":"59fcc6f859cb71074e86da2cc75cfd8d7ca34f7d","user":{"login":"FriendsOfSymfony","id":529709,"avatar_url":"https://avatars.githubusercontent.com/u/529709?v=3","gravatar_id":"","url":"https://api.github.com/users/FriendsOfSymfony","html_url":"https://github.com/FriendsOfSymfony","followers_url":"https://api.github.com/users/FriendsOfSymfony/followers","following_url":"https://api.github.com/users/FriendsOfSymfony/following{/other_user}","gists_url":"https://api.github.com/users/FriendsOfSymfony/gists{/gist_id}","starred_url":"https://api.github.com/users/FriendsOfSymfony/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/FriendsOfSymfony/subscriptions","organizations_url":"https://api.github.com/users/FriendsOfSymfony/orgs","repos_url":"https://api.github.com/users/FriendsOfSymfony/repos","events_url":"https://api.github.com/users/FriendsOfSymfony/events{/privacy}","received_events_url":"https://api.github.com/users/FriendsOfSymfony/received_events","type":"Organization","site_admin":false},"repo":{"id":16147914,"name":"FOSHttpCache","full_name":"FriendsOfSymfony/FOSHttpCache","owner":{"login":"FriendsOfSymfony","id":529709,"avatar_url":"https://avatars.githubusercontent.com/u/529709?v=3","gravatar_id":"","url":"https://api.github.com/users/FriendsOfSymfony","html_url":"https://github.com/FriendsOfSymfony","followers_url":"https://api.github.com/users/FriendsOfSymfony/followers","following_url":"https://api.github.com/users/FriendsOfSymfony/following{/other_user}","gists_url":"https://api.github.com/users/FriendsOfSymfony/gists{/gist_id}","starred_url":"https://api.github.com/users/FriendsOfSymfony/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/FriendsOfSymfony/subscriptions","organizations_url":"https://api.github.com/users/FriendsOfSymfony/orgs","repos_url":"https://api.github.com/users/FriendsOfSymfony/repos","events_url":"https://api.github.com/users/FriendsOfSymfony/events{/privacy}","received_events_url":"https://api.github.com/users/FriendsOfSymfony/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/FriendsOfSymfony/FOSHttpCache","description":"Integrate your PHP application with your HTTP caching proxy","fork":false,"url":"https://api.github.com/repos/FriendsOfSymfony/FOSHttpCache","forks_url":"https://api.github.com/repos/FriendsOfSymfony/FOSHttpCache/forks","keys_url":"https://api.github.com/repos/FriendsOfSymfony/FOSHttpCache/keys{/key_id}","collaborators_url":"https://api.github.com/repos/FriendsOfSymfony/FOSHttpCache/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/FriendsOfSymfony/FOSHttpCache/teams","hooks_url":"https://api.github.com/repos/FriendsOfSymfony/FOSHttpCache/hooks","issue_events_url":"https://api.github.com/repos/FriendsOfSymfony/FOSHttpCache/issues/events{/number}","events_url":"https://api.github.com/repos/FriendsOfSymfony/FOSHttpCache/events","assignees_url":"https://api.github.com/repos/FriendsOfSymfony/FOSHttpCache/assignees{/user}","branches_url":"https://api.github.com/repos/FriendsOfSymfony/FOSHttpCache/branches{/branch}","tags_url":"https://api.github.com/repos/FriendsOfSymfony/FOSHttpCache/tags","blobs_url":"https://api.github.com/repos/FriendsOfSymfony/FOSHttpCache/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/FriendsOfSymfony/FOSHttpCache/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/FriendsOfSymfony/FOSHttpCache/git/refs{/sha}","trees_url":"https://api.github.com/repos/FriendsOfSymfony/FOSHttpCache/git/trees{/sha}","statuses_url":"https://api.github.com/repos/FriendsOfSymfony/FOSHttpCache/statuses/{sha}","languages_url":"https://api.github.com/repos/FriendsOfSymfony/FOSHttpCache/languages","stargazers_url":"https://api.github.com/repos/FriendsOfSymfony/FOSHttpCache/stargazers","contributors_url":"https://api.github.com/repos/FriendsOfSymfony/FOSHttpCache/contributors","subscribers_url":"https://api.github.com/repos/FriendsOfSymfony/FOSHttpCache/subscribers","subscription_url":"https://api.github.com/repos/FriendsOfSymfony/FOSHttpCache/subscription","commits_url":"https://api.github.com/repos/FriendsOfSymfony/FOSHttpCache/commits{/sha}","git_commits_url":"https://api.github.com/repos/FriendsOfSymfony/FOSHttpCache/git/commits{/sha}","comments_url":"https://api.github.com/repos/FriendsOfSymfony/FOSHttpCache/comments{/number}","issue_comment_url":"https://api.github.com/repos/FriendsOfSymfony/FOSHttpCache/issues/comments{/number}","contents_url":"https://api.github.com/repos/FriendsOfSymfony/FOSHttpCache/contents/{+path}","compare_url":"https://api.github.com/repos/FriendsOfSymfony/FOSHttpCache/compare/{base}...{head}","merges_url":"https://api.github.com/repos/FriendsOfSymfony/FOSHttpCache/merges","archive_url":"https://api.github.com/repos/FriendsOfSymfony/FOSHttpCache/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/FriendsOfSymfony/FOSHttpCache/downloads","issues_url":"https://api.github.com/repos/FriendsOfSymfony/FOSHttpCache/issues{/number}","pulls_url":"https://api.github.com/repos/FriendsOfSymfony/FOSHttpCache/pulls{/number}","milestones_url":"https://api.github.com/repos/FriendsOfSymfony/FOSHttpCache/milestones{/number}","notifications_url":"https://api.github.com/repos/FriendsOfSymfony/FOSHttpCache/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/FriendsOfSymfony/FOSHttpCache/labels{/name}","releases_url":"https://api.github.com/repos/FriendsOfSymfony/FOSHttpCache/releases{/id}","created_at":"2014-01-22T18:19:17Z","updated_at":"2015-05-29T20:11:21Z","pushed_at":"2015-06-13T11:35:59Z","git_url":"git://github.com/FriendsOfSymfony/FOSHttpCache.git","ssh_url":"git@github.com:FriendsOfSymfony/FOSHttpCache.git","clone_url":"https://github.com/FriendsOfSymfony/FOSHttpCache.git","svn_url":"https://github.com/FriendsOfSymfony/FOSHttpCache","homepage":"http://foshttpcache.readthedocs.org/","size":2798,"stargazers_count":97,"watchers_count":97,"language":"PHP","has_issues":true,"has_downloads":true,"has_wiki":false,"has_pages":false,"forks_count":19,"mirror_url":null,"open_issues_count":18,"forks":19,"open_issues":18,"watchers":97,"default_branch":"master"}},"base":{"label":"FriendsOfSymfony:master","ref":"master","sha":"922b859fabfa0dff2e6dbbafa01e06e317b00eee","user":{"login":"FriendsOfSymfony","id":529709,"avatar_url":"https://avatars.githubusercontent.com/u/529709?v=3","gravatar_id":"","url":"https://api.github.com/users/FriendsOfSymfony","html_url":"https://github.com/FriendsOfSymfony","followers_url":"https://api.github.com/users/FriendsOfSymfony/followers","following_url":"https://api.github.com/users/FriendsOfSymfony/following{/other_user}","gists_url":"https://api.github.com/users/FriendsOfSymfony/gists{/gist_id}","starred_url":"https://api.github.com/users/FriendsOfSymfony/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/FriendsOfSymfony/subscriptions","organizations_url":"https://api.github.com/users/FriendsOfSymfony/orgs","repos_url":"https://api.github.com/users/FriendsOfSymfony/repos","events_url":"https://api.github.com/users/FriendsOfSymfony/events{/privacy}","received_events_url":"https://api.github.com/users/FriendsOfSymfony/received_events","type":"Organization","site_admin":false},"repo":{"id":16147914,"name":"FOSHttpCache","full_name":"FriendsOfSymfony/FOSHttpCache","owner":{"login":"FriendsOfSymfony","id":529709,"avatar_url":"https://avatars.githubusercontent.com/u/529709?v=3","gravatar_id":"","url":"https://api.github.com/users/FriendsOfSymfony","html_url":"https://github.com/FriendsOfSymfony","followers_url":"https://api.github.com/users/FriendsOfSymfony/followers","following_url":"https://api.github.com/users/FriendsOfSymfony/following{/other_user}","gists_url":"https://api.github.com/users/FriendsOfSymfony/gists{/gist_id}","starred_url":"https://api.github.com/users/FriendsOfSymfony/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/FriendsOfSymfony/subscriptions","organizations_url":"https://api.github.com/users/FriendsOfSymfony/orgs","repos_url":"https://api.github.com/users/FriendsOfSymfony/repos","events_url":"https://api.github.com/users/FriendsOfSymfony/events{/privacy}","received_events_url":"https://api.github.com/users/FriendsOfSymfony/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/FriendsOfSymfony/FOSHttpCache","description":"Integrate your PHP application with your HTTP caching proxy","fork":false,"url":"https://api.github.com/repos/FriendsOfSymfony/FOSHttpCache","forks_url":"https://api.github.com/repos/FriendsOfSymfony/FOSHttpCache/forks","keys_url":"https://api.github.com/repos/FriendsOfSymfony/FOSHttpCache/keys{/key_id}","collaborators_url":"https://api.github.com/repos/FriendsOfSymfony/FOSHttpCache/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/FriendsOfSymfony/FOSHttpCache/teams","hooks_url":"https://api.github.com/repos/FriendsOfSymfony/FOSHttpCache/hooks","issue_events_url":"https://api.github.com/repos/FriendsOfSymfony/FOSHttpCache/issues/events{/number}","events_url":"https://api.github.com/repos/FriendsOfSymfony/FOSHttpCache/events","assignees_url":"https://api.github.com/repos/FriendsOfSymfony/FOSHttpCache/assignees{/user}","branches_url":"https://api.github.com/repos/FriendsOfSymfony/FOSHttpCache/branches{/branch}","tags_url":"https://api.github.com/repos/FriendsOfSymfony/FOSHttpCache/tags","blobs_url":"https://api.github.com/repos/FriendsOfSymfony/FOSHttpCache/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/FriendsOfSymfony/FOSHttpCache/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/FriendsOfSymfony/FOSHttpCache/git/refs{/sha}","trees_url":"https://api.github.com/repos/FriendsOfSymfony/FOSHttpCache/git/trees{/sha}","statuses_url":"https://api.github.com/repos/FriendsOfSymfony/FOSHttpCache/statuses/{sha}","languages_url":"https://api.github.com/repos/FriendsOfSymfony/FOSHttpCache/languages","stargazers_url":"https://api.github.com/repos/FriendsOfSymfony/FOSHttpCache/stargazers","contributors_url":"https://api.github.com/repos/FriendsOfSymfony/FOSHttpCache/contributors","subscribers_url":"https://api.github.com/repos/FriendsOfSymfony/FOSHttpCache/subscribers","subscription_url":"https://api.github.com/repos/FriendsOfSymfony/FOSHttpCache/subscription","commits_url":"https://api.github.com/repos/FriendsOfSymfony/FOSHttpCache/commits{/sha}","git_commits_url":"https://api.github.com/repos/FriendsOfSymfony/FOSHttpCache/git/commits{/sha}","comments_url":"https://api.github.com/repos/FriendsOfSymfony/FOSHttpCache/comments{/number}","issue_comment_url":"https://api.github.com/repos/FriendsOfSymfony/FOSHttpCache/issues/comments{/number}","contents_url":"https://api.github.com/repos/FriendsOfSymfony/FOSHttpCache/contents/{+path}","compare_url":"https://api.github.com/repos/FriendsOfSymfony/FOSHttpCache/compare/{base}...{head}","merges_url":"https://api.github.com/repos/FriendsOfSymfony/FOSHttpCache/merges","archive_url":"https://api.github.com/repos/FriendsOfSymfony/FOSHttpCache/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/FriendsOfSymfony/FOSHttpCache/downloads","issues_url":"https://api.github.com/repos/FriendsOfSymfony/FOSHttpCache/issues{/number}","pulls_url":"https://api.github.com/repos/FriendsOfSymfony/FOSHttpCache/pulls{/number}","milestones_url":"https://api.github.com/repos/FriendsOfSymfony/FOSHttpCache/milestones{/number}","notifications_url":"https://api.github.com/repos/FriendsOfSymfony/FOSHttpCache/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/FriendsOfSymfony/FOSHttpCache/labels{/name}","releases_url":"https://api.github.com/repos/FriendsOfSymfony/FOSHttpCache/releases{/id}","created_at":"2014-01-22T18:19:17Z","updated_at":"2015-05-29T20:11:21Z","pushed_at":"2015-06-13T11:35:59Z","git_url":"git://github.com/FriendsOfSymfony/FOSHttpCache.git","ssh_url":"git@github.com:FriendsOfSymfony/FOSHttpCache.git","clone_url":"https://github.com/FriendsOfSymfony/FOSHttpCache.git","svn_url":"https://github.com/FriendsOfSymfony/FOSHttpCache","homepage":"http://foshttpcache.readthedocs.org/","size":2798,"stargazers_count":97,"watchers_count":97,"language":"PHP","has_issues":true,"has_downloads":true,"has_wiki":false,"has_pages":false,"forks_count":19,"mirror_url":null,"open_issues_count":18,"forks":19,"open_issues":18,"watchers":97,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/FriendsOfSymfony/FOSHttpCache/pulls/173"},"html":{"href":"https://github.com/FriendsOfSymfony/FOSHttpCache/pull/173"},"issue":{"href":"https://api.github.com/repos/FriendsOfSymfony/FOSHttpCache/issues/173"},"comments":{"href":"https://api.github.com/repos/FriendsOfSymfony/FOSHttpCache/issues/173/comments"},"review_comments":{"href":"https://api.github.com/repos/FriendsOfSymfony/FOSHttpCache/pulls/173/comments"},"review_comment":{"href":"https://api.github.com/repos/FriendsOfSymfony/FOSHttpCache/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/FriendsOfSymfony/FOSHttpCache/pulls/173/commits"},"statuses":{"href":"https://api.github.com/repos/FriendsOfSymfony/FOSHttpCache/statuses/59fcc6f859cb71074e86da2cc75cfd8d7ca34f7d"}}}}