{"action":"created","comment":{"url":"https://api.github.com/repos/SpineEventEngine/todo-list/pulls/comments/93488680","pull_request_review_id":14015899,"id":93488680,"diff_hunk":"@@ -0,0 +1,333 @@\n+/*\n+ * Copyright 2016, TeamDev Ltd. All rights reserved.\n+ *\n+ * Redistribution and use in source and/or binary forms, with or without\n+ * modification, must retain the above copyright notice and the following\n+ * disclaimer.\n+ *\n+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n+ * \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n+ */\n+\n+package org.spine3.examples.todolist.projection;\n+\n+import org.spine3.examples.todolist.LabelAssignedToTask;\n+import org.spine3.examples.todolist.LabelDetails;\n+import org.spine3.examples.todolist.LabelDetailsUpdated;\n+import org.spine3.examples.todolist.LabelRemovedFromTask;\n+import org.spine3.examples.todolist.TaskCompleted;\n+import org.spine3.examples.todolist.TaskDescriptionUpdated;\n+import org.spine3.examples.todolist.TaskDueDateUpdated;\n+import org.spine3.examples.todolist.TaskId;\n+import org.spine3.examples.todolist.TaskLabelId;\n+import org.spine3.examples.todolist.TaskPriorityUpdated;\n+import org.spine3.examples.todolist.TaskReopened;\n+import org.spine3.examples.todolist.view.TaskListView;\n+import org.spine3.examples.todolist.view.TaskView;\n+\n+import java.util.ArrayList;\n+import java.util.List;\n+\n+/**\n+ * Class provides methods to manipulate and handle views.\n+ *\n+ * @author Illia Shepilov\n+ */\n+/* package */ class ProjectionHelper {\n+\n+    /**\n+     * Prevent instantiation.\n+     */\n+    private ProjectionHelper() {\n+        throw new UnsupportedOperationException();\n+    }\n+\n+    /**\n+     * Removes {@link TaskView} from list of task view by specified task id.\n+     *\n+     * @param views list of the {@link TaskView}\n+     * @param id    task's id\n+     * @return {@link TaskListView} without deleted task view\n+     */\n+    /* package */\n+    static TaskListView removeViewByTaskId(List<TaskView> views, TaskId id) {\n+        final TaskView taskView = views.stream()\n+                                       .filter(t -> t.getId()\n+                                                     .equals(id))\n+                                       .findFirst()\n+                                       .orElse(null);\n+        views.remove(taskView);\n+        final TaskListView result = TaskListView.newBuilder()\n+                                                .addAllItems(views)\n+                                                .build();\n+        return result;\n+    }\n+\n+    /**\n+     * Removes {@link TaskView} from list of task view by specified task label id.\n+     *\n+     * @param views list of the {@link TaskView}\n+     * @param id    task label id\n+     * @return {@link TaskListView} without deleted task view\n+     */\n+    /*package*/\n+    static TaskListView removeViewByLabelId(List<TaskView> views, TaskLabelId id) {\n+        final TaskView taskView = views.stream()\n+                                       .filter(t -> t.getLabelId()\n+                                                     .equals(id))\n+                                       .findFirst()\n+                                       .orElse(null);\n+        if (taskView != null) {\n+            views.remove(taskView);\n+        }\n+\n+        final TaskListView result = TaskListView.newBuilder()\n+                                                .addAllItems(views)\n+                                                .build();\n+        return result;\n+    }\n+\n+    /**\n+     * Updates {@link TaskView} label details by specified {@link TaskLabelId}.\n+     *\n+     * @param views list of {@link TaskView}\n+     * @param event {@link LabelDetailsUpdated} instance\n+     * @return list of {@link TaskView} with updated {@link LabelDetails}\n+     */\n+    /* package */\n+    static List<TaskView> constructTaskViewList(List<TaskView> views, LabelDetailsUpdated event) {\n+        final List<TaskView> updatedList = new ArrayList<>();\n+        for (TaskView view : views) {\n+            TaskView addedView = view;\n+            final boolean willUpdate = view.getLabelId()\n+                                           .equals(event.getId());\n+            if (willUpdate) {\n+                final LabelDetails labelDetails = event.getNewDetails();\n+                addedView = TaskView.newBuilder()\n+                                    .setLabelColor(labelDetails.getColor())\n+                                    .setDueDate(view.getDueDate())\n+                                    .setPriority(view.getPriority())\n+                                    .setDescription(view.getDescription())\n+                                    .setLabelId(view.getLabelId())\n+                                    .build();\n+            }\n+            updatedList.add(addedView);\n+        }\n+        return updatedList;\n+    }\n+\n+    /**\n+     * Removes label from each {@link TaskView}, which contains into list.\n+     *\n+     * @param views list of {@link TaskView}\n+     * @param event {@link LabelRemovedFromTask} instance\n+     * @return list of {@link TaskView} which does not contains specified label\n+     */\n+    /* package */\n+    static List<TaskView> constructTaskViewList(List<TaskView> views, LabelRemovedFromTask event) {\n+        final List<TaskView> updatedList = new ArrayList<>();\n+        for (TaskView view : views) {\n+            TaskView addedView = view;\n+            final boolean isRemoved = view.getId()\n+                                          .equals(event.getId());\n+            if (isRemoved) {\n+                addedView = TaskView.newBuilder()\n+                                    .setDueDate(view.getDueDate())\n+                                    .setPriority(view.getPriority())\n+                                    .setDescription(view.getDescription())\n+                                    .setLabelId(TaskLabelId.getDefaultInstance())\n+                                    .build();\n+            }\n+            updatedList.add(addedView);\n+        }\n+        return updatedList;\n+    }\n+\n+    /**\n+     * Add label to {@link TaskView}, which contains into list.\n+     *\n+     * @param views list of {@link TaskView}\n+     * @param event {@link LabelAssignedToTask} instance\n+     * @return list of {@link TaskView} which contains specified label\n+     */\n+    /* package */\n+    static List<TaskView> constructTaskViewList(List<TaskView> views, LabelAssignedToTask event) {\n+        final List<TaskView> updatedList = new ArrayList<>();\n+        for (TaskView view : views) {\n+            TaskView addedView = view;\n+            final boolean willUpdate = view.getId()\n+                                           .equals(event.getId());\n+            if (willUpdate) {\n+                addedView = TaskView.newBuilder()\n+                                    .setId(event.getId())\n+                                    .setLabelId(event.getLabelId())\n+                                    .setDueDate(view.getDueDate())\n+                                    .setPriority(view.getPriority())\n+                                    .setDescription(view.getDescription())\n+                                    .setLabelColor(view.getLabelColor())\n+                                    .build();\n+            }\n+            updatedList.add(addedView);\n+        }\n+        return updatedList;\n+    }\n+\n+    /**\n+     * Mark each {@link TaskView} into list as uncompleted, if {@link TaskId} of task view equals task id of event.\n+     *\n+     * @param views list of {@link TaskView}\n+     * @param event {@link TaskReopened} instance\n+     * @return list of {@link TaskView}\n+     */\n+    /* package */\n+    static List<TaskView> constructTaskViewList(List<TaskView> views, TaskReopened event) {","path":"api-java/src/main/java/org/spine3/examples/todolist/projection/ProjectionHelper.java","position":192,"original_position":192,"commit_id":"bea45b60a3e552f0a433169ed4c618a417766c2f","original_commit_id":"925e81998d614439d0a2edb8a805780d495cca51","user":{"login":"armiol","id":82468,"avatar_url":"https://avatars.githubusercontent.com/u/82468?v=3","gravatar_id":"","url":"https://api.github.com/users/armiol","html_url":"https://github.com/armiol","followers_url":"https://api.github.com/users/armiol/followers","following_url":"https://api.github.com/users/armiol/following{/other_user}","gists_url":"https://api.github.com/users/armiol/gists{/gist_id}","starred_url":"https://api.github.com/users/armiol/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/armiol/subscriptions","organizations_url":"https://api.github.com/users/armiol/orgs","repos_url":"https://api.github.com/users/armiol/repos","events_url":"https://api.github.com/users/armiol/events{/privacy}","received_events_url":"https://api.github.com/users/armiol/received_events","type":"User","site_admin":false},"body":"Is there any way to reduce the code duplication? I.e. have an extracted method for `TaskViewList`s and another for label views?","created_at":"2016-12-21T18:04:17Z","updated_at":"2016-12-21T18:17:42Z","html_url":"https://github.com/SpineEventEngine/todo-list/pull/2#discussion_r93488680","pull_request_url":"https://api.github.com/repos/SpineEventEngine/todo-list/pulls/2","_links":{"self":{"href":"https://api.github.com/repos/SpineEventEngine/todo-list/pulls/comments/93488680"},"html":{"href":"https://github.com/SpineEventEngine/todo-list/pull/2#discussion_r93488680"},"pull_request":{"href":"https://api.github.com/repos/SpineEventEngine/todo-list/pulls/2"}}},"pull_request":{"url":"https://api.github.com/repos/SpineEventEngine/todo-list/pulls/2","id":97109010,"html_url":"https://github.com/SpineEventEngine/todo-list/pull/2","diff_url":"https://github.com/SpineEventEngine/todo-list/pull/2.diff","patch_url":"https://github.com/SpineEventEngine/todo-list/pull/2.patch","issue_url":"https://api.github.com/repos/SpineEventEngine/todo-list/issues/2","number":2,"state":"open","locked":false,"title":"Projections and aggregates definition","user":{"login":"IlliaShepilov","id":24410839,"avatar_url":"https://avatars.githubusercontent.com/u/24410839?v=3","gravatar_id":"","url":"https://api.github.com/users/IlliaShepilov","html_url":"https://github.com/IlliaShepilov","followers_url":"https://api.github.com/users/IlliaShepilov/followers","following_url":"https://api.github.com/users/IlliaShepilov/following{/other_user}","gists_url":"https://api.github.com/users/IlliaShepilov/gists{/gist_id}","starred_url":"https://api.github.com/users/IlliaShepilov/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/IlliaShepilov/subscriptions","organizations_url":"https://api.github.com/users/IlliaShepilov/orgs","repos_url":"https://api.github.com/users/IlliaShepilov/repos","events_url":"https://api.github.com/users/IlliaShepilov/events{/privacy}","received_events_url":"https://api.github.com/users/IlliaShepilov/received_events","type":"User","site_admin":false},"body":"Summary of changes:\r\n\r\n- Created TaskAggregate\r\n- Implemented tests for TaskAggregate\r\n- Created TaskLabelAggregate\r\n- Implemented tests for TaskLabelAggregate\r\n- Created draft version for Projections \r\n- Projections partially covered by tests","created_at":"2016-12-08T11:59:14Z","updated_at":"2016-12-21T18:18:43Z","closed_at":null,"merged_at":null,"merge_commit_sha":"24800bb6beba2ab33b9b7ff78edecb8ac6301972","assignee":{"login":"armiol","id":82468,"avatar_url":"https://avatars.githubusercontent.com/u/82468?v=3","gravatar_id":"","url":"https://api.github.com/users/armiol","html_url":"https://github.com/armiol","followers_url":"https://api.github.com/users/armiol/followers","following_url":"https://api.github.com/users/armiol/following{/other_user}","gists_url":"https://api.github.com/users/armiol/gists{/gist_id}","starred_url":"https://api.github.com/users/armiol/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/armiol/subscriptions","organizations_url":"https://api.github.com/users/armiol/orgs","repos_url":"https://api.github.com/users/armiol/repos","events_url":"https://api.github.com/users/armiol/events{/privacy}","received_events_url":"https://api.github.com/users/armiol/received_events","type":"User","site_admin":false},"assignees":[{"login":"armiol","id":82468,"avatar_url":"https://avatars.githubusercontent.com/u/82468?v=3","gravatar_id":"","url":"https://api.github.com/users/armiol","html_url":"https://github.com/armiol","followers_url":"https://api.github.com/users/armiol/followers","following_url":"https://api.github.com/users/armiol/following{/other_user}","gists_url":"https://api.github.com/users/armiol/gists{/gist_id}","starred_url":"https://api.github.com/users/armiol/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/armiol/subscriptions","organizations_url":"https://api.github.com/users/armiol/orgs","repos_url":"https://api.github.com/users/armiol/repos","events_url":"https://api.github.com/users/armiol/events{/privacy}","received_events_url":"https://api.github.com/users/armiol/received_events","type":"User","site_admin":false}],"milestone":null,"commits_url":"https://api.github.com/repos/SpineEventEngine/todo-list/pulls/2/commits","review_comments_url":"https://api.github.com/repos/SpineEventEngine/todo-list/pulls/2/comments","review_comment_url":"https://api.github.com/repos/SpineEventEngine/todo-list/pulls/comments{/number}","comments_url":"https://api.github.com/repos/SpineEventEngine/todo-list/issues/2/comments","statuses_url":"https://api.github.com/repos/SpineEventEngine/todo-list/statuses/bea45b60a3e552f0a433169ed4c618a417766c2f","head":{"label":"SpineEventEngine:projections_and_aggregates_definition","ref":"projections_and_aggregates_definition","sha":"bea45b60a3e552f0a433169ed4c618a417766c2f","user":{"login":"SpineEventEngine","id":12821626,"avatar_url":"https://avatars.githubusercontent.com/u/12821626?v=3","gravatar_id":"","url":"https://api.github.com/users/SpineEventEngine","html_url":"https://github.com/SpineEventEngine","followers_url":"https://api.github.com/users/SpineEventEngine/followers","following_url":"https://api.github.com/users/SpineEventEngine/following{/other_user}","gists_url":"https://api.github.com/users/SpineEventEngine/gists{/gist_id}","starred_url":"https://api.github.com/users/SpineEventEngine/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/SpineEventEngine/subscriptions","organizations_url":"https://api.github.com/users/SpineEventEngine/orgs","repos_url":"https://api.github.com/users/SpineEventEngine/repos","events_url":"https://api.github.com/users/SpineEventEngine/events{/privacy}","received_events_url":"https://api.github.com/users/SpineEventEngine/received_events","type":"Organization","site_admin":false},"repo":{"id":75753953,"name":"todo-list","full_name":"SpineEventEngine/todo-list","owner":{"login":"SpineEventEngine","id":12821626,"avatar_url":"https://avatars.githubusercontent.com/u/12821626?v=3","gravatar_id":"","url":"https://api.github.com/users/SpineEventEngine","html_url":"https://github.com/SpineEventEngine","followers_url":"https://api.github.com/users/SpineEventEngine/followers","following_url":"https://api.github.com/users/SpineEventEngine/following{/other_user}","gists_url":"https://api.github.com/users/SpineEventEngine/gists{/gist_id}","starred_url":"https://api.github.com/users/SpineEventEngine/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/SpineEventEngine/subscriptions","organizations_url":"https://api.github.com/users/SpineEventEngine/orgs","repos_url":"https://api.github.com/users/SpineEventEngine/repos","events_url":"https://api.github.com/users/SpineEventEngine/events{/privacy}","received_events_url":"https://api.github.com/users/SpineEventEngine/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/SpineEventEngine/todo-list","description":"ToDo List example application","fork":false,"url":"https://api.github.com/repos/SpineEventEngine/todo-list","forks_url":"https://api.github.com/repos/SpineEventEngine/todo-list/forks","keys_url":"https://api.github.com/repos/SpineEventEngine/todo-list/keys{/key_id}","collaborators_url":"https://api.github.com/repos/SpineEventEngine/todo-list/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/SpineEventEngine/todo-list/teams","hooks_url":"https://api.github.com/repos/SpineEventEngine/todo-list/hooks","issue_events_url":"https://api.github.com/repos/SpineEventEngine/todo-list/issues/events{/number}","events_url":"https://api.github.com/repos/SpineEventEngine/todo-list/events","assignees_url":"https://api.github.com/repos/SpineEventEngine/todo-list/assignees{/user}","branches_url":"https://api.github.com/repos/SpineEventEngine/todo-list/branches{/branch}","tags_url":"https://api.github.com/repos/SpineEventEngine/todo-list/tags","blobs_url":"https://api.github.com/repos/SpineEventEngine/todo-list/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/SpineEventEngine/todo-list/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/SpineEventEngine/todo-list/git/refs{/sha}","trees_url":"https://api.github.com/repos/SpineEventEngine/todo-list/git/trees{/sha}","statuses_url":"https://api.github.com/repos/SpineEventEngine/todo-list/statuses/{sha}","languages_url":"https://api.github.com/repos/SpineEventEngine/todo-list/languages","stargazers_url":"https://api.github.com/repos/SpineEventEngine/todo-list/stargazers","contributors_url":"https://api.github.com/repos/SpineEventEngine/todo-list/contributors","subscribers_url":"https://api.github.com/repos/SpineEventEngine/todo-list/subscribers","subscription_url":"https://api.github.com/repos/SpineEventEngine/todo-list/subscription","commits_url":"https://api.github.com/repos/SpineEventEngine/todo-list/commits{/sha}","git_commits_url":"https://api.github.com/repos/SpineEventEngine/todo-list/git/commits{/sha}","comments_url":"https://api.github.com/repos/SpineEventEngine/todo-list/comments{/number}","issue_comment_url":"https://api.github.com/repos/SpineEventEngine/todo-list/issues/comments{/number}","contents_url":"https://api.github.com/repos/SpineEventEngine/todo-list/contents/{+path}","compare_url":"https://api.github.com/repos/SpineEventEngine/todo-list/compare/{base}...{head}","merges_url":"https://api.github.com/repos/SpineEventEngine/todo-list/merges","archive_url":"https://api.github.com/repos/SpineEventEngine/todo-list/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/SpineEventEngine/todo-list/downloads","issues_url":"https://api.github.com/repos/SpineEventEngine/todo-list/issues{/number}","pulls_url":"https://api.github.com/repos/SpineEventEngine/todo-list/pulls{/number}","milestones_url":"https://api.github.com/repos/SpineEventEngine/todo-list/milestones{/number}","notifications_url":"https://api.github.com/repos/SpineEventEngine/todo-list/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/SpineEventEngine/todo-list/labels{/name}","releases_url":"https://api.github.com/repos/SpineEventEngine/todo-list/releases{/id}","deployments_url":"https://api.github.com/repos/SpineEventEngine/todo-list/deployments","created_at":"2016-12-06T17:17:33Z","updated_at":"2016-12-07T10:00:53Z","pushed_at":"2016-12-21T18:17:43Z","git_url":"git://github.com/SpineEventEngine/todo-list.git","ssh_url":"git@github.com:SpineEventEngine/todo-list.git","clone_url":"https://github.com/SpineEventEngine/todo-list.git","svn_url":"https://github.com/SpineEventEngine/todo-list","homepage":null,"size":362,"stargazers_count":0,"watchers_count":0,"language":"Protocol Buffer","has_issues":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":0,"mirror_url":null,"open_issues_count":1,"forks":0,"open_issues":1,"watchers":0,"default_branch":"master"}},"base":{"label":"SpineEventEngine:master","ref":"master","sha":"689c2a61aea5d3e4cc1cb270f3a4ffb0a1222f4b","user":{"login":"SpineEventEngine","id":12821626,"avatar_url":"https://avatars.githubusercontent.com/u/12821626?v=3","gravatar_id":"","url":"https://api.github.com/users/SpineEventEngine","html_url":"https://github.com/SpineEventEngine","followers_url":"https://api.github.com/users/SpineEventEngine/followers","following_url":"https://api.github.com/users/SpineEventEngine/following{/other_user}","gists_url":"https://api.github.com/users/SpineEventEngine/gists{/gist_id}","starred_url":"https://api.github.com/users/SpineEventEngine/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/SpineEventEngine/subscriptions","organizations_url":"https://api.github.com/users/SpineEventEngine/orgs","repos_url":"https://api.github.com/users/SpineEventEngine/repos","events_url":"https://api.github.com/users/SpineEventEngine/events{/privacy}","received_events_url":"https://api.github.com/users/SpineEventEngine/received_events","type":"Organization","site_admin":false},"repo":{"id":75753953,"name":"todo-list","full_name":"SpineEventEngine/todo-list","owner":{"login":"SpineEventEngine","id":12821626,"avatar_url":"https://avatars.githubusercontent.com/u/12821626?v=3","gravatar_id":"","url":"https://api.github.com/users/SpineEventEngine","html_url":"https://github.com/SpineEventEngine","followers_url":"https://api.github.com/users/SpineEventEngine/followers","following_url":"https://api.github.com/users/SpineEventEngine/following{/other_user}","gists_url":"https://api.github.com/users/SpineEventEngine/gists{/gist_id}","starred_url":"https://api.github.com/users/SpineEventEngine/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/SpineEventEngine/subscriptions","organizations_url":"https://api.github.com/users/SpineEventEngine/orgs","repos_url":"https://api.github.com/users/SpineEventEngine/repos","events_url":"https://api.github.com/users/SpineEventEngine/events{/privacy}","received_events_url":"https://api.github.com/users/SpineEventEngine/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/SpineEventEngine/todo-list","description":"ToDo List example application","fork":false,"url":"https://api.github.com/repos/SpineEventEngine/todo-list","forks_url":"https://api.github.com/repos/SpineEventEngine/todo-list/forks","keys_url":"https://api.github.com/repos/SpineEventEngine/todo-list/keys{/key_id}","collaborators_url":"https://api.github.com/repos/SpineEventEngine/todo-list/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/SpineEventEngine/todo-list/teams","hooks_url":"https://api.github.com/repos/SpineEventEngine/todo-list/hooks","issue_events_url":"https://api.github.com/repos/SpineEventEngine/todo-list/issues/events{/number}","events_url":"https://api.github.com/repos/SpineEventEngine/todo-list/events","assignees_url":"https://api.github.com/repos/SpineEventEngine/todo-list/assignees{/user}","branches_url":"https://api.github.com/repos/SpineEventEngine/todo-list/branches{/branch}","tags_url":"https://api.github.com/repos/SpineEventEngine/todo-list/tags","blobs_url":"https://api.github.com/repos/SpineEventEngine/todo-list/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/SpineEventEngine/todo-list/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/SpineEventEngine/todo-list/git/refs{/sha}","trees_url":"https://api.github.com/repos/SpineEventEngine/todo-list/git/trees{/sha}","statuses_url":"https://api.github.com/repos/SpineEventEngine/todo-list/statuses/{sha}","languages_url":"https://api.github.com/repos/SpineEventEngine/todo-list/languages","stargazers_url":"https://api.github.com/repos/SpineEventEngine/todo-list/stargazers","contributors_url":"https://api.github.com/repos/SpineEventEngine/todo-list/contributors","subscribers_url":"https://api.github.com/repos/SpineEventEngine/todo-list/subscribers","subscription_url":"https://api.github.com/repos/SpineEventEngine/todo-list/subscription","commits_url":"https://api.github.com/repos/SpineEventEngine/todo-list/commits{/sha}","git_commits_url":"https://api.github.com/repos/SpineEventEngine/todo-list/git/commits{/sha}","comments_url":"https://api.github.com/repos/SpineEventEngine/todo-list/comments{/number}","issue_comment_url":"https://api.github.com/repos/SpineEventEngine/todo-list/issues/comments{/number}","contents_url":"https://api.github.com/repos/SpineEventEngine/todo-list/contents/{+path}","compare_url":"https://api.github.com/repos/SpineEventEngine/todo-list/compare/{base}...{head}","merges_url":"https://api.github.com/repos/SpineEventEngine/todo-list/merges","archive_url":"https://api.github.com/repos/SpineEventEngine/todo-list/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/SpineEventEngine/todo-list/downloads","issues_url":"https://api.github.com/repos/SpineEventEngine/todo-list/issues{/number}","pulls_url":"https://api.github.com/repos/SpineEventEngine/todo-list/pulls{/number}","milestones_url":"https://api.github.com/repos/SpineEventEngine/todo-list/milestones{/number}","notifications_url":"https://api.github.com/repos/SpineEventEngine/todo-list/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/SpineEventEngine/todo-list/labels{/name}","releases_url":"https://api.github.com/repos/SpineEventEngine/todo-list/releases{/id}","deployments_url":"https://api.github.com/repos/SpineEventEngine/todo-list/deployments","created_at":"2016-12-06T17:17:33Z","updated_at":"2016-12-07T10:00:53Z","pushed_at":"2016-12-21T18:17:43Z","git_url":"git://github.com/SpineEventEngine/todo-list.git","ssh_url":"git@github.com:SpineEventEngine/todo-list.git","clone_url":"https://github.com/SpineEventEngine/todo-list.git","svn_url":"https://github.com/SpineEventEngine/todo-list","homepage":null,"size":362,"stargazers_count":0,"watchers_count":0,"language":"Protocol Buffer","has_issues":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":0,"mirror_url":null,"open_issues_count":1,"forks":0,"open_issues":1,"watchers":0,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/SpineEventEngine/todo-list/pulls/2"},"html":{"href":"https://github.com/SpineEventEngine/todo-list/pull/2"},"issue":{"href":"https://api.github.com/repos/SpineEventEngine/todo-list/issues/2"},"comments":{"href":"https://api.github.com/repos/SpineEventEngine/todo-list/issues/2/comments"},"review_comments":{"href":"https://api.github.com/repos/SpineEventEngine/todo-list/pulls/2/comments"},"review_comment":{"href":"https://api.github.com/repos/SpineEventEngine/todo-list/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/SpineEventEngine/todo-list/pulls/2/commits"},"statuses":{"href":"https://api.github.com/repos/SpineEventEngine/todo-list/statuses/bea45b60a3e552f0a433169ed4c618a417766c2f"}}}}
{"actor":{"display_login":"armiol"}}