{"action":"created","comment":{"url":"https://api.github.com/repos/Tram-One/tram-one/pulls/comments/221441960","pull_request_review_id":160095668,"id":221441960,"node_id":"MDI0OlB1bGxSZXF1ZXN0UmV2aWV3Q29tbWVudDIyMTQ0MTk2MA==","diff_hunk":"@@ -58,66 +103,144 @@ class Tram {\n       })\n     }\n \n+    // update our internal router, and if this happens to be the last call update the rlite router\n     this.internalRouter[path] = (params) => (store, actions) => page(store, actions, params)\n     this.router = rlite(this.internalRouter[this.defaultRoute], this.internalRouter)\n \n     return this\n   }\n \n+  /**\n+   * start the app by mounting a path on some DOM or css selector\n+   * - for complete documentation, please refer to http://tram-one.io/#app-start\n+   *\n+   * @param {*} selector\n+   * @param {string} [pathName]\n+   */\n   start(selector, pathName) {\n+    // if webEngine is defined, write the inital values and create a listener to update them\n+    // it is important that we update this before trying to re-mount the app\n+    if (this.webEngine) {\n+      this.webEngine.store = this.engine.store\n+      this.webEngine.actions = this.engine.actions\n+\n+      this.engine.addListener((store, actions) => {\n+        this.webEngine.store = store\n+        this.webEngine.actions = actions\n+      })\n+    }\n+\n+    // add a listener that will re-mount the app everytime an action is triggered\n     this.engine.addListener((store, actions) => {\n       this.mount(selector, pathName, store, actions)\n     })\n \n+    // if webStorage is defined, wire it into hover-engine with hover-battery\n+    // (effectively, set up the initial store values and add appropriate listeners to write to webStorage)\n     if (this.webStorage) {\n       this.engine.addActions(battery(this.webStorage).actions)\n       this.engine.addListener(battery(this.webStorage).listener)\n     }\n \n+    // wire up urlListener so that we remount whenever the url changes\n     urlListener(() => {\n       this.mount(selector, pathName)\n     })\n \n+    // trigger an initial mount\n     this.mount(selector, pathName)\n \n     return this\n   }\n \n+  /**\n+   * internal method for building and updating / creating the app\n+   * - do not call this to start your app\n+   * - for complete documentation, please refer to http://tram-one.io/#app-mount\n+   *\n+   * @param {*} selector\n+   * @param {string} [pathName]\n+   * @param {object} store\n+   * @param {object} actions\n+   */\n   mount(selector, pathName, store, actions) {\n     assert.ok(selector !== undefined, 'Tram-One: selector should be a DOM element or CSS selection string')\n \n+    // if the selector is a string, try to find the element,\n+    // otherwise it's probably DOM that we should write directly to\n     const target = (typeof selector) === 'string' ? document.querySelector(selector) : selector\n     if (target === null) {\n       console.warn('Tram-One: could not find target, is the element on the page yet?')\n     }\n+\n+    // build a div to render the app on\n+    // (if it doesn't exist as a child of the selector, create one first)\n     if (!target.firstElementChild) {\n       const targetChild = document.createElement('div')\n       target.appendChild(targetChild)\n     }\n     const targetChild = target.firstElementChild\n \n+    // use the pathname provided, or pull the url from the window object\n     const routePath = pathName || window.location.href.replace(window.location.origin, '')\n+\n+    // collect all the DOM events that we should be keeping track of.\n+    // these events are provided by belit and consumed by tatermorph.\n+    // (events are strange and actually aren't natively stored on Nodes,\n+    // but we have to keep track of them so we can know to add or\n+    // remove them between renders)\n     const getEvents = (newNode, oldNode) => {\n       return [].concat(newNode.events).concat(oldNode.events)\n     }\n+\n+    // update our child element with a new version of the app\n+    // tatermorph knows how to intelligently trigger only diffs that matter\n     morph(targetChild, this.toNode(routePath, store, actions), getEvents)\n \n     return this\n   }\n \n-  toNode(pathName, state, actions) {\n+  /**\n+   * generate a DOM Node Tree based on a path and a store\n+   * - for complete documentation, please refer to http://tram-one.io/#app-toNode\n+   *\n+   * @param {string} pathName\n+   * @param {object} [store]\n+   * @param {object} [actions]\n+   *\n+   * @return {HTMLDivElement}\n+   */\n+  toNode(pathName, store, actions) {","path":"tram-one.js","position":201,"original_position":201,"commit_id":"ba3440fcfc9b41efa3ed36b78e0e6cd4c1f44faa","original_commit_id":"ba3440fcfc9b41efa3ed36b78e0e6cd4c1f44faa","user":{"login":"ethanjurman","id":1131494,"node_id":"MDQ6VXNlcjExMzE0OTQ=","avatar_url":"https://avatars1.githubusercontent.com/u/1131494?v=4","gravatar_id":"","url":"https://api.github.com/users/ethanjurman","html_url":"https://github.com/ethanjurman","followers_url":"https://api.github.com/users/ethanjurman/followers","following_url":"https://api.github.com/users/ethanjurman/following{/other_user}","gists_url":"https://api.github.com/users/ethanjurman/gists{/gist_id}","starred_url":"https://api.github.com/users/ethanjurman/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/ethanjurman/subscriptions","organizations_url":"https://api.github.com/users/ethanjurman/orgs","repos_url":"https://api.github.com/users/ethanjurman/repos","events_url":"https://api.github.com/users/ethanjurman/events{/privacy}","received_events_url":"https://api.github.com/users/ethanjurman/received_events","type":"User","site_admin":false},"body":"Thoughts of using optional parameters here? Obviously this wouldn't be equivalent, but I think if someone wants to pass in a false-y store and actions you shouldn't be overriding them.","created_at":"2018-09-29T22:47:30Z","updated_at":"2018-09-29T22:47:30Z","html_url":"https://github.com/Tram-One/tram-one/pull/103#discussion_r221441960","pull_request_url":"https://api.github.com/repos/Tram-One/tram-one/pulls/103","author_association":"CONTRIBUTOR","_links":{"self":{"href":"https://api.github.com/repos/Tram-One/tram-one/pulls/comments/221441960"},"html":{"href":"https://github.com/Tram-One/tram-one/pull/103#discussion_r221441960"},"pull_request":{"href":"https://api.github.com/repos/Tram-One/tram-one/pulls/103"}}},"pull_request":{"url":"https://api.github.com/repos/Tram-One/tram-one/pulls/103","id":219158983,"node_id":"MDExOlB1bGxSZXF1ZXN0MjE5MTU4OTgz","html_url":"https://github.com/Tram-One/tram-one/pull/103","diff_url":"https://github.com/Tram-One/tram-one/pull/103.diff","patch_url":"https://github.com/Tram-One/tram-one/pull/103.patch","issue_url":"https://api.github.com/repos/Tram-One/tram-one/issues/103","number":103,"state":"open","locked":false,"title":"Docs and webEngine option","user":{"login":"JRJurman","id":326557,"node_id":"MDQ6VXNlcjMyNjU1Nw==","avatar_url":"https://avatars1.githubusercontent.com/u/326557?v=4","gravatar_id":"","url":"https://api.github.com/users/JRJurman","html_url":"https://github.com/JRJurman","followers_url":"https://api.github.com/users/JRJurman/followers","following_url":"https://api.github.com/users/JRJurman/following{/other_user}","gists_url":"https://api.github.com/users/JRJurman/gists{/gist_id}","starred_url":"https://api.github.com/users/JRJurman/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/JRJurman/subscriptions","organizations_url":"https://api.github.com/users/JRJurman/orgs","repos_url":"https://api.github.com/users/JRJurman/repos","events_url":"https://api.github.com/users/JRJurman/events{/privacy}","received_events_url":"https://api.github.com/users/JRJurman/received_events","type":"User","site_admin":false},"body":"Resolves #102 \r\n\r\n## JSDoc\r\n\r\nThis PR adds JSDoc syntax enough so that users with IDEs should get type hints and descriptions on calling methods. I'm still reserving most of the documentation to the website (since that offers infinitely more clarity).\r\n\r\n## `options.webEngine`\r\n\r\nThis PR also adds a `webEngine` option that can be passed into the Tram-One constructor. This option allows users to pass in an object that will have the latest store and actions object.\r\n\r\nWith this, we can enable \"connected\" components, in a similar way to redux connected components, that don't require values or actions to be passed several tags down.\r\n\r\nIn the following example (found under `examples/using-webEngine`) we've passed in `{webEngine: window.engine}` into the app constructor. Rather than pulling from attrs, we can now pull directly from `window.engine`.\r\n\r\n```javascript\r\nconst Tram = require('../../tram-one')\r\nconst html = Tram.html()\r\n\r\nmodule.exports = (attrs, children) => {\r\n  const {store, actions} = window.engine\r\n\r\n  const incrementCount = () => {\r\n    console.log(`I've been clicked!`)\r\n    actions.click()\r\n  }\r\n\r\n  return html`\r\n    <button onclick=${incrementCount}>\r\n      This button has been clicked ${store.counter} times!\r\n    </button>\r\n  `\r\n}\r\n```\r\n\r\nYou could also build out a `connect` method if you wanted, that returns this method, with the attrs filled in by window.engine (this would effectively mimic the mapStateToProps and connect method that redux provides).\r\n\r\n```javascript\r\nconst Tram = require('../../tram-one')\r\nconst html = Tram.html()\r\n\r\n// this is a similar example of counter-button, but using\r\n// normal attrs, and exposing both a connected, and non-connected\r\n// variant (useful for testing and sharing across projects)\r\n\r\nconst counterButton = (attrs, children) => {\r\n  const incrementCount = () => {\r\n    console.log(`I've been clicked!`)\r\n    attrs.onclick()\r\n  }\r\n\r\n  return html`\r\n    <button onclick=${incrementCount}>\r\n      This button has been clicked ${attrs.counter} times!\r\n    </button>\r\n  `\r\n}\r\n\r\nmodule.exports = (attrs, children) => {\r\n  const {store, actions} = window.engine\r\n  const connectedAttrs = Object.assign({}, attrs, {counter: store.counter, onclick: actions.click})\r\n  return counterButton(connectedAttrs, children)\r\n}\r\n\r\nmodule.exports.counterButton = counterButton\r\n```","created_at":"2018-09-29T17:16:22Z","updated_at":"2018-09-29T22:47:30Z","closed_at":null,"merged_at":null,"merge_commit_sha":"fbcc5125117f828eea54b519ca4c3b1be7531637","assignee":null,"assignees":[],"requested_reviewers":[],"requested_teams":[],"labels":[],"milestone":null,"commits_url":"https://api.github.com/repos/Tram-One/tram-one/pulls/103/commits","review_comments_url":"https://api.github.com/repos/Tram-One/tram-one/pulls/103/comments","review_comment_url":"https://api.github.com/repos/Tram-One/tram-one/pulls/comments{/number}","comments_url":"https://api.github.com/repos/Tram-One/tram-one/issues/103/comments","statuses_url":"https://api.github.com/repos/Tram-One/tram-one/statuses/ba3440fcfc9b41efa3ed36b78e0e6cd4c1f44faa","head":{"label":"Tram-One:docs-and-webEngine","ref":"docs-and-webEngine","sha":"ba3440fcfc9b41efa3ed36b78e0e6cd4c1f44faa","user":{"login":"Tram-One","id":32467507,"node_id":"MDEyOk9yZ2FuaXphdGlvbjMyNDY3NTA3","avatar_url":"https://avatars3.githubusercontent.com/u/32467507?v=4","gravatar_id":"","url":"https://api.github.com/users/Tram-One","html_url":"https://github.com/Tram-One","followers_url":"https://api.github.com/users/Tram-One/followers","following_url":"https://api.github.com/users/Tram-One/following{/other_user}","gists_url":"https://api.github.com/users/Tram-One/gists{/gist_id}","starred_url":"https://api.github.com/users/Tram-One/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/Tram-One/subscriptions","organizations_url":"https://api.github.com/users/Tram-One/orgs","repos_url":"https://api.github.com/users/Tram-One/repos","events_url":"https://api.github.com/users/Tram-One/events{/privacy}","received_events_url":"https://api.github.com/users/Tram-One/received_events","type":"Organization","site_admin":false},"repo":{"id":93494886,"node_id":"MDEwOlJlcG9zaXRvcnk5MzQ5NDg4Ng==","name":"tram-one","full_name":"Tram-One/tram-one","private":false,"owner":{"login":"Tram-One","id":32467507,"node_id":"MDEyOk9yZ2FuaXphdGlvbjMyNDY3NTA3","avatar_url":"https://avatars3.githubusercontent.com/u/32467507?v=4","gravatar_id":"","url":"https://api.github.com/users/Tram-One","html_url":"https://github.com/Tram-One","followers_url":"https://api.github.com/users/Tram-One/followers","following_url":"https://api.github.com/users/Tram-One/following{/other_user}","gists_url":"https://api.github.com/users/Tram-One/gists{/gist_id}","starred_url":"https://api.github.com/users/Tram-One/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/Tram-One/subscriptions","organizations_url":"https://api.github.com/users/Tram-One/orgs","repos_url":"https://api.github.com/users/Tram-One/repos","events_url":"https://api.github.com/users/Tram-One/events{/privacy}","received_events_url":"https://api.github.com/users/Tram-One/received_events","type":"Organization","site_admin":false},"html_url":"https://github.com/Tram-One/tram-one","description":"🚋 Batteries Included View Framework","fork":false,"url":"https://api.github.com/repos/Tram-One/tram-one","forks_url":"https://api.github.com/repos/Tram-One/tram-one/forks","keys_url":"https://api.github.com/repos/Tram-One/tram-one/keys{/key_id}","collaborators_url":"https://api.github.com/repos/Tram-One/tram-one/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/Tram-One/tram-one/teams","hooks_url":"https://api.github.com/repos/Tram-One/tram-one/hooks","issue_events_url":"https://api.github.com/repos/Tram-One/tram-one/issues/events{/number}","events_url":"https://api.github.com/repos/Tram-One/tram-one/events","assignees_url":"https://api.github.com/repos/Tram-One/tram-one/assignees{/user}","branches_url":"https://api.github.com/repos/Tram-One/tram-one/branches{/branch}","tags_url":"https://api.github.com/repos/Tram-One/tram-one/tags","blobs_url":"https://api.github.com/repos/Tram-One/tram-one/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/Tram-One/tram-one/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/Tram-One/tram-one/git/refs{/sha}","trees_url":"https://api.github.com/repos/Tram-One/tram-one/git/trees{/sha}","statuses_url":"https://api.github.com/repos/Tram-One/tram-one/statuses/{sha}","languages_url":"https://api.github.com/repos/Tram-One/tram-one/languages","stargazers_url":"https://api.github.com/repos/Tram-One/tram-one/stargazers","contributors_url":"https://api.github.com/repos/Tram-One/tram-one/contributors","subscribers_url":"https://api.github.com/repos/Tram-One/tram-one/subscribers","subscription_url":"https://api.github.com/repos/Tram-One/tram-one/subscription","commits_url":"https://api.github.com/repos/Tram-One/tram-one/commits{/sha}","git_commits_url":"https://api.github.com/repos/Tram-One/tram-one/git/commits{/sha}","comments_url":"https://api.github.com/repos/Tram-One/tram-one/comments{/number}","issue_comment_url":"https://api.github.com/repos/Tram-One/tram-one/issues/comments{/number}","contents_url":"https://api.github.com/repos/Tram-One/tram-one/contents/{+path}","compare_url":"https://api.github.com/repos/Tram-One/tram-one/compare/{base}...{head}","merges_url":"https://api.github.com/repos/Tram-One/tram-one/merges","archive_url":"https://api.github.com/repos/Tram-One/tram-one/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/Tram-One/tram-one/downloads","issues_url":"https://api.github.com/repos/Tram-One/tram-one/issues{/number}","pulls_url":"https://api.github.com/repos/Tram-One/tram-one/pulls{/number}","milestones_url":"https://api.github.com/repos/Tram-One/tram-one/milestones{/number}","notifications_url":"https://api.github.com/repos/Tram-One/tram-one/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/Tram-One/tram-one/labels{/name}","releases_url":"https://api.github.com/repos/Tram-One/tram-one/releases{/id}","deployments_url":"https://api.github.com/repos/Tram-One/tram-one/deployments","created_at":"2017-06-06T08:31:03Z","updated_at":"2018-08-28T12:31:30Z","pushed_at":"2018-09-29T21:54:59Z","git_url":"git://github.com/Tram-One/tram-one.git","ssh_url":"git@github.com:Tram-One/tram-one.git","clone_url":"https://github.com/Tram-One/tram-one.git","svn_url":"https://github.com/Tram-One/tram-one","homepage":"http://tram-one.io/","size":600,"stargazers_count":20,"watchers_count":20,"language":"JavaScript","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":9,"mirror_url":null,"archived":false,"open_issues_count":5,"license":{"key":"mit","name":"MIT License","spdx_id":"MIT","url":"https://api.github.com/licenses/mit","node_id":"MDc6TGljZW5zZTEz"},"forks":9,"open_issues":5,"watchers":20,"default_branch":"master"}},"base":{"label":"Tram-One:master","ref":"master","sha":"dde3bd2e2b56558a54bb69313e77dac72d219d99","user":{"login":"Tram-One","id":32467507,"node_id":"MDEyOk9yZ2FuaXphdGlvbjMyNDY3NTA3","avatar_url":"https://avatars3.githubusercontent.com/u/32467507?v=4","gravatar_id":"","url":"https://api.github.com/users/Tram-One","html_url":"https://github.com/Tram-One","followers_url":"https://api.github.com/users/Tram-One/followers","following_url":"https://api.github.com/users/Tram-One/following{/other_user}","gists_url":"https://api.github.com/users/Tram-One/gists{/gist_id}","starred_url":"https://api.github.com/users/Tram-One/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/Tram-One/subscriptions","organizations_url":"https://api.github.com/users/Tram-One/orgs","repos_url":"https://api.github.com/users/Tram-One/repos","events_url":"https://api.github.com/users/Tram-One/events{/privacy}","received_events_url":"https://api.github.com/users/Tram-One/received_events","type":"Organization","site_admin":false},"repo":{"id":93494886,"node_id":"MDEwOlJlcG9zaXRvcnk5MzQ5NDg4Ng==","name":"tram-one","full_name":"Tram-One/tram-one","private":false,"owner":{"login":"Tram-One","id":32467507,"node_id":"MDEyOk9yZ2FuaXphdGlvbjMyNDY3NTA3","avatar_url":"https://avatars3.githubusercontent.com/u/32467507?v=4","gravatar_id":"","url":"https://api.github.com/users/Tram-One","html_url":"https://github.com/Tram-One","followers_url":"https://api.github.com/users/Tram-One/followers","following_url":"https://api.github.com/users/Tram-One/following{/other_user}","gists_url":"https://api.github.com/users/Tram-One/gists{/gist_id}","starred_url":"https://api.github.com/users/Tram-One/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/Tram-One/subscriptions","organizations_url":"https://api.github.com/users/Tram-One/orgs","repos_url":"https://api.github.com/users/Tram-One/repos","events_url":"https://api.github.com/users/Tram-One/events{/privacy}","received_events_url":"https://api.github.com/users/Tram-One/received_events","type":"Organization","site_admin":false},"html_url":"https://github.com/Tram-One/tram-one","description":"🚋 Batteries Included View Framework","fork":false,"url":"https://api.github.com/repos/Tram-One/tram-one","forks_url":"https://api.github.com/repos/Tram-One/tram-one/forks","keys_url":"https://api.github.com/repos/Tram-One/tram-one/keys{/key_id}","collaborators_url":"https://api.github.com/repos/Tram-One/tram-one/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/Tram-One/tram-one/teams","hooks_url":"https://api.github.com/repos/Tram-One/tram-one/hooks","issue_events_url":"https://api.github.com/repos/Tram-One/tram-one/issues/events{/number}","events_url":"https://api.github.com/repos/Tram-One/tram-one/events","assignees_url":"https://api.github.com/repos/Tram-One/tram-one/assignees{/user}","branches_url":"https://api.github.com/repos/Tram-One/tram-one/branches{/branch}","tags_url":"https://api.github.com/repos/Tram-One/tram-one/tags","blobs_url":"https://api.github.com/repos/Tram-One/tram-one/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/Tram-One/tram-one/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/Tram-One/tram-one/git/refs{/sha}","trees_url":"https://api.github.com/repos/Tram-One/tram-one/git/trees{/sha}","statuses_url":"https://api.github.com/repos/Tram-One/tram-one/statuses/{sha}","languages_url":"https://api.github.com/repos/Tram-One/tram-one/languages","stargazers_url":"https://api.github.com/repos/Tram-One/tram-one/stargazers","contributors_url":"https://api.github.com/repos/Tram-One/tram-one/contributors","subscribers_url":"https://api.github.com/repos/Tram-One/tram-one/subscribers","subscription_url":"https://api.github.com/repos/Tram-One/tram-one/subscription","commits_url":"https://api.github.com/repos/Tram-One/tram-one/commits{/sha}","git_commits_url":"https://api.github.com/repos/Tram-One/tram-one/git/commits{/sha}","comments_url":"https://api.github.com/repos/Tram-One/tram-one/comments{/number}","issue_comment_url":"https://api.github.com/repos/Tram-One/tram-one/issues/comments{/number}","contents_url":"https://api.github.com/repos/Tram-One/tram-one/contents/{+path}","compare_url":"https://api.github.com/repos/Tram-One/tram-one/compare/{base}...{head}","merges_url":"https://api.github.com/repos/Tram-One/tram-one/merges","archive_url":"https://api.github.com/repos/Tram-One/tram-one/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/Tram-One/tram-one/downloads","issues_url":"https://api.github.com/repos/Tram-One/tram-one/issues{/number}","pulls_url":"https://api.github.com/repos/Tram-One/tram-one/pulls{/number}","milestones_url":"https://api.github.com/repos/Tram-One/tram-one/milestones{/number}","notifications_url":"https://api.github.com/repos/Tram-One/tram-one/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/Tram-One/tram-one/labels{/name}","releases_url":"https://api.github.com/repos/Tram-One/tram-one/releases{/id}","deployments_url":"https://api.github.com/repos/Tram-One/tram-one/deployments","created_at":"2017-06-06T08:31:03Z","updated_at":"2018-08-28T12:31:30Z","pushed_at":"2018-09-29T21:54:59Z","git_url":"git://github.com/Tram-One/tram-one.git","ssh_url":"git@github.com:Tram-One/tram-one.git","clone_url":"https://github.com/Tram-One/tram-one.git","svn_url":"https://github.com/Tram-One/tram-one","homepage":"http://tram-one.io/","size":600,"stargazers_count":20,"watchers_count":20,"language":"JavaScript","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":9,"mirror_url":null,"archived":false,"open_issues_count":5,"license":{"key":"mit","name":"MIT License","spdx_id":"MIT","url":"https://api.github.com/licenses/mit","node_id":"MDc6TGljZW5zZTEz"},"forks":9,"open_issues":5,"watchers":20,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/Tram-One/tram-one/pulls/103"},"html":{"href":"https://github.com/Tram-One/tram-one/pull/103"},"issue":{"href":"https://api.github.com/repos/Tram-One/tram-one/issues/103"},"comments":{"href":"https://api.github.com/repos/Tram-One/tram-one/issues/103/comments"},"review_comments":{"href":"https://api.github.com/repos/Tram-One/tram-one/pulls/103/comments"},"review_comment":{"href":"https://api.github.com/repos/Tram-One/tram-one/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/Tram-One/tram-one/pulls/103/commits"},"statuses":{"href":"https://api.github.com/repos/Tram-One/tram-one/statuses/ba3440fcfc9b41efa3ed36b78e0e6cd4c1f44faa"}},"author_association":"MEMBER"}}
{"actor":{"display_login":"ethanjurman"}}