{"action":"created","comment":{"url":"https://api.github.com/repos/lizards-and-pumpkins/lib-search-engine-solr/pulls/comments/41480057","id":41480057,"diff_hunk":"@@ -0,0 +1,366 @@\n+<?php\n+\n+namespace LizardsAndPumpkins\\DataPool\\SearchEngine\\Solr;\n+\n+use LizardsAndPumpkins\\Context\\Context;\n+use LizardsAndPumpkins\\Context\\ContextBuilder;\n+use LizardsAndPumpkins\\DataPool\\SearchEngine\\SearchCriteria\\SearchCriteria;\n+use LizardsAndPumpkins\\DataPool\\SearchEngine\\SearchDocument\\SearchDocument;\n+use LizardsAndPumpkins\\DataPool\\SearchEngine\\SearchDocument\\SearchDocumentCollection;\n+use LizardsAndPumpkins\\DataPool\\SearchEngine\\SearchDocument\\SearchDocumentField;\n+use LizardsAndPumpkins\\DataPool\\SearchEngine\\SearchDocument\\SearchDocumentFieldCollection;\n+use LizardsAndPumpkins\\DataPool\\SearchEngine\\SearchEngine;\n+use LizardsAndPumpkins\\DataPool\\SearchEngine\\Solr\\Exception\\SolrException;\n+use LizardsAndPumpkins\\DataPool\\SearchEngine\\Solr\\Exception\\UnsupportedSearchCriteriaOperationException;\n+use LizardsAndPumpkins\\DataPool\\SearchEngine\\Solr\\Operator\\SolrQueryOperator;\n+use LizardsAndPumpkins\\Product\\ProductId;\n+use LizardsAndPumpkins\\Utils\\Clearable;\n+\n+class SolrSearchEngine implements SearchEngine, Clearable\n+{\n+    const UPDATE_SERVLET = 'update';\n+    const SEARCH_SERVLET = 'select';\n+    const FIELD_PREFIX = 'lizards_and_pumpkins_field_';\n+    const CONTEXT_PREFIX = 'lizards_and_pumpkins_context_';\n+\n+    /**\n+     * @var string\n+     */\n+    private $solrConnectionPath;\n+\n+    /**\n+     * @var string[]\n+     */\n+    private $searchableFields;\n+\n+    /**\n+     * @param string $solrConnectionPath\n+     * @param string[] $searchableFields\n+     */\n+    public function __construct($solrConnectionPath, array $searchableFields)\n+    {\n+        $this->solrConnectionPath = $solrConnectionPath;\n+        $this->searchableFields = $searchableFields;\n+    }\n+\n+    /**\n+     * @param SearchDocumentCollection $documentsCollection\n+     */\n+    public function addSearchDocumentCollection(SearchDocumentCollection $documentsCollection)\n+    {\n+        $rawDocuments = array_reduce($documentsCollection->getDocuments(), function ($carry, SearchDocument $document) {\n+            return $carry . $this->formatQueryFieldXml($document);\n+        }, '');\n+        $rawPost = '<add>' . $rawDocuments . '</add>';\n+\n+        $url = $this->constructUrl(self::UPDATE_SERVLET, ['commit' => 'true']);\n+\n+        $this->sendRawPostRequest($url, $rawPost);\n+    }\n+\n+    /**\n+     * @param SearchDocument $document\n+     * @return string\n+     */\n+    private function formatQueryFieldXml(SearchDocument $document)\n+    {\n+        $rawDocumentFields = $this->buildSearchDocumentFieldsXml($document->getFieldsCollection());\n+        $rawContextFields = $this->buildContextFieldsXml($document->getContext());\n+        return '<add>\n+                    <doc>\n+                        <field name=\"product_id\">' . addslashes($document->getProductId()) . '</field>\n+                        ' . $rawDocumentFields . '\n+                        ' . $rawContextFields . '\n+                    </doc>\n+                </add>';\n+    }\n+\n+    /**\n+     * @param SearchDocumentFieldCollection $fieldCollection\n+     * @return string\n+     */\n+    private function buildSearchDocumentFieldsXml(SearchDocumentFieldCollection $fieldCollection)\n+    {\n+        return array_reduce($fieldCollection->getFields(), function ($carry, SearchDocumentField $field) {\n+            $fieldName = addslashes(self::FIELD_PREFIX . $field->getKey());\n+            return $carry . array_reduce($field->getValues(), function ($carry, $fieldValue) use ($fieldName) {\n+                return $carry .sprintf('<field name=\"%s\">%s</field>', $fieldName, addslashes($fieldValue));\n+            }, '');\n+        }, '');\n+    }\n+\n+    /**\n+     * @param Context $context\n+     * @return string\n+     */\n+    private function buildContextFieldsXml(Context $context)\n+    {\n+        return array_reduce($context->getSupportedCodes(), function ($carry, $contextCode) use ($context) {\n+            $fieldName = addslashes(self::CONTEXT_PREFIX . $contextCode);\n+            $fieldValue = addslashes($context->getValue($contextCode));\n+            return $carry . sprintf('<field name=\"%s\">%s</field>', $fieldName, $fieldValue);\n+        }, '');\n+    }\n+\n+    /**\n+     * @param string $queryString\n+     * @param Context $context\n+     * @return SearchDocumentCollection\n+     */\n+    public function query($queryString, Context $context)\n+    {\n+        $fieldsQueryString = implode(' OR ', array_map(function ($fieldName) use ($queryString) {\n+            return addslashes(self::FIELD_PREFIX . $fieldName) . ':\"' . addslashes($queryString) . '\"';\n+        }, $this->searchableFields));\n+        $contextQueryString = $this->convertContextIntoQueryString($context);\n+\n+        $query = '(' . $fieldsQueryString . ') AND ' . $contextQueryString;\n+\n+        return $this->getSearchDocumentsCollectionMatchingQueryString($query);\n+    }\n+\n+    /**\n+     * @param SearchCriteria $criteria\n+     * @param Context $context\n+     * @return SearchDocumentCollection\n+     */\n+    public function getSearchDocumentsMatchingCriteria(SearchCriteria $criteria, Context $context)\n+    {\n+        $fieldsQueryString = $this->convertCriteriaIntoSolrQueryString($criteria);\n+        $contextQueryString = $this->convertContextIntoQueryString($context);\n+\n+        $query = '(' . $fieldsQueryString . ') AND ' . $contextQueryString;\n+\n+        return $this->getSearchDocumentsCollectionMatchingQueryString($query);\n+    }\n+\n+    public function clear()\n+    {\n+        $parameters = [\n+            'stream.body' => '<delete><query>*:*</query></delete>',\n+            'commit'      => 'true'\n+        ];\n+        $url = $this->constructUrl(self::UPDATE_SERVLET, $parameters);\n+        $this->sendRequest($url);\n+    }\n+\n+    /**\n+     * @param Context $context\n+     * @return string\n+     */\n+    private function convertContextIntoQueryString(Context $context)\n+    {\n+        return implode(' AND ', array_map(function ($contextCode) use ($context) {\n+            $fieldName = addslashes(self::CONTEXT_PREFIX . $contextCode);","path":"src/SolrSearchEngine.php","position":154,"original_position":154,"commit_id":"5067f9646dfd8c94c93e4a2d954070082e736466","original_commit_id":"5067f9646dfd8c94c93e4a2d954070082e736466","user":{"login":"Vinai","id":72463,"avatar_url":"https://avatars.githubusercontent.com/u/72463?v=3","gravatar_id":"","url":"https://api.github.com/users/Vinai","html_url":"https://github.com/Vinai","followers_url":"https://api.github.com/users/Vinai/followers","following_url":"https://api.github.com/users/Vinai/following{/other_user}","gists_url":"https://api.github.com/users/Vinai/gists{/gist_id}","starred_url":"https://api.github.com/users/Vinai/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/Vinai/subscriptions","organizations_url":"https://api.github.com/users/Vinai/orgs","repos_url":"https://api.github.com/users/Vinai/repos","events_url":"https://api.github.com/users/Vinai/events{/privacy}","received_events_url":"https://api.github.com/users/Vinai/received_events","type":"User","site_admin":false},"body":"`addslashes` is not suited to escape HTTP GET query string parameters, use `url_encode` instead, maybe on the full returned string instead of the individual fields.","created_at":"2015-10-08T06:35:06Z","updated_at":"2015-10-08T06:35:06Z","html_url":"https://github.com/lizards-and-pumpkins/lib-search-engine-solr/pull/2#discussion_r41480057","pull_request_url":"https://api.github.com/repos/lizards-and-pumpkins/lib-search-engine-solr/pulls/2","_links":{"self":{"href":"https://api.github.com/repos/lizards-and-pumpkins/lib-search-engine-solr/pulls/comments/41480057"},"html":{"href":"https://github.com/lizards-and-pumpkins/lib-search-engine-solr/pull/2#discussion_r41480057"},"pull_request":{"href":"https://api.github.com/repos/lizards-and-pumpkins/lib-search-engine-solr/pulls/2"}}},"pull_request":{"url":"https://api.github.com/repos/lizards-and-pumpkins/lib-search-engine-solr/pulls/2","id":46893033,"html_url":"https://github.com/lizards-and-pumpkins/lib-search-engine-solr/pull/2","diff_url":"https://github.com/lizards-and-pumpkins/lib-search-engine-solr/pull/2.diff","patch_url":"https://github.com/lizards-and-pumpkins/lib-search-engine-solr/pull/2.patch","issue_url":"https://api.github.com/repos/lizards-and-pumpkins/lib-search-engine-solr/issues/2","number":2,"state":"open","locked":false,"title":"Implement Solr search engine (Issue #1)","user":{"login":"tim-bezhashvyly","id":462687,"avatar_url":"https://avatars.githubusercontent.com/u/462687?v=3","gravatar_id":"","url":"https://api.github.com/users/tim-bezhashvyly","html_url":"https://github.com/tim-bezhashvyly","followers_url":"https://api.github.com/users/tim-bezhashvyly/followers","following_url":"https://api.github.com/users/tim-bezhashvyly/following{/other_user}","gists_url":"https://api.github.com/users/tim-bezhashvyly/gists{/gist_id}","starred_url":"https://api.github.com/users/tim-bezhashvyly/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/tim-bezhashvyly/subscriptions","organizations_url":"https://api.github.com/users/tim-bezhashvyly/orgs","repos_url":"https://api.github.com/users/tim-bezhashvyly/repos","events_url":"https://api.github.com/users/tim-bezhashvyly/events{/privacy}","received_events_url":"https://api.github.com/users/tim-bezhashvyly/received_events","type":"User","site_admin":false},"body":"","created_at":"2015-10-06T11:54:31Z","updated_at":"2015-10-08T06:35:06Z","closed_at":null,"merged_at":null,"merge_commit_sha":"33b623212df4810a4750c8cbe9570b9fcbded0b8","assignee":null,"milestone":null,"commits_url":"https://api.github.com/repos/lizards-and-pumpkins/lib-search-engine-solr/pulls/2/commits","review_comments_url":"https://api.github.com/repos/lizards-and-pumpkins/lib-search-engine-solr/pulls/2/comments","review_comment_url":"https://api.github.com/repos/lizards-and-pumpkins/lib-search-engine-solr/pulls/comments{/number}","comments_url":"https://api.github.com/repos/lizards-and-pumpkins/lib-search-engine-solr/issues/2/comments","statuses_url":"https://api.github.com/repos/lizards-and-pumpkins/lib-search-engine-solr/statuses/5067f9646dfd8c94c93e4a2d954070082e736466","head":{"label":"lizards-and-pumpkins:issue-1","ref":"issue-1","sha":"5067f9646dfd8c94c93e4a2d954070082e736466","user":{"login":"lizards-and-pumpkins","id":8191923,"avatar_url":"https://avatars.githubusercontent.com/u/8191923?v=3","gravatar_id":"","url":"https://api.github.com/users/lizards-and-pumpkins","html_url":"https://github.com/lizards-and-pumpkins","followers_url":"https://api.github.com/users/lizards-and-pumpkins/followers","following_url":"https://api.github.com/users/lizards-and-pumpkins/following{/other_user}","gists_url":"https://api.github.com/users/lizards-and-pumpkins/gists{/gist_id}","starred_url":"https://api.github.com/users/lizards-and-pumpkins/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/lizards-and-pumpkins/subscriptions","organizations_url":"https://api.github.com/users/lizards-and-pumpkins/orgs","repos_url":"https://api.github.com/users/lizards-and-pumpkins/repos","events_url":"https://api.github.com/users/lizards-and-pumpkins/events{/privacy}","received_events_url":"https://api.github.com/users/lizards-and-pumpkins/received_events","type":"Organization","site_admin":false},"repo":{"id":43718547,"name":"lib-search-engine-solr","full_name":"lizards-and-pumpkins/lib-search-engine-solr","owner":{"login":"lizards-and-pumpkins","id":8191923,"avatar_url":"https://avatars.githubusercontent.com/u/8191923?v=3","gravatar_id":"","url":"https://api.github.com/users/lizards-and-pumpkins","html_url":"https://github.com/lizards-and-pumpkins","followers_url":"https://api.github.com/users/lizards-and-pumpkins/followers","following_url":"https://api.github.com/users/lizards-and-pumpkins/following{/other_user}","gists_url":"https://api.github.com/users/lizards-and-pumpkins/gists{/gist_id}","starred_url":"https://api.github.com/users/lizards-and-pumpkins/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/lizards-and-pumpkins/subscriptions","organizations_url":"https://api.github.com/users/lizards-and-pumpkins/orgs","repos_url":"https://api.github.com/users/lizards-and-pumpkins/repos","events_url":"https://api.github.com/users/lizards-and-pumpkins/events{/privacy}","received_events_url":"https://api.github.com/users/lizards-and-pumpkins/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/lizards-and-pumpkins/lib-search-engine-solr","description":"","fork":false,"url":"https://api.github.com/repos/lizards-and-pumpkins/lib-search-engine-solr","forks_url":"https://api.github.com/repos/lizards-and-pumpkins/lib-search-engine-solr/forks","keys_url":"https://api.github.com/repos/lizards-and-pumpkins/lib-search-engine-solr/keys{/key_id}","collaborators_url":"https://api.github.com/repos/lizards-and-pumpkins/lib-search-engine-solr/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/lizards-and-pumpkins/lib-search-engine-solr/teams","hooks_url":"https://api.github.com/repos/lizards-and-pumpkins/lib-search-engine-solr/hooks","issue_events_url":"https://api.github.com/repos/lizards-and-pumpkins/lib-search-engine-solr/issues/events{/number}","events_url":"https://api.github.com/repos/lizards-and-pumpkins/lib-search-engine-solr/events","assignees_url":"https://api.github.com/repos/lizards-and-pumpkins/lib-search-engine-solr/assignees{/user}","branches_url":"https://api.github.com/repos/lizards-and-pumpkins/lib-search-engine-solr/branches{/branch}","tags_url":"https://api.github.com/repos/lizards-and-pumpkins/lib-search-engine-solr/tags","blobs_url":"https://api.github.com/repos/lizards-and-pumpkins/lib-search-engine-solr/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/lizards-and-pumpkins/lib-search-engine-solr/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/lizards-and-pumpkins/lib-search-engine-solr/git/refs{/sha}","trees_url":"https://api.github.com/repos/lizards-and-pumpkins/lib-search-engine-solr/git/trees{/sha}","statuses_url":"https://api.github.com/repos/lizards-and-pumpkins/lib-search-engine-solr/statuses/{sha}","languages_url":"https://api.github.com/repos/lizards-and-pumpkins/lib-search-engine-solr/languages","stargazers_url":"https://api.github.com/repos/lizards-and-pumpkins/lib-search-engine-solr/stargazers","contributors_url":"https://api.github.com/repos/lizards-and-pumpkins/lib-search-engine-solr/contributors","subscribers_url":"https://api.github.com/repos/lizards-and-pumpkins/lib-search-engine-solr/subscribers","subscription_url":"https://api.github.com/repos/lizards-and-pumpkins/lib-search-engine-solr/subscription","commits_url":"https://api.github.com/repos/lizards-and-pumpkins/lib-search-engine-solr/commits{/sha}","git_commits_url":"https://api.github.com/repos/lizards-and-pumpkins/lib-search-engine-solr/git/commits{/sha}","comments_url":"https://api.github.com/repos/lizards-and-pumpkins/lib-search-engine-solr/comments{/number}","issue_comment_url":"https://api.github.com/repos/lizards-and-pumpkins/lib-search-engine-solr/issues/comments{/number}","contents_url":"https://api.github.com/repos/lizards-and-pumpkins/lib-search-engine-solr/contents/{+path}","compare_url":"https://api.github.com/repos/lizards-and-pumpkins/lib-search-engine-solr/compare/{base}...{head}","merges_url":"https://api.github.com/repos/lizards-and-pumpkins/lib-search-engine-solr/merges","archive_url":"https://api.github.com/repos/lizards-and-pumpkins/lib-search-engine-solr/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/lizards-and-pumpkins/lib-search-engine-solr/downloads","issues_url":"https://api.github.com/repos/lizards-and-pumpkins/lib-search-engine-solr/issues{/number}","pulls_url":"https://api.github.com/repos/lizards-and-pumpkins/lib-search-engine-solr/pulls{/number}","milestones_url":"https://api.github.com/repos/lizards-and-pumpkins/lib-search-engine-solr/milestones{/number}","notifications_url":"https://api.github.com/repos/lizards-and-pumpkins/lib-search-engine-solr/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/lizards-and-pumpkins/lib-search-engine-solr/labels{/name}","releases_url":"https://api.github.com/repos/lizards-and-pumpkins/lib-search-engine-solr/releases{/id}","created_at":"2015-10-05T22:57:35Z","updated_at":"2015-10-05T23:23:24Z","pushed_at":"2015-10-07T19:02:28Z","git_url":"git://github.com/lizards-and-pumpkins/lib-search-engine-solr.git","ssh_url":"git@github.com:lizards-and-pumpkins/lib-search-engine-solr.git","clone_url":"https://github.com/lizards-and-pumpkins/lib-search-engine-solr.git","svn_url":"https://github.com/lizards-and-pumpkins/lib-search-engine-solr","homepage":null,"size":0,"stargazers_count":0,"watchers_count":0,"language":null,"has_issues":true,"has_downloads":true,"has_wiki":false,"has_pages":false,"forks_count":0,"mirror_url":null,"open_issues_count":3,"forks":0,"open_issues":3,"watchers":0,"default_branch":"master"}},"base":{"label":"lizards-and-pumpkins:master","ref":"master","sha":"ddaf4b3c1678f23117c601168b3e6323e79499aa","user":{"login":"lizards-and-pumpkins","id":8191923,"avatar_url":"https://avatars.githubusercontent.com/u/8191923?v=3","gravatar_id":"","url":"https://api.github.com/users/lizards-and-pumpkins","html_url":"https://github.com/lizards-and-pumpkins","followers_url":"https://api.github.com/users/lizards-and-pumpkins/followers","following_url":"https://api.github.com/users/lizards-and-pumpkins/following{/other_user}","gists_url":"https://api.github.com/users/lizards-and-pumpkins/gists{/gist_id}","starred_url":"https://api.github.com/users/lizards-and-pumpkins/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/lizards-and-pumpkins/subscriptions","organizations_url":"https://api.github.com/users/lizards-and-pumpkins/orgs","repos_url":"https://api.github.com/users/lizards-and-pumpkins/repos","events_url":"https://api.github.com/users/lizards-and-pumpkins/events{/privacy}","received_events_url":"https://api.github.com/users/lizards-and-pumpkins/received_events","type":"Organization","site_admin":false},"repo":{"id":43718547,"name":"lib-search-engine-solr","full_name":"lizards-and-pumpkins/lib-search-engine-solr","owner":{"login":"lizards-and-pumpkins","id":8191923,"avatar_url":"https://avatars.githubusercontent.com/u/8191923?v=3","gravatar_id":"","url":"https://api.github.com/users/lizards-and-pumpkins","html_url":"https://github.com/lizards-and-pumpkins","followers_url":"https://api.github.com/users/lizards-and-pumpkins/followers","following_url":"https://api.github.com/users/lizards-and-pumpkins/following{/other_user}","gists_url":"https://api.github.com/users/lizards-and-pumpkins/gists{/gist_id}","starred_url":"https://api.github.com/users/lizards-and-pumpkins/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/lizards-and-pumpkins/subscriptions","organizations_url":"https://api.github.com/users/lizards-and-pumpkins/orgs","repos_url":"https://api.github.com/users/lizards-and-pumpkins/repos","events_url":"https://api.github.com/users/lizards-and-pumpkins/events{/privacy}","received_events_url":"https://api.github.com/users/lizards-and-pumpkins/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/lizards-and-pumpkins/lib-search-engine-solr","description":"","fork":false,"url":"https://api.github.com/repos/lizards-and-pumpkins/lib-search-engine-solr","forks_url":"https://api.github.com/repos/lizards-and-pumpkins/lib-search-engine-solr/forks","keys_url":"https://api.github.com/repos/lizards-and-pumpkins/lib-search-engine-solr/keys{/key_id}","collaborators_url":"https://api.github.com/repos/lizards-and-pumpkins/lib-search-engine-solr/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/lizards-and-pumpkins/lib-search-engine-solr/teams","hooks_url":"https://api.github.com/repos/lizards-and-pumpkins/lib-search-engine-solr/hooks","issue_events_url":"https://api.github.com/repos/lizards-and-pumpkins/lib-search-engine-solr/issues/events{/number}","events_url":"https://api.github.com/repos/lizards-and-pumpkins/lib-search-engine-solr/events","assignees_url":"https://api.github.com/repos/lizards-and-pumpkins/lib-search-engine-solr/assignees{/user}","branches_url":"https://api.github.com/repos/lizards-and-pumpkins/lib-search-engine-solr/branches{/branch}","tags_url":"https://api.github.com/repos/lizards-and-pumpkins/lib-search-engine-solr/tags","blobs_url":"https://api.github.com/repos/lizards-and-pumpkins/lib-search-engine-solr/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/lizards-and-pumpkins/lib-search-engine-solr/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/lizards-and-pumpkins/lib-search-engine-solr/git/refs{/sha}","trees_url":"https://api.github.com/repos/lizards-and-pumpkins/lib-search-engine-solr/git/trees{/sha}","statuses_url":"https://api.github.com/repos/lizards-and-pumpkins/lib-search-engine-solr/statuses/{sha}","languages_url":"https://api.github.com/repos/lizards-and-pumpkins/lib-search-engine-solr/languages","stargazers_url":"https://api.github.com/repos/lizards-and-pumpkins/lib-search-engine-solr/stargazers","contributors_url":"https://api.github.com/repos/lizards-and-pumpkins/lib-search-engine-solr/contributors","subscribers_url":"https://api.github.com/repos/lizards-and-pumpkins/lib-search-engine-solr/subscribers","subscription_url":"https://api.github.com/repos/lizards-and-pumpkins/lib-search-engine-solr/subscription","commits_url":"https://api.github.com/repos/lizards-and-pumpkins/lib-search-engine-solr/commits{/sha}","git_commits_url":"https://api.github.com/repos/lizards-and-pumpkins/lib-search-engine-solr/git/commits{/sha}","comments_url":"https://api.github.com/repos/lizards-and-pumpkins/lib-search-engine-solr/comments{/number}","issue_comment_url":"https://api.github.com/repos/lizards-and-pumpkins/lib-search-engine-solr/issues/comments{/number}","contents_url":"https://api.github.com/repos/lizards-and-pumpkins/lib-search-engine-solr/contents/{+path}","compare_url":"https://api.github.com/repos/lizards-and-pumpkins/lib-search-engine-solr/compare/{base}...{head}","merges_url":"https://api.github.com/repos/lizards-and-pumpkins/lib-search-engine-solr/merges","archive_url":"https://api.github.com/repos/lizards-and-pumpkins/lib-search-engine-solr/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/lizards-and-pumpkins/lib-search-engine-solr/downloads","issues_url":"https://api.github.com/repos/lizards-and-pumpkins/lib-search-engine-solr/issues{/number}","pulls_url":"https://api.github.com/repos/lizards-and-pumpkins/lib-search-engine-solr/pulls{/number}","milestones_url":"https://api.github.com/repos/lizards-and-pumpkins/lib-search-engine-solr/milestones{/number}","notifications_url":"https://api.github.com/repos/lizards-and-pumpkins/lib-search-engine-solr/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/lizards-and-pumpkins/lib-search-engine-solr/labels{/name}","releases_url":"https://api.github.com/repos/lizards-and-pumpkins/lib-search-engine-solr/releases{/id}","created_at":"2015-10-05T22:57:35Z","updated_at":"2015-10-05T23:23:24Z","pushed_at":"2015-10-07T19:02:28Z","git_url":"git://github.com/lizards-and-pumpkins/lib-search-engine-solr.git","ssh_url":"git@github.com:lizards-and-pumpkins/lib-search-engine-solr.git","clone_url":"https://github.com/lizards-and-pumpkins/lib-search-engine-solr.git","svn_url":"https://github.com/lizards-and-pumpkins/lib-search-engine-solr","homepage":null,"size":0,"stargazers_count":0,"watchers_count":0,"language":null,"has_issues":true,"has_downloads":true,"has_wiki":false,"has_pages":false,"forks_count":0,"mirror_url":null,"open_issues_count":3,"forks":0,"open_issues":3,"watchers":0,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/lizards-and-pumpkins/lib-search-engine-solr/pulls/2"},"html":{"href":"https://github.com/lizards-and-pumpkins/lib-search-engine-solr/pull/2"},"issue":{"href":"https://api.github.com/repos/lizards-and-pumpkins/lib-search-engine-solr/issues/2"},"comments":{"href":"https://api.github.com/repos/lizards-and-pumpkins/lib-search-engine-solr/issues/2/comments"},"review_comments":{"href":"https://api.github.com/repos/lizards-and-pumpkins/lib-search-engine-solr/pulls/2/comments"},"review_comment":{"href":"https://api.github.com/repos/lizards-and-pumpkins/lib-search-engine-solr/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/lizards-and-pumpkins/lib-search-engine-solr/pulls/2/commits"},"statuses":{"href":"https://api.github.com/repos/lizards-and-pumpkins/lib-search-engine-solr/statuses/5067f9646dfd8c94c93e4a2d954070082e736466"}}}}