{"action":"created","comment":{"url":"https://api.github.com/repos/massiveart/MassiveSearchBundle/pulls/comments/25615193","id":25615193,"diff_hunk":"@@ -0,0 +1,188 @@\n+<?php\n+/*\n+ * This file is part of the Sulu CMS.\n+ *\n+ * (c) MASSIVE ART WebServices GmbH\n+ *\n+ * This source file is subject to the MIT license that is bundled\n+ * with this source code in the file LICENSE.\n+ */\n+\n+namespace Massive\\Bundle\\SearchBundle\\Search;\n+\n+use Symfony\\Component\\ExpressionLanguage\\ExpressionLanguage;\n+use Massive\\Bundle\\SearchBundle\\Search\\Metadata\\IndexMetadata;\n+use Massive\\Bundle\\SearchBundle\\Search\\Metadata\\Field\\Property;\n+use Massive\\Bundle\\SearchBundle\\Search\\Metadata\\FieldEvaluator;\n+\n+/**\n+ * Convert mapped objects to search documents\n+ */\n+class ObjectToDocumentConverter\n+{\n+    /**\n+     * @var FieldEvaluator\n+     */\n+    private $fieldEvaluator;\n+\n+    /**\n+     * @var Factory\n+     */\n+    private $factory;\n+\n+    /**\n+     * @param Factory            $factory\n+     * @param ExpressionLanguage $expressionLanguage\n+     */\n+    public function __construct(Factory $factory, FieldEvaluator $fieldEvaluator)\n+    {\n+        $this->factory = $factory;\n+        $this->fieldEvaluator = $fieldEvaluator;\n+    }\n+\n+    /**\n+     * Return the field evaluator\n+     *\n+     * @return FieldEvaluator\n+     */\n+    public function getFieldEvaluator()\n+    {\n+        return $this->fieldEvaluator;\n+    }\n+\n+    /**\n+     * Map the given object to a new document using the\n+     * given metadata.\n+     *\n+     * @param  IndexMetadata $metadata\n+     * @param  object        $object\n+     * @return Document\n+     */\n+    public function objectToDocument(IndexMetadata $metadata, $object)\n+    {\n+        $idField = $metadata->getIdField();\n+        $urlField = $metadata->getUrlField();\n+        $titleField = $metadata->getTitleField();\n+        $descriptionField = $metadata->getDescriptionField();\n+        $imageUrlField = $metadata->getImageUrlField();\n+        $localeField = $metadata->getLocaleField();\n+        $fieldMapping = $metadata->getFieldMapping();\n+\n+        $document = $this->factory->makeDocument();\n+        $document->setId($this->fieldEvaluator->getValue($object, $idField));\n+        $document->setClass($metadata->getName());\n+\n+        if ($urlField) {\n+            $url = $this->fieldEvaluator->getValue($object, $urlField);\n+            if ($url) {\n+                $document->setUrl($url);\n+            }\n+        }\n+\n+        if ($titleField) {\n+            $title = $this->fieldEvaluator->getValue($object, $titleField);\n+            if ($title) {\n+                $document->setTitle($title);\n+            }\n+        }\n+\n+        if ($descriptionField) {\n+            $description = $this->fieldEvaluator->getValue($object, $descriptionField);\n+            if ($description) {\n+                $document->setDescription($description);\n+            }\n+        }\n+\n+        if ($imageUrlField) {\n+            $imageUrl = $this->fieldEvaluator->getValue($object, $imageUrlField);\n+            $document->setImageUrl($imageUrl);\n+        }\n+\n+        if ($localeField) {\n+            $locale = $this->fieldEvaluator->getValue($object, $localeField);\n+            $document->setLocale($locale);\n+        }\n+\n+        $this->populateDocument($document, $object, $fieldMapping);\n+\n+        return $document;\n+    }\n+\n+    /**\n+     * Populate the Document with the actual values from the object which\n+     * is being indexed.\n+     *\n+     * @param  Document                  $document\n+     * @param  mixed                     $object\n+     * @param  array                     $fieldMapping\n+     * @param  string                    $prefix       Prefix the document field name (used when called recursively)\n+     * @throws \\InvalidArgumentException\n+     */\n+    private function populateDocument($document, $object, $fieldMapping, $prefix = '')\n+    {\n+        foreach ($fieldMapping as $fieldName => $mapping) {\n+            if (!isset($mapping['field'])) {\n+                throw new \\RuntimeException(sprintf(\n+                    'Mapping for \"%s\" does not have \"field\" key',\n+                    $fieldName\n+                ));\n+            }\n+\n+            if (!isset($mapping['type'])) {\n+                throw new \\RuntimeException(sprintf(\n+                    'Mapping for \"%s\" does not have \"type\" key',\n+                    $fieldName\n+                ));\n+            }\n+\n+            if ($mapping['type'] == 'complex') {\n+                if (!isset($mapping['mapping'])) {\n+                    throw new \\InvalidArgumentException(\n+                        sprintf(\n+                            '\"complex\" field mappings must have an additional array key \"mapping\" '.\n+                            'which contains the mapping for the complex structure in mapping: %s',\n+                            print_r($mapping, true)\n+                        )\n+                    );\n+                }\n+\n+                $childObjects = $this->fieldEvaluator->getValue($object, new Property($fieldName));\n+\n+                foreach ($childObjects as $i => $childObject) {\n+                    $this->populateDocument(\n+                        $document,\n+                        $childObject,\n+                        $mapping['mapping']->getFieldMapping(),\n+                        $prefix.$fieldName.$i\n+                    );\n+                }\n+\n+                continue;\n+            }\n+\n+            $value = $this->fieldEvaluator->getValue($object, $mapping['field']);\n+\n+            if (!is_array($value)) {\n+                $document->addField(\n+                    $this->factory->makeField(\n+                        $prefix.$fieldName,","path":"Search/ObjectToDocumentConverter.php","position":168,"original_position":168,"commit_id":"773d691f879b66c0388469418f947ba060ba99f6","original_commit_id":"773d691f879b66c0388469418f947ba060ba99f6","user":{"login":"danrot","id":405874,"avatar_url":"https://avatars.githubusercontent.com/u/405874?v=3","gravatar_id":"","url":"https://api.github.com/users/danrot","html_url":"https://github.com/danrot","followers_url":"https://api.github.com/users/danrot/followers","following_url":"https://api.github.com/users/danrot/following{/other_user}","gists_url":"https://api.github.com/users/danrot/gists{/gist_id}","starred_url":"https://api.github.com/users/danrot/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/danrot/subscriptions","organizations_url":"https://api.github.com/users/danrot/orgs","repos_url":"https://api.github.com/users/danrot/repos","events_url":"https://api.github.com/users/danrot/events{/privacy}","received_events_url":"https://api.github.com/users/danrot/received_events","type":"User","site_admin":false},"body":"Codestyle: spaces","created_at":"2015-03-02T17:02:02Z","updated_at":"2015-03-02T17:02:02Z","html_url":"https://github.com/massiveart/MassiveSearchBundle/pull/18#discussion_r25615193","pull_request_url":"https://api.github.com/repos/massiveart/MassiveSearchBundle/pulls/18","_links":{"self":{"href":"https://api.github.com/repos/massiveart/MassiveSearchBundle/pulls/comments/25615193"},"html":{"href":"https://github.com/massiveart/MassiveSearchBundle/pull/18#discussion_r25615193"},"pull_request":{"href":"https://api.github.com/repos/massiveart/MassiveSearchBundle/pulls/18"}}},"pull_request":{"url":"https://api.github.com/repos/massiveart/MassiveSearchBundle/pulls/18","id":28102164,"html_url":"https://github.com/massiveart/MassiveSearchBundle/pull/18","diff_url":"https://github.com/massiveart/MassiveSearchBundle/pull/18.diff","patch_url":"https://github.com/massiveart/MassiveSearchBundle/pull/18.patch","issue_url":"https://api.github.com/repos/massiveart/MassiveSearchBundle/issues/18","number":18,"state":"open","locked":false,"title":"Feature/rest api","user":{"login":"dantleech","id":530801,"avatar_url":"https://avatars.githubusercontent.com/u/530801?v=3","gravatar_id":"","url":"https://api.github.com/users/dantleech","html_url":"https://github.com/dantleech","followers_url":"https://api.github.com/users/dantleech/followers","following_url":"https://api.github.com/users/dantleech/following{/other_user}","gists_url":"https://api.github.com/users/dantleech/gists{/gist_id}","starred_url":"https://api.github.com/users/dantleech/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/dantleech/subscriptions","organizations_url":"https://api.github.com/users/dantleech/orgs","repos_url":"https://api.github.com/users/dantleech/repos","events_url":"https://api.github.com/users/dantleech/events{/privacy}","received_events_url":"https://api.github.com/users/dantleech/received_events","type":"User","site_admin":false},"body":"This PR adds a Doctrine ORM subscriber, REST API and ExpressionLanaugage and *numerous other* features facilitating the creation of an independent back office search.\r\n\r\n- Added Doctrine ORM subscriber will automatically index/deindex mapped ORM documents.\r\n- `massive:search:index:rebuild` command which rebuilds both the ORM and third-party (i.e. Sulu) implementations)\r\n- Introduction of a REST API to provide a simple controller to perform a search query using parameters `query`, `index` and `locale` and receieve a JSON response.\r\n- Introduction of multiple search *contexts* for each mapped object, possiblity to index things differently for back or front office searches.\r\n- Added behat tests\r\n\r\nTodo\r\n\r\n- [x] API to retrieve valid indexes (or maybe that should be defined elsewhere?)\r\n- [x] ORM subscriber DI Configuration + tag\r\n- [x] Expression language support (for generating URLs)\r\n- [x] Context support (in the mapping)\r\n\r\n- Docs in separate PR: https://github.com/massiveart/MassiveSearchBundle/pull/20","created_at":"2015-01-27T11:44:40Z","updated_at":"2015-03-02T17:02:02Z","closed_at":null,"merged_at":null,"merge_commit_sha":"0f1f9ade85060fedfdd9bc046aa10984dc2bf8c4","assignee":{"login":"dantleech","id":530801,"avatar_url":"https://avatars.githubusercontent.com/u/530801?v=3","gravatar_id":"","url":"https://api.github.com/users/dantleech","html_url":"https://github.com/dantleech","followers_url":"https://api.github.com/users/dantleech/followers","following_url":"https://api.github.com/users/dantleech/following{/other_user}","gists_url":"https://api.github.com/users/dantleech/gists{/gist_id}","starred_url":"https://api.github.com/users/dantleech/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/dantleech/subscriptions","organizations_url":"https://api.github.com/users/dantleech/orgs","repos_url":"https://api.github.com/users/dantleech/repos","events_url":"https://api.github.com/users/dantleech/events{/privacy}","received_events_url":"https://api.github.com/users/dantleech/received_events","type":"User","site_admin":false},"milestone":null,"commits_url":"https://api.github.com/repos/massiveart/MassiveSearchBundle/pulls/18/commits","review_comments_url":"https://api.github.com/repos/massiveart/MassiveSearchBundle/pulls/18/comments","review_comment_url":"https://api.github.com/repos/massiveart/MassiveSearchBundle/pulls/comments{/number}","comments_url":"https://api.github.com/repos/massiveart/MassiveSearchBundle/issues/18/comments","statuses_url":"https://api.github.com/repos/massiveart/MassiveSearchBundle/statuses/773d691f879b66c0388469418f947ba060ba99f6","head":{"label":"massiveart:feature/rest-api","ref":"feature/rest-api","sha":"773d691f879b66c0388469418f947ba060ba99f6","user":{"login":"massiveart","id":854731,"avatar_url":"https://avatars.githubusercontent.com/u/854731?v=3","gravatar_id":"","url":"https://api.github.com/users/massiveart","html_url":"https://github.com/massiveart","followers_url":"https://api.github.com/users/massiveart/followers","following_url":"https://api.github.com/users/massiveart/following{/other_user}","gists_url":"https://api.github.com/users/massiveart/gists{/gist_id}","starred_url":"https://api.github.com/users/massiveart/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/massiveart/subscriptions","organizations_url":"https://api.github.com/users/massiveart/orgs","repos_url":"https://api.github.com/users/massiveart/repos","events_url":"https://api.github.com/users/massiveart/events{/privacy}","received_events_url":"https://api.github.com/users/massiveart/received_events","type":"Organization","site_admin":false},"repo":{"id":23216604,"name":"MassiveSearchBundle","full_name":"massiveart/MassiveSearchBundle","owner":{"login":"massiveart","id":854731,"avatar_url":"https://avatars.githubusercontent.com/u/854731?v=3","gravatar_id":"","url":"https://api.github.com/users/massiveart","html_url":"https://github.com/massiveart","followers_url":"https://api.github.com/users/massiveart/followers","following_url":"https://api.github.com/users/massiveart/following{/other_user}","gists_url":"https://api.github.com/users/massiveart/gists{/gist_id}","starred_url":"https://api.github.com/users/massiveart/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/massiveart/subscriptions","organizations_url":"https://api.github.com/users/massiveart/orgs","repos_url":"https://api.github.com/users/massiveart/repos","events_url":"https://api.github.com/users/massiveart/events{/privacy}","received_events_url":"https://api.github.com/users/massiveart/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/massiveart/MassiveSearchBundle","description":"","fork":false,"url":"https://api.github.com/repos/massiveart/MassiveSearchBundle","forks_url":"https://api.github.com/repos/massiveart/MassiveSearchBundle/forks","keys_url":"https://api.github.com/repos/massiveart/MassiveSearchBundle/keys{/key_id}","collaborators_url":"https://api.github.com/repos/massiveart/MassiveSearchBundle/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/massiveart/MassiveSearchBundle/teams","hooks_url":"https://api.github.com/repos/massiveart/MassiveSearchBundle/hooks","issue_events_url":"https://api.github.com/repos/massiveart/MassiveSearchBundle/issues/events{/number}","events_url":"https://api.github.com/repos/massiveart/MassiveSearchBundle/events","assignees_url":"https://api.github.com/repos/massiveart/MassiveSearchBundle/assignees{/user}","branches_url":"https://api.github.com/repos/massiveart/MassiveSearchBundle/branches{/branch}","tags_url":"https://api.github.com/repos/massiveart/MassiveSearchBundle/tags","blobs_url":"https://api.github.com/repos/massiveart/MassiveSearchBundle/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/massiveart/MassiveSearchBundle/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/massiveart/MassiveSearchBundle/git/refs{/sha}","trees_url":"https://api.github.com/repos/massiveart/MassiveSearchBundle/git/trees{/sha}","statuses_url":"https://api.github.com/repos/massiveart/MassiveSearchBundle/statuses/{sha}","languages_url":"https://api.github.com/repos/massiveart/MassiveSearchBundle/languages","stargazers_url":"https://api.github.com/repos/massiveart/MassiveSearchBundle/stargazers","contributors_url":"https://api.github.com/repos/massiveart/MassiveSearchBundle/contributors","subscribers_url":"https://api.github.com/repos/massiveart/MassiveSearchBundle/subscribers","subscription_url":"https://api.github.com/repos/massiveart/MassiveSearchBundle/subscription","commits_url":"https://api.github.com/repos/massiveart/MassiveSearchBundle/commits{/sha}","git_commits_url":"https://api.github.com/repos/massiveart/MassiveSearchBundle/git/commits{/sha}","comments_url":"https://api.github.com/repos/massiveart/MassiveSearchBundle/comments{/number}","issue_comment_url":"https://api.github.com/repos/massiveart/MassiveSearchBundle/issues/comments{/number}","contents_url":"https://api.github.com/repos/massiveart/MassiveSearchBundle/contents/{+path}","compare_url":"https://api.github.com/repos/massiveart/MassiveSearchBundle/compare/{base}...{head}","merges_url":"https://api.github.com/repos/massiveart/MassiveSearchBundle/merges","archive_url":"https://api.github.com/repos/massiveart/MassiveSearchBundle/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/massiveart/MassiveSearchBundle/downloads","issues_url":"https://api.github.com/repos/massiveart/MassiveSearchBundle/issues{/number}","pulls_url":"https://api.github.com/repos/massiveart/MassiveSearchBundle/pulls{/number}","milestones_url":"https://api.github.com/repos/massiveart/MassiveSearchBundle/milestones{/number}","notifications_url":"https://api.github.com/repos/massiveart/MassiveSearchBundle/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/massiveart/MassiveSearchBundle/labels{/name}","releases_url":"https://api.github.com/repos/massiveart/MassiveSearchBundle/releases{/id}","created_at":"2014-08-22T07:19:25Z","updated_at":"2015-02-06T10:21:45Z","pushed_at":"2015-03-02T09:34:01Z","git_url":"git://github.com/massiveart/MassiveSearchBundle.git","ssh_url":"git@github.com:massiveart/MassiveSearchBundle.git","clone_url":"https://github.com/massiveart/MassiveSearchBundle.git","svn_url":"https://github.com/massiveart/MassiveSearchBundle","homepage":null,"size":1084,"stargazers_count":1,"watchers_count":1,"language":"PHP","has_issues":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":0,"mirror_url":null,"open_issues_count":8,"forks":0,"open_issues":8,"watchers":1,"default_branch":"develop"}},"base":{"label":"massiveart:develop","ref":"develop","sha":"8023d43e1eb6d0df34d300bf909d9c37b8500c3c","user":{"login":"massiveart","id":854731,"avatar_url":"https://avatars.githubusercontent.com/u/854731?v=3","gravatar_id":"","url":"https://api.github.com/users/massiveart","html_url":"https://github.com/massiveart","followers_url":"https://api.github.com/users/massiveart/followers","following_url":"https://api.github.com/users/massiveart/following{/other_user}","gists_url":"https://api.github.com/users/massiveart/gists{/gist_id}","starred_url":"https://api.github.com/users/massiveart/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/massiveart/subscriptions","organizations_url":"https://api.github.com/users/massiveart/orgs","repos_url":"https://api.github.com/users/massiveart/repos","events_url":"https://api.github.com/users/massiveart/events{/privacy}","received_events_url":"https://api.github.com/users/massiveart/received_events","type":"Organization","site_admin":false},"repo":{"id":23216604,"name":"MassiveSearchBundle","full_name":"massiveart/MassiveSearchBundle","owner":{"login":"massiveart","id":854731,"avatar_url":"https://avatars.githubusercontent.com/u/854731?v=3","gravatar_id":"","url":"https://api.github.com/users/massiveart","html_url":"https://github.com/massiveart","followers_url":"https://api.github.com/users/massiveart/followers","following_url":"https://api.github.com/users/massiveart/following{/other_user}","gists_url":"https://api.github.com/users/massiveart/gists{/gist_id}","starred_url":"https://api.github.com/users/massiveart/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/massiveart/subscriptions","organizations_url":"https://api.github.com/users/massiveart/orgs","repos_url":"https://api.github.com/users/massiveart/repos","events_url":"https://api.github.com/users/massiveart/events{/privacy}","received_events_url":"https://api.github.com/users/massiveart/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/massiveart/MassiveSearchBundle","description":"","fork":false,"url":"https://api.github.com/repos/massiveart/MassiveSearchBundle","forks_url":"https://api.github.com/repos/massiveart/MassiveSearchBundle/forks","keys_url":"https://api.github.com/repos/massiveart/MassiveSearchBundle/keys{/key_id}","collaborators_url":"https://api.github.com/repos/massiveart/MassiveSearchBundle/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/massiveart/MassiveSearchBundle/teams","hooks_url":"https://api.github.com/repos/massiveart/MassiveSearchBundle/hooks","issue_events_url":"https://api.github.com/repos/massiveart/MassiveSearchBundle/issues/events{/number}","events_url":"https://api.github.com/repos/massiveart/MassiveSearchBundle/events","assignees_url":"https://api.github.com/repos/massiveart/MassiveSearchBundle/assignees{/user}","branches_url":"https://api.github.com/repos/massiveart/MassiveSearchBundle/branches{/branch}","tags_url":"https://api.github.com/repos/massiveart/MassiveSearchBundle/tags","blobs_url":"https://api.github.com/repos/massiveart/MassiveSearchBundle/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/massiveart/MassiveSearchBundle/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/massiveart/MassiveSearchBundle/git/refs{/sha}","trees_url":"https://api.github.com/repos/massiveart/MassiveSearchBundle/git/trees{/sha}","statuses_url":"https://api.github.com/repos/massiveart/MassiveSearchBundle/statuses/{sha}","languages_url":"https://api.github.com/repos/massiveart/MassiveSearchBundle/languages","stargazers_url":"https://api.github.com/repos/massiveart/MassiveSearchBundle/stargazers","contributors_url":"https://api.github.com/repos/massiveart/MassiveSearchBundle/contributors","subscribers_url":"https://api.github.com/repos/massiveart/MassiveSearchBundle/subscribers","subscription_url":"https://api.github.com/repos/massiveart/MassiveSearchBundle/subscription","commits_url":"https://api.github.com/repos/massiveart/MassiveSearchBundle/commits{/sha}","git_commits_url":"https://api.github.com/repos/massiveart/MassiveSearchBundle/git/commits{/sha}","comments_url":"https://api.github.com/repos/massiveart/MassiveSearchBundle/comments{/number}","issue_comment_url":"https://api.github.com/repos/massiveart/MassiveSearchBundle/issues/comments{/number}","contents_url":"https://api.github.com/repos/massiveart/MassiveSearchBundle/contents/{+path}","compare_url":"https://api.github.com/repos/massiveart/MassiveSearchBundle/compare/{base}...{head}","merges_url":"https://api.github.com/repos/massiveart/MassiveSearchBundle/merges","archive_url":"https://api.github.com/repos/massiveart/MassiveSearchBundle/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/massiveart/MassiveSearchBundle/downloads","issues_url":"https://api.github.com/repos/massiveart/MassiveSearchBundle/issues{/number}","pulls_url":"https://api.github.com/repos/massiveart/MassiveSearchBundle/pulls{/number}","milestones_url":"https://api.github.com/repos/massiveart/MassiveSearchBundle/milestones{/number}","notifications_url":"https://api.github.com/repos/massiveart/MassiveSearchBundle/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/massiveart/MassiveSearchBundle/labels{/name}","releases_url":"https://api.github.com/repos/massiveart/MassiveSearchBundle/releases{/id}","created_at":"2014-08-22T07:19:25Z","updated_at":"2015-02-06T10:21:45Z","pushed_at":"2015-03-02T09:34:01Z","git_url":"git://github.com/massiveart/MassiveSearchBundle.git","ssh_url":"git@github.com:massiveart/MassiveSearchBundle.git","clone_url":"https://github.com/massiveart/MassiveSearchBundle.git","svn_url":"https://github.com/massiveart/MassiveSearchBundle","homepage":null,"size":1084,"stargazers_count":1,"watchers_count":1,"language":"PHP","has_issues":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":0,"mirror_url":null,"open_issues_count":8,"forks":0,"open_issues":8,"watchers":1,"default_branch":"develop"}},"_links":{"self":{"href":"https://api.github.com/repos/massiveart/MassiveSearchBundle/pulls/18"},"html":{"href":"https://github.com/massiveart/MassiveSearchBundle/pull/18"},"issue":{"href":"https://api.github.com/repos/massiveart/MassiveSearchBundle/issues/18"},"comments":{"href":"https://api.github.com/repos/massiveart/MassiveSearchBundle/issues/18/comments"},"review_comments":{"href":"https://api.github.com/repos/massiveart/MassiveSearchBundle/pulls/18/comments"},"review_comment":{"href":"https://api.github.com/repos/massiveart/MassiveSearchBundle/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/massiveart/MassiveSearchBundle/pulls/18/commits"},"statuses":{"href":"https://api.github.com/repos/massiveart/MassiveSearchBundle/statuses/773d691f879b66c0388469418f947ba060ba99f6"}}}}