{"action":"created","comment":{"url":"https://api.github.com/repos/code-dot-org/code-dot-org/pulls/comments/100593543","pull_request_review_id":21309743,"id":100593543,"diff_hunk":"@@ -0,0 +1,187 @@\n+/** @file Playground Component setup tests */\n+import five from 'johnny-five';\n+import Playground from 'playground-io';\n+import {expect} from '../../../../util/configuredChai';\n+import sinon from 'sinon';\n+import {\n+  initializeAccelerometer,\n+  initializeButton,\n+  initializeColorLeds,\n+  initializeLightSensor,\n+  initializeSoundSensor,\n+  initializeThermometer,\n+  initializeTouchPads,\n+} from '@cdo/apps/lib/kits/maker/PlaygroundComponents';\n+import TouchSensor from '@cdo/apps/lib/kits/maker/TouchSensor';\n+\n+// Polyfill node's process.hrtime for the browser, gets used by johnny-five.\n+process.hrtime = require('browser-process-hrtime');\n+\n+describe('Circuit Playground Components', () => {\n+  let board;\n+\n+  beforeEach(() => {\n+    board = newBoard();\n+  });\n+\n+  describe('initializeColorLeds()', () => {\n+    it('initializes all ten LEDs', () => {\n+      const components = initializeColorLeds(board);\n+\n+      // Return ten controllers\n+      expect(Object.keys(components)).to.deep.equal([\n+        '0', '1', '2', '3', '4', '5', '6', '7', '8', '9'\n+      ]);\n+\n+      // Every returned controller is a five.Led.RGB\n+      Object.keys(components).forEach(key => {\n+        expect(components[key]).to.be.an.instanceOf(five.Led.RGB);\n+      });\n+\n+      // 20 sysex calls during initialization, two per LED.\n+      for (let i = 0; i < 10; i++) {\n+        // TODO (bbuchanan): Record what these calls mean.\n+        expect(board.io.sysexCommand.getCall(i*2)).to.have.been.calledWith([0x40, 0x10, i, 0, 0, 0, 0]);\n+        expect(board.io.sysexCommand.getCall(i*2+1)).to.have.been.calledWith([0x40, 0x11]);\n+      }\n+    });\n+\n+    it('can initialize a second set of leds with a second board', () => {\n+      // Checks a necessary condition for a true johnny-five level reset.\n+      const boardOne = newBoard();\n+      const controllers = initializeColorLeds(boardOne);\n+      expect(controllers[0].board === boardOne).to.be.true;\n+      expect(boardOne.io.sysexCommand.callCount).to.equal(20);\n+\n+      const boardTwo = newBoard();\n+      const newControllers = initializeColorLeds(boardTwo);\n+      expect(newControllers[0].board === boardTwo).to.be.true;\n+      expect(boardTwo.io.sysexCommand.callCount).to.equal(20);\n+    });\n+  });\n+\n+  describe('initializeSoundSensor()', () => {\n+    it('initializes one sensor', () => {\n+      const sensor = initializeSoundSensor(board);\n+      expect(sensor).to.be.an.instanceOf(five.Sensor);\n+      // Doesn't use sysex at first\n+      expect(board.io.sysexCommand.callCount).to.equal(0);\n+    });\n+\n+    it('gets sensor methods', () => {\n+      const sensor = initializeSoundSensor(board);\n+      expect(sensor).to.haveOwnProperty('start');\n+      expect(sensor).to.haveOwnProperty('getAveragedValue');\n+      expect(sensor).to.haveOwnProperty('setScale');\n+    });\n+  });\n+\n+  describe('initializeLightSensor()', () => {\n+    it('initializes one sensor', () => {\n+      const sensor = initializeLightSensor(board);\n+      expect(sensor).to.be.an.instanceOf(five.Sensor);\n+      // Doesn't use sysex at first\n+      expect(board.io.sysexCommand.callCount).to.equal(0);\n+    });\n+\n+    it('gets sensor methods', () => {\n+      const sensor = initializeLightSensor(board);\n+      expect(sensor).to.haveOwnProperty('start');\n+      expect(sensor).to.haveOwnProperty('getAveragedValue');\n+      expect(sensor).to.haveOwnProperty('setScale');\n+    });\n+  });\n+\n+  describe('initializeThermometer()', () => {\n+    it('initializes one sensor', () => {\n+      const thermometer = initializeThermometer(board);\n+      expect(thermometer).to.be.an.instanceOf(five.Thermometer);\n+      // Doesn't use sysex at first\n+      expect(board.io.sysexCommand.callCount).to.equal(0);\n+    });\n+\n+    it('gets sensor methods', () => {\n+      const sensor = initializeThermometer(board);\n+      expect(sensor).to.haveOwnProperty('start');\n+      expect(sensor).to.haveOwnProperty('getAveragedValue');\n+      expect(sensor).to.haveOwnProperty('setScale');\n+    });\n+  });\n+\n+  describe('initializeButton()', () => {\n+    it('initializes one button', () => {\n+      const button = initializeButton(board, '4');\n+      expect(button).to.be.an.instanceOf(five.Button);\n+      expect(button).to.haveOwnProperty('isPressed');\n+      // Doesn't use sysex at first\n+      expect(board.io.sysexCommand.callCount).to.equal(0);\n+    });\n+  });\n+\n+  describe('initializeAccelerometer()', () => {\n+    it('initializes accelerometer', () => {\n+      const sensor = initializeAccelerometer(board);\n+      expect(sensor).to.be.an.instanceOf(five.Accelerometer);\n+      expect(sensor).to.haveOwnProperty('getOrientation');\n+      expect(sensor).to.haveOwnProperty('getAcceleration');\n+      // Doesn't use sysex at first\n+      expect(board.io.sysexCommand.callCount).to.equal(0);\n+    });\n+  });\n+\n+  describe('initializeTouchPads()', () => {\n+    it('initializes all touch pads', () => {\n+      const pads = initializeTouchPads(board);\n+      expect(Object.keys(pads)).to.have.length(8);\n+      for (const key in pads) {\n+        if (!pads.hasOwnProperty(key)) continue;\n+        const pad = pads[key];\n+        expect(/touchPad\\d+/.test(key)).to.be.true;\n+        expect(pad).to.be.an.instanceOf(TouchSensor);\n+        expect(pad.touchpadsController_).to.be.an.instanceOf(five.Touchpad);\n+      }\n+\n+      // Check exact sysex calls\n+      expect(board.io.sysexCommand.callCount).to.equal(8);\n+      // TODO (bbuchanan): Record what these calls mean.\n+      expect(board.io.sysexCommand.getCall(0)).to.have.been.calledWith([0x40, 0x41, 0]);\n+      expect(board.io.sysexCommand.getCall(1)).to.have.been.calledWith([0x40, 0x41, 1]);\n+      expect(board.io.sysexCommand.getCall(2)).to.have.been.calledWith([0x40, 0x41, 2]);\n+      expect(board.io.sysexCommand.getCall(3)).to.have.been.calledWith([0x40, 0x41, 3]);\n+      expect(board.io.sysexCommand.getCall(4)).to.have.been.calledWith([0x40, 0x41, 6]);\n+      expect(board.io.sysexCommand.getCall(5)).to.have.been.calledWith([0x40, 0x41, 9]);\n+      expect(board.io.sysexCommand.getCall(6)).to.have.been.calledWith([0x40, 0x41, 10]);\n+      expect(board.io.sysexCommand.getCall(7)).to.have.been.calledWith([0x40, 0x41, 12]);\n+    });\n+  });\n+});\n+\n+/**\n+ * Generate a test board object.\n+ * From rwaldrong/johnny-five's newBoard() test helper:","path":"apps/test/unit/lib/kits/maker/PlaygroundComponentsTest.js","position":161,"original_position":161,"commit_id":"e4720aaa135a10fa5b8c9d18d65de913495a884b","original_commit_id":"e4720aaa135a10fa5b8c9d18d65de913495a884b","user":{"login":"bcjordan","id":206973,"avatar_url":"https://avatars.githubusercontent.com/u/206973?v=3","gravatar_id":"","url":"https://api.github.com/users/bcjordan","html_url":"https://github.com/bcjordan","followers_url":"https://api.github.com/users/bcjordan/followers","following_url":"https://api.github.com/users/bcjordan/following{/other_user}","gists_url":"https://api.github.com/users/bcjordan/gists{/gist_id}","starred_url":"https://api.github.com/users/bcjordan/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/bcjordan/subscriptions","organizations_url":"https://api.github.com/users/bcjordan/orgs","repos_url":"https://api.github.com/users/bcjordan/repos","events_url":"https://api.github.com/users/bcjordan/events{/privacy}","received_events_url":"https://api.github.com/users/bcjordan/received_events","type":"User","site_admin":false},"body":"s/rwaldrong/rwaldron","created_at":"2017-02-10T18:23:45Z","updated_at":"2017-02-10T18:23:45Z","html_url":"https://github.com/code-dot-org/code-dot-org/pull/13172#discussion_r100593543","pull_request_url":"https://api.github.com/repos/code-dot-org/code-dot-org/pulls/13172","_links":{"self":{"href":"https://api.github.com/repos/code-dot-org/code-dot-org/pulls/comments/100593543"},"html":{"href":"https://github.com/code-dot-org/code-dot-org/pull/13172#discussion_r100593543"},"pull_request":{"href":"https://api.github.com/repos/code-dot-org/code-dot-org/pulls/13172"}}},"pull_request":{"url":"https://api.github.com/repos/code-dot-org/code-dot-org/pulls/13172","id":105545586,"html_url":"https://github.com/code-dot-org/code-dot-org/pull/13172","diff_url":"https://github.com/code-dot-org/code-dot-org/pull/13172.diff","patch_url":"https://github.com/code-dot-org/code-dot-org/pull/13172.patch","issue_url":"https://api.github.com/repos/code-dot-org/code-dot-org/issues/13172","number":13172,"state":"closed","locked":false,"title":"Maker: Inject board into components","user":{"login":"islemaster","id":1615761,"avatar_url":"https://avatars.githubusercontent.com/u/1615761?v=3","gravatar_id":"","url":"https://api.github.com/users/islemaster","html_url":"https://github.com/islemaster","followers_url":"https://api.github.com/users/islemaster/followers","following_url":"https://api.github.com/users/islemaster/following{/other_user}","gists_url":"https://api.github.com/users/islemaster/gists{/gist_id}","starred_url":"https://api.github.com/users/islemaster/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/islemaster/subscriptions","organizations_url":"https://api.github.com/users/islemaster/orgs","repos_url":"https://api.github.com/users/islemaster/repos","events_url":"https://api.github.com/users/islemaster/events{/privacy}","received_events_url":"https://api.github.com/users/islemaster/received_events","type":"User","site_admin":false},"body":"Prepares playground component initialization for a new approach to run/reset. This PR should _not_ result in a behavior change.\r\n\r\n\r\n_Pair: @bcjordan_\r\n\r\nJohnny-Five components can be initialized with or without injecting a `board`.  Without one (before this PR) they automatically attach to the first board object found in the page's static cache.  Now we explicitly provide a board for the component to use, breaking the static dependency. For details see [`Board.Component`](https://github.com/rwaldron/johnny-five/blob/master/lib/board.js#L775-L802) (called as part of every component's constructor) and [`Board.mount`](https://github.com/rwaldron/johnny-five/blob/master/lib/board.js#L730-L771) (badly named?) within johnny-five.\r\n\r\nIn the process we've broken up the large `initializeCircuitPlaygroundComponents` method into lots of small methods for initializing individual components, and brought those methods under test.  We are actually testing against real johnny-five and playground-io.  We mock firmata-js (playground-io's superclass, and effectively our 'hardware interface' at this layer) by swapping in [rwaldron/mock-firmata](https://github.com/rwaldron/mock-firmata) for firmata imports via Webpack configuration.  This was a real headache to figure out so there's a good bit of commenting inline - please let me know if you think more is needed.","created_at":"2017-02-10T00:47:12Z","updated_at":"2017-02-10T18:23:45Z","closed_at":"2017-02-10T01:47:33Z","merged_at":"2017-02-10T01:47:33Z","merge_commit_sha":"b152f9bf4e6ce612d82e5de0f83c7a8712aa1216","assignee":{"login":"bcjordan","id":206973,"avatar_url":"https://avatars.githubusercontent.com/u/206973?v=3","gravatar_id":"","url":"https://api.github.com/users/bcjordan","html_url":"https://github.com/bcjordan","followers_url":"https://api.github.com/users/bcjordan/followers","following_url":"https://api.github.com/users/bcjordan/following{/other_user}","gists_url":"https://api.github.com/users/bcjordan/gists{/gist_id}","starred_url":"https://api.github.com/users/bcjordan/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/bcjordan/subscriptions","organizations_url":"https://api.github.com/users/bcjordan/orgs","repos_url":"https://api.github.com/users/bcjordan/repos","events_url":"https://api.github.com/users/bcjordan/events{/privacy}","received_events_url":"https://api.github.com/users/bcjordan/received_events","type":"User","site_admin":false},"assignees":[{"login":"bcjordan","id":206973,"avatar_url":"https://avatars.githubusercontent.com/u/206973?v=3","gravatar_id":"","url":"https://api.github.com/users/bcjordan","html_url":"https://github.com/bcjordan","followers_url":"https://api.github.com/users/bcjordan/followers","following_url":"https://api.github.com/users/bcjordan/following{/other_user}","gists_url":"https://api.github.com/users/bcjordan/gists{/gist_id}","starred_url":"https://api.github.com/users/bcjordan/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/bcjordan/subscriptions","organizations_url":"https://api.github.com/users/bcjordan/orgs","repos_url":"https://api.github.com/users/bcjordan/repos","events_url":"https://api.github.com/users/bcjordan/events{/privacy}","received_events_url":"https://api.github.com/users/bcjordan/received_events","type":"User","site_admin":false},{"login":"islemaster","id":1615761,"avatar_url":"https://avatars.githubusercontent.com/u/1615761?v=3","gravatar_id":"","url":"https://api.github.com/users/islemaster","html_url":"https://github.com/islemaster","followers_url":"https://api.github.com/users/islemaster/followers","following_url":"https://api.github.com/users/islemaster/following{/other_user}","gists_url":"https://api.github.com/users/islemaster/gists{/gist_id}","starred_url":"https://api.github.com/users/islemaster/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/islemaster/subscriptions","organizations_url":"https://api.github.com/users/islemaster/orgs","repos_url":"https://api.github.com/users/islemaster/repos","events_url":"https://api.github.com/users/islemaster/events{/privacy}","received_events_url":"https://api.github.com/users/islemaster/received_events","type":"User","site_admin":false}],"milestone":null,"commits_url":"https://api.github.com/repos/code-dot-org/code-dot-org/pulls/13172/commits","review_comments_url":"https://api.github.com/repos/code-dot-org/code-dot-org/pulls/13172/comments","review_comment_url":"https://api.github.com/repos/code-dot-org/code-dot-org/pulls/comments{/number}","comments_url":"https://api.github.com/repos/code-dot-org/code-dot-org/issues/13172/comments","statuses_url":"https://api.github.com/repos/code-dot-org/code-dot-org/statuses/e4720aaa135a10fa5b8c9d18d65de913495a884b","head":{"label":"code-dot-org:maker-true-reset","ref":"maker-true-reset","sha":"e4720aaa135a10fa5b8c9d18d65de913495a884b","user":{"login":"code-dot-org","id":5124627,"avatar_url":"https://avatars.githubusercontent.com/u/5124627?v=3","gravatar_id":"","url":"https://api.github.com/users/code-dot-org","html_url":"https://github.com/code-dot-org","followers_url":"https://api.github.com/users/code-dot-org/followers","following_url":"https://api.github.com/users/code-dot-org/following{/other_user}","gists_url":"https://api.github.com/users/code-dot-org/gists{/gist_id}","starred_url":"https://api.github.com/users/code-dot-org/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/code-dot-org/subscriptions","organizations_url":"https://api.github.com/users/code-dot-org/orgs","repos_url":"https://api.github.com/users/code-dot-org/repos","events_url":"https://api.github.com/users/code-dot-org/events{/privacy}","received_events_url":"https://api.github.com/users/code-dot-org/received_events","type":"Organization","site_admin":false},"repo":{"id":24250009,"name":"code-dot-org","full_name":"code-dot-org/code-dot-org","owner":{"login":"code-dot-org","id":5124627,"avatar_url":"https://avatars.githubusercontent.com/u/5124627?v=3","gravatar_id":"","url":"https://api.github.com/users/code-dot-org","html_url":"https://github.com/code-dot-org","followers_url":"https://api.github.com/users/code-dot-org/followers","following_url":"https://api.github.com/users/code-dot-org/following{/other_user}","gists_url":"https://api.github.com/users/code-dot-org/gists{/gist_id}","starred_url":"https://api.github.com/users/code-dot-org/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/code-dot-org/subscriptions","organizations_url":"https://api.github.com/users/code-dot-org/orgs","repos_url":"https://api.github.com/users/code-dot-org/repos","events_url":"https://api.github.com/users/code-dot-org/events{/privacy}","received_events_url":"https://api.github.com/users/code-dot-org/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/code-dot-org/code-dot-org","description":"The code powering code.org and studio.code.org","fork":false,"url":"https://api.github.com/repos/code-dot-org/code-dot-org","forks_url":"https://api.github.com/repos/code-dot-org/code-dot-org/forks","keys_url":"https://api.github.com/repos/code-dot-org/code-dot-org/keys{/key_id}","collaborators_url":"https://api.github.com/repos/code-dot-org/code-dot-org/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/code-dot-org/code-dot-org/teams","hooks_url":"https://api.github.com/repos/code-dot-org/code-dot-org/hooks","issue_events_url":"https://api.github.com/repos/code-dot-org/code-dot-org/issues/events{/number}","events_url":"https://api.github.com/repos/code-dot-org/code-dot-org/events","assignees_url":"https://api.github.com/repos/code-dot-org/code-dot-org/assignees{/user}","branches_url":"https://api.github.com/repos/code-dot-org/code-dot-org/branches{/branch}","tags_url":"https://api.github.com/repos/code-dot-org/code-dot-org/tags","blobs_url":"https://api.github.com/repos/code-dot-org/code-dot-org/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/code-dot-org/code-dot-org/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/code-dot-org/code-dot-org/git/refs{/sha}","trees_url":"https://api.github.com/repos/code-dot-org/code-dot-org/git/trees{/sha}","statuses_url":"https://api.github.com/repos/code-dot-org/code-dot-org/statuses/{sha}","languages_url":"https://api.github.com/repos/code-dot-org/code-dot-org/languages","stargazers_url":"https://api.github.com/repos/code-dot-org/code-dot-org/stargazers","contributors_url":"https://api.github.com/repos/code-dot-org/code-dot-org/contributors","subscribers_url":"https://api.github.com/repos/code-dot-org/code-dot-org/subscribers","subscription_url":"https://api.github.com/repos/code-dot-org/code-dot-org/subscription","commits_url":"https://api.github.com/repos/code-dot-org/code-dot-org/commits{/sha}","git_commits_url":"https://api.github.com/repos/code-dot-org/code-dot-org/git/commits{/sha}","comments_url":"https://api.github.com/repos/code-dot-org/code-dot-org/comments{/number}","issue_comment_url":"https://api.github.com/repos/code-dot-org/code-dot-org/issues/comments{/number}","contents_url":"https://api.github.com/repos/code-dot-org/code-dot-org/contents/{+path}","compare_url":"https://api.github.com/repos/code-dot-org/code-dot-org/compare/{base}...{head}","merges_url":"https://api.github.com/repos/code-dot-org/code-dot-org/merges","archive_url":"https://api.github.com/repos/code-dot-org/code-dot-org/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/code-dot-org/code-dot-org/downloads","issues_url":"https://api.github.com/repos/code-dot-org/code-dot-org/issues{/number}","pulls_url":"https://api.github.com/repos/code-dot-org/code-dot-org/pulls{/number}","milestones_url":"https://api.github.com/repos/code-dot-org/code-dot-org/milestones{/number}","notifications_url":"https://api.github.com/repos/code-dot-org/code-dot-org/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/code-dot-org/code-dot-org/labels{/name}","releases_url":"https://api.github.com/repos/code-dot-org/code-dot-org/releases{/id}","deployments_url":"https://api.github.com/repos/code-dot-org/code-dot-org/deployments","created_at":"2014-09-20T00:46:11Z","updated_at":"2017-02-08T07:21:09Z","pushed_at":"2017-02-10T18:23:09Z","git_url":"git://github.com/code-dot-org/code-dot-org.git","ssh_url":"git@github.com:code-dot-org/code-dot-org.git","clone_url":"https://github.com/code-dot-org/code-dot-org.git","svn_url":"https://github.com/code-dot-org/code-dot-org","homepage":"http://code.org","size":5243466,"stargazers_count":165,"watchers_count":165,"language":"JavaScript","has_issues":false,"has_downloads":true,"has_wiki":false,"has_pages":false,"forks_count":105,"mirror_url":null,"open_issues_count":98,"forks":105,"open_issues":98,"watchers":165,"default_branch":"staging"}},"base":{"label":"code-dot-org:staging","ref":"staging","sha":"e61f124c9e7dcaeecd6789138273488c1d952532","user":{"login":"code-dot-org","id":5124627,"avatar_url":"https://avatars.githubusercontent.com/u/5124627?v=3","gravatar_id":"","url":"https://api.github.com/users/code-dot-org","html_url":"https://github.com/code-dot-org","followers_url":"https://api.github.com/users/code-dot-org/followers","following_url":"https://api.github.com/users/code-dot-org/following{/other_user}","gists_url":"https://api.github.com/users/code-dot-org/gists{/gist_id}","starred_url":"https://api.github.com/users/code-dot-org/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/code-dot-org/subscriptions","organizations_url":"https://api.github.com/users/code-dot-org/orgs","repos_url":"https://api.github.com/users/code-dot-org/repos","events_url":"https://api.github.com/users/code-dot-org/events{/privacy}","received_events_url":"https://api.github.com/users/code-dot-org/received_events","type":"Organization","site_admin":false},"repo":{"id":24250009,"name":"code-dot-org","full_name":"code-dot-org/code-dot-org","owner":{"login":"code-dot-org","id":5124627,"avatar_url":"https://avatars.githubusercontent.com/u/5124627?v=3","gravatar_id":"","url":"https://api.github.com/users/code-dot-org","html_url":"https://github.com/code-dot-org","followers_url":"https://api.github.com/users/code-dot-org/followers","following_url":"https://api.github.com/users/code-dot-org/following{/other_user}","gists_url":"https://api.github.com/users/code-dot-org/gists{/gist_id}","starred_url":"https://api.github.com/users/code-dot-org/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/code-dot-org/subscriptions","organizations_url":"https://api.github.com/users/code-dot-org/orgs","repos_url":"https://api.github.com/users/code-dot-org/repos","events_url":"https://api.github.com/users/code-dot-org/events{/privacy}","received_events_url":"https://api.github.com/users/code-dot-org/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/code-dot-org/code-dot-org","description":"The code powering code.org and studio.code.org","fork":false,"url":"https://api.github.com/repos/code-dot-org/code-dot-org","forks_url":"https://api.github.com/repos/code-dot-org/code-dot-org/forks","keys_url":"https://api.github.com/repos/code-dot-org/code-dot-org/keys{/key_id}","collaborators_url":"https://api.github.com/repos/code-dot-org/code-dot-org/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/code-dot-org/code-dot-org/teams","hooks_url":"https://api.github.com/repos/code-dot-org/code-dot-org/hooks","issue_events_url":"https://api.github.com/repos/code-dot-org/code-dot-org/issues/events{/number}","events_url":"https://api.github.com/repos/code-dot-org/code-dot-org/events","assignees_url":"https://api.github.com/repos/code-dot-org/code-dot-org/assignees{/user}","branches_url":"https://api.github.com/repos/code-dot-org/code-dot-org/branches{/branch}","tags_url":"https://api.github.com/repos/code-dot-org/code-dot-org/tags","blobs_url":"https://api.github.com/repos/code-dot-org/code-dot-org/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/code-dot-org/code-dot-org/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/code-dot-org/code-dot-org/git/refs{/sha}","trees_url":"https://api.github.com/repos/code-dot-org/code-dot-org/git/trees{/sha}","statuses_url":"https://api.github.com/repos/code-dot-org/code-dot-org/statuses/{sha}","languages_url":"https://api.github.com/repos/code-dot-org/code-dot-org/languages","stargazers_url":"https://api.github.com/repos/code-dot-org/code-dot-org/stargazers","contributors_url":"https://api.github.com/repos/code-dot-org/code-dot-org/contributors","subscribers_url":"https://api.github.com/repos/code-dot-org/code-dot-org/subscribers","subscription_url":"https://api.github.com/repos/code-dot-org/code-dot-org/subscription","commits_url":"https://api.github.com/repos/code-dot-org/code-dot-org/commits{/sha}","git_commits_url":"https://api.github.com/repos/code-dot-org/code-dot-org/git/commits{/sha}","comments_url":"https://api.github.com/repos/code-dot-org/code-dot-org/comments{/number}","issue_comment_url":"https://api.github.com/repos/code-dot-org/code-dot-org/issues/comments{/number}","contents_url":"https://api.github.com/repos/code-dot-org/code-dot-org/contents/{+path}","compare_url":"https://api.github.com/repos/code-dot-org/code-dot-org/compare/{base}...{head}","merges_url":"https://api.github.com/repos/code-dot-org/code-dot-org/merges","archive_url":"https://api.github.com/repos/code-dot-org/code-dot-org/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/code-dot-org/code-dot-org/downloads","issues_url":"https://api.github.com/repos/code-dot-org/code-dot-org/issues{/number}","pulls_url":"https://api.github.com/repos/code-dot-org/code-dot-org/pulls{/number}","milestones_url":"https://api.github.com/repos/code-dot-org/code-dot-org/milestones{/number}","notifications_url":"https://api.github.com/repos/code-dot-org/code-dot-org/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/code-dot-org/code-dot-org/labels{/name}","releases_url":"https://api.github.com/repos/code-dot-org/code-dot-org/releases{/id}","deployments_url":"https://api.github.com/repos/code-dot-org/code-dot-org/deployments","created_at":"2014-09-20T00:46:11Z","updated_at":"2017-02-08T07:21:09Z","pushed_at":"2017-02-10T18:23:09Z","git_url":"git://github.com/code-dot-org/code-dot-org.git","ssh_url":"git@github.com:code-dot-org/code-dot-org.git","clone_url":"https://github.com/code-dot-org/code-dot-org.git","svn_url":"https://github.com/code-dot-org/code-dot-org","homepage":"http://code.org","size":5243466,"stargazers_count":165,"watchers_count":165,"language":"JavaScript","has_issues":false,"has_downloads":true,"has_wiki":false,"has_pages":false,"forks_count":105,"mirror_url":null,"open_issues_count":98,"forks":105,"open_issues":98,"watchers":165,"default_branch":"staging"}},"_links":{"self":{"href":"https://api.github.com/repos/code-dot-org/code-dot-org/pulls/13172"},"html":{"href":"https://github.com/code-dot-org/code-dot-org/pull/13172"},"issue":{"href":"https://api.github.com/repos/code-dot-org/code-dot-org/issues/13172"},"comments":{"href":"https://api.github.com/repos/code-dot-org/code-dot-org/issues/13172/comments"},"review_comments":{"href":"https://api.github.com/repos/code-dot-org/code-dot-org/pulls/13172/comments"},"review_comment":{"href":"https://api.github.com/repos/code-dot-org/code-dot-org/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/code-dot-org/code-dot-org/pulls/13172/commits"},"statuses":{"href":"https://api.github.com/repos/code-dot-org/code-dot-org/statuses/e4720aaa135a10fa5b8c9d18d65de913495a884b"}}}}
{"actor":{"display_login":"bcjordan"}}