{"action":"created","comment":{"url":"https://api.github.com/repos/cfpb/grasshopper-loader/pulls/comments/45658077","id":45658077,"diff_hunk":"@@ -106,16 +152,284 @@ test('esLoader module', function(t){\n     t.ok(isStream.isWritable(loader), 'esLoader.load returns a write stream');\n   });\n \n+  esLoader.loadIntoIndex({client: ''}, function(err){\n+    t.ok(err, 'Loader errors without proper arguments');\n+  });\n+\n+  var op2 = JSON.parse(JSON.stringify(options));\n+  op2.client = client;\n+  op2.forcedIndex = 'testforcedindex';\n+\n+  esLoader.loadIntoIndex(op2, function(err, loader){\n+    t.notOk(err, 'Proper arguments to loader doesn\\'t error');\n+    t.ok(isStream.isWritable(loader), 'esLoader.load returns a write stream');\n+  });\n+\n+});\n+\n+\n+\n+\n+test('createIndex module', function(t){\n+  t.plan(3);\n+\n+  var client = options.client;\n+\n+  createIndex({alias: 'testalias', client: client}, 'testname', function(err, index){\n+    if(err) t.fail();\n+    t.ok(index, 'Assigns index for arbitrary alias.');\n+  });\n+\n+  createIndex({alias: 'census', client: client}, 'testname', function(err, index){\n+    if(err) t.fail();\n+    t.ok(index, 'Creates index for census.');\n+    client.indices.delete({index: index}, function(err){\n+      t.notOk(err, 'Deletes test index');\n+    });\n+  });\n+});\n+\n+\n+\n+\n+test('bulk Prefixer', function(t){\n+  t.plan(3);\n+\n+  t.ok(isStream.isDuplex(bulkPrefixer()), 'bulkPrefixer returns a stream');\n+\n+  var pref = bulkPrefixer();\n+  var pref2 = bulkPrefixer();\n+  var prefixed = '{\"index\":{}}\\nsomedata\\n';\n+\n+  pref.end('somedata\\n');\n+  pref2.end('somedata');\n+\n+  pref.on('data', function(data){\n+    t.equal(data.toString(), prefixed, 'Properly prefixes newline-delimited data');\n+  });\n+\n+  pref2.on('data', function(data){\n+    t.equal(data.toString(), prefixed, 'Properly prefixes data with missing newline');\n+  });\n+});\n+\n+\n+\n+\n+test('handleCsv module', function(t){\n+  t.plan(6);\n+  var csvFile = 'test/data/virginia.csv';\n+  var txtFile = 'test/data/virginia.txt';\n+  var csvStream = fs.createReadStream(csvFile);\n+  var txtStream = fs.createReadStream(txtFile);\n+  var txtRecord = {name: 'virginia', file: 'virginia.txt', spatialReference: 'NAD83'}\n+  var csvRecord = {name: 'virginia', file: 'virginia.csv', spatialReference: 'NAD83'}\n+  var badTxtRecord = {name: 'virginia', file: 'virginia.txt'};\n+\n+  handleCsv(csvFile, csvRecord, scratchSpace, function(record, vrt){\n+    t.ok(vrt, 'Creates a valid vrt file from a csv file and good record.');\n+  },\n+  function(record, err){\n+   if(err) t.fail('Unexpected error.');\n+  });\n+\n+  handleCsv(csvStream, csvRecord, scratchSpace, function(record, vrt){\n+    t.ok(vrt, 'Creates a valid vrt file from a csv stream and good record.');\n+  },\n+  function(record, err){\n+   if(err) t.fail('Unexpected error.');\n+  });\n+\n+  handleCsv(txtFile, txtRecord, scratchSpace, function(record, vrt){\n+    t.ok(vrt, 'Creates a valid vrt file from a text file and good record.');\n+    fs.copySync('test/data/virginia.csv', 'test/data/virginia.txt');\n+  },\n+  function(record, err){\n+   if(err) console.log(err);\n+  });\n+\n+  handleCsv(txtStream, txtRecord, scratchSpace, function(record, vrt){\n+    t.ok(vrt, 'Creates a valid vrt file from a text stream and good record.');\n+  },\n+  function(record, err){\n+   if(err) console.log(err);\n+  });\n+\n+  handleCsv(txtFile, badTxtRecord, scratchSpace, function(){\n+  },\n+  function(record, err){\n+    t.ok(err, 'Errors without a spatial reference.');\n+  });\n+\n+  handleCsv('fake', csvRecord, scratchSpace, function(){\n+  },\n+  function(record, err){\n+    t.ok(err, 'Fails with bad filename.');\n+  });\n+});\n+\n+\n+\n+\n+test('unzipFile module', function(t){\n+ t.plan(3);\n+ var zipfile = 'test/data/arkansas.zip';\n+ var badfile = 'test/data/nofilehere.notzip';\n+ var record = {name: 'arkansas', file: 'arkansas.zip'};\n+ var badRecord = {name: 'arkansas'};\n+\n+ var dir1 = path.join(scratchSpace, crypto.pseudoRandomBytes(10).toString('hex'));\n+ var dir2 = path.join(scratchSpace, crypto.pseudoRandomBytes(10).toString('hex'));\n+ var dir3 = path.join(scratchSpace, crypto.pseudoRandomBytes(10).toString('hex'));\n+\n+ unzipFile(zipfile, record, dir1, function(file){\n+   t.ok(file, 'Successfully unzips file.');\n+ },\n+ function(record, err){\n+   t.notOk(err);\n+ });\n+\n+ unzipFile(badfile, record, dir2, function(file){\n+   t.notOk(file);\n+ },\n+ function(record, err){\n+   t.ok(err, 'Error on bad file.');\n+ });\n+\n+ unzipFile(zipfile, badRecord, dir3, function(file){\n+   t.notOk(file);\n+ },\n+ function(record, err){\n+   t.ok(err, 'Error without complete record.');\n+ });\n+});\n+\n+\n+\n+\n+test('handleZip module', function(t){\n+  t.plan(5);\n+\n+  var arkRecord = {name: 'arkansas', file: 'arkansas.zip'};\n+  var virgRecord = {name: 'virg', file: 'virg.csv', spatialReference: 'NAD83'};\n+\n+  handleZip(fs.createReadStream('test/data/arkansas.zip'), arkRecord, scratchSpace,\n+    function(record, file){\n+      t.ok(file, 'handleZip works on zipped shapefile.');\n+      t.equal(record, arkRecord, 'Passes through correct record.');\n+    }, function(record, err){t.notOk(err)});\n+\n+  handleZip(fs.createReadStream('test/data/virg.zip'), virgRecord, scratchSpace,\n+    function(record, file){\n+      t.ok(file, 'handleZip works on zipped csv.');\n+      t.equal(record, virgRecord, 'Passes through correct record.');\n+    }, function(record, err){t.notOk(err)})\n+\n+  handleZip(fs.createReadStream('test/data/virginia.csv'), virgRecord, scratchSpace,\n+    function(record, file){\n+      t.notOk(file);\n+    }, function(record, err){t.ok(err, 'Errors on bad file.')})\n+});\n+\n+\n+\n+\n+test('assureRecordCount module', function(t){\n+  t.plan(5);\n+\n+  var countOnly = {count: 123};\n+  var deriveCount = {};\n+\n+  assureRecordCount(deriveCount, 'test/data/arkansas.json', function(err){\n+    t.notOk(err, 'Doesn\\'t err on good file and args.');\n+    t.equal(deriveCount.count, 19, 'Gets the appropriate count.');\n+  });\n+\n+  assureRecordCount(countOnly, 'doesn\\'t matter', function(err){\n+    t.notOk(err, 'Doesn\\'t err on good args and count present.');\n+    t.equal(countOnly.count, 123, 'Count remains the same.');\n+  });\n+\n+  assureRecordCount({}, 'test/data/fakebadfile', function(err){\n+    t.ok(err, 'Errs on bad file if no count provided.');\n+  });\n+});\n+\n+\n+\n+\n+test('ftpWrapper module', function(t){","path":"test/test.js","position":336,"original_position":336,"commit_id":"71787db19fff01c6c2a942bf1d64dfe3cfe98aca","original_commit_id":"71787db19fff01c6c2a942bf1d64dfe3cfe98aca","user":{"login":"hkeeler","id":4269085,"avatar_url":"https://avatars.githubusercontent.com/u/4269085?v=3","gravatar_id":"","url":"https://api.github.com/users/hkeeler","html_url":"https://github.com/hkeeler","followers_url":"https://api.github.com/users/hkeeler/followers","following_url":"https://api.github.com/users/hkeeler/following{/other_user}","gists_url":"https://api.github.com/users/hkeeler/gists{/gist_id}","starred_url":"https://api.github.com/users/hkeeler/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/hkeeler/subscriptions","organizations_url":"https://api.github.com/users/hkeeler/orgs","repos_url":"https://api.github.com/users/hkeeler/repos","events_url":"https://api.github.com/users/hkeeler/events{/privacy}","received_events_url":"https://api.github.com/users/hkeeler/received_events","type":"User","site_admin":false},"body":"Sounds good.","created_at":"2015-11-23T20:46:21Z","updated_at":"2015-11-23T20:46:21Z","html_url":"https://github.com/cfpb/grasshopper-loader/pull/133#discussion_r45658077","pull_request_url":"https://api.github.com/repos/cfpb/grasshopper-loader/pulls/133","_links":{"self":{"href":"https://api.github.com/repos/cfpb/grasshopper-loader/pulls/comments/45658077"},"html":{"href":"https://github.com/cfpb/grasshopper-loader/pull/133#discussion_r45658077"},"pull_request":{"href":"https://api.github.com/repos/cfpb/grasshopper-loader/pulls/133"}}},"pull_request":{"url":"https://api.github.com/repos/cfpb/grasshopper-loader/pulls/133","id":48143680,"html_url":"https://github.com/cfpb/grasshopper-loader/pull/133","diff_url":"https://github.com/cfpb/grasshopper-loader/pull/133.diff","patch_url":"https://github.com/cfpb/grasshopper-loader/pull/133.patch","issue_url":"https://api.github.com/repos/cfpb/grasshopper-loader/issues/133","number":133,"state":"open","locked":false,"title":"Testing revamp","user":{"login":"wpears","id":1558033,"avatar_url":"https://avatars.githubusercontent.com/u/1558033?v=3","gravatar_id":"","url":"https://api.github.com/users/wpears","html_url":"https://github.com/wpears","followers_url":"https://api.github.com/users/wpears/followers","following_url":"https://api.github.com/users/wpears/following{/other_user}","gists_url":"https://api.github.com/users/wpears/gists{/gist_id}","starred_url":"https://api.github.com/users/wpears/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/wpears/subscriptions","organizations_url":"https://api.github.com/users/wpears/orgs","repos_url":"https://api.github.com/users/wpears/repos","events_url":"https://api.github.com/users/wpears/events{/privacy}","received_events_url":"https://api.github.com/users/wpears/received_events","type":"User","site_admin":false},"body":"Long time coming testing revamp. Testing files have been cleaned up and tested expanded for all the new/altered modules.\r\n\r\nAs a bonus, this PR also has the changes to `tiger.js` that allow it to work from ftp directories.\r\nCloses #123 #126","created_at":"2015-10-20T00:24:08Z","updated_at":"2015-11-23T20:46:21Z","closed_at":null,"merged_at":null,"merge_commit_sha":"1857beda2cd7d08c2410f145f59b6cb4ab8d895a","assignee":null,"milestone":{"url":"https://api.github.com/repos/cfpb/grasshopper-loader/milestones/6","html_url":"https://github.com/cfpb/grasshopper-loader/milestones/M10%20-%20Grasshopper%20v1.0%20Beta","labels_url":"https://api.github.com/repos/cfpb/grasshopper-loader/milestones/6/labels","id":1414020,"number":6,"title":"M10 - Grasshopper v1.0 Beta","description":"This milestone is to develop the beta version of [Grasshopper](https://github.com/cfpb/grasshopper).","creator":{"login":"ericspry","id":2027141,"avatar_url":"https://avatars.githubusercontent.com/u/2027141?v=3","gravatar_id":"","url":"https://api.github.com/users/ericspry","html_url":"https://github.com/ericspry","followers_url":"https://api.github.com/users/ericspry/followers","following_url":"https://api.github.com/users/ericspry/following{/other_user}","gists_url":"https://api.github.com/users/ericspry/gists{/gist_id}","starred_url":"https://api.github.com/users/ericspry/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/ericspry/subscriptions","organizations_url":"https://api.github.com/users/ericspry/orgs","repos_url":"https://api.github.com/users/ericspry/repos","events_url":"https://api.github.com/users/ericspry/events{/privacy}","received_events_url":"https://api.github.com/users/ericspry/received_events","type":"User","site_admin":false},"open_issues":3,"closed_issues":0,"state":"open","created_at":"2015-11-16T16:04:39Z","updated_at":"2015-11-19T21:30:37Z","due_on":"2015-11-30T05:00:00Z","closed_at":null},"commits_url":"https://api.github.com/repos/cfpb/grasshopper-loader/pulls/133/commits","review_comments_url":"https://api.github.com/repos/cfpb/grasshopper-loader/pulls/133/comments","review_comment_url":"https://api.github.com/repos/cfpb/grasshopper-loader/pulls/comments{/number}","comments_url":"https://api.github.com/repos/cfpb/grasshopper-loader/issues/133/comments","statuses_url":"https://api.github.com/repos/cfpb/grasshopper-loader/statuses/71787db19fff01c6c2a942bf1d64dfe3cfe98aca","head":{"label":"cfpb:testing-revamp","ref":"testing-revamp","sha":"71787db19fff01c6c2a942bf1d64dfe3cfe98aca","user":{"login":"cfpb","id":1071563,"avatar_url":"https://avatars.githubusercontent.com/u/1071563?v=3","gravatar_id":"","url":"https://api.github.com/users/cfpb","html_url":"https://github.com/cfpb","followers_url":"https://api.github.com/users/cfpb/followers","following_url":"https://api.github.com/users/cfpb/following{/other_user}","gists_url":"https://api.github.com/users/cfpb/gists{/gist_id}","starred_url":"https://api.github.com/users/cfpb/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cfpb/subscriptions","organizations_url":"https://api.github.com/users/cfpb/orgs","repos_url":"https://api.github.com/users/cfpb/repos","events_url":"https://api.github.com/users/cfpb/events{/privacy}","received_events_url":"https://api.github.com/users/cfpb/received_events","type":"Organization","site_admin":false},"repo":{"id":30981871,"name":"grasshopper-loader","full_name":"cfpb/grasshopper-loader","owner":{"login":"cfpb","id":1071563,"avatar_url":"https://avatars.githubusercontent.com/u/1071563?v=3","gravatar_id":"","url":"https://api.github.com/users/cfpb","html_url":"https://github.com/cfpb","followers_url":"https://api.github.com/users/cfpb/followers","following_url":"https://api.github.com/users/cfpb/following{/other_user}","gists_url":"https://api.github.com/users/cfpb/gists{/gist_id}","starred_url":"https://api.github.com/users/cfpb/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cfpb/subscriptions","organizations_url":"https://api.github.com/users/cfpb/orgs","repos_url":"https://api.github.com/users/cfpb/repos","events_url":"https://api.github.com/users/cfpb/events{/privacy}","received_events_url":"https://api.github.com/users/cfpb/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/cfpb/grasshopper-loader","description":"Data loader for Grasshopper ","fork":false,"url":"https://api.github.com/repos/cfpb/grasshopper-loader","forks_url":"https://api.github.com/repos/cfpb/grasshopper-loader/forks","keys_url":"https://api.github.com/repos/cfpb/grasshopper-loader/keys{/key_id}","collaborators_url":"https://api.github.com/repos/cfpb/grasshopper-loader/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/cfpb/grasshopper-loader/teams","hooks_url":"https://api.github.com/repos/cfpb/grasshopper-loader/hooks","issue_events_url":"https://api.github.com/repos/cfpb/grasshopper-loader/issues/events{/number}","events_url":"https://api.github.com/repos/cfpb/grasshopper-loader/events","assignees_url":"https://api.github.com/repos/cfpb/grasshopper-loader/assignees{/user}","branches_url":"https://api.github.com/repos/cfpb/grasshopper-loader/branches{/branch}","tags_url":"https://api.github.com/repos/cfpb/grasshopper-loader/tags","blobs_url":"https://api.github.com/repos/cfpb/grasshopper-loader/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/cfpb/grasshopper-loader/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/cfpb/grasshopper-loader/git/refs{/sha}","trees_url":"https://api.github.com/repos/cfpb/grasshopper-loader/git/trees{/sha}","statuses_url":"https://api.github.com/repos/cfpb/grasshopper-loader/statuses/{sha}","languages_url":"https://api.github.com/repos/cfpb/grasshopper-loader/languages","stargazers_url":"https://api.github.com/repos/cfpb/grasshopper-loader/stargazers","contributors_url":"https://api.github.com/repos/cfpb/grasshopper-loader/contributors","subscribers_url":"https://api.github.com/repos/cfpb/grasshopper-loader/subscribers","subscription_url":"https://api.github.com/repos/cfpb/grasshopper-loader/subscription","commits_url":"https://api.github.com/repos/cfpb/grasshopper-loader/commits{/sha}","git_commits_url":"https://api.github.com/repos/cfpb/grasshopper-loader/git/commits{/sha}","comments_url":"https://api.github.com/repos/cfpb/grasshopper-loader/comments{/number}","issue_comment_url":"https://api.github.com/repos/cfpb/grasshopper-loader/issues/comments{/number}","contents_url":"https://api.github.com/repos/cfpb/grasshopper-loader/contents/{+path}","compare_url":"https://api.github.com/repos/cfpb/grasshopper-loader/compare/{base}...{head}","merges_url":"https://api.github.com/repos/cfpb/grasshopper-loader/merges","archive_url":"https://api.github.com/repos/cfpb/grasshopper-loader/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/cfpb/grasshopper-loader/downloads","issues_url":"https://api.github.com/repos/cfpb/grasshopper-loader/issues{/number}","pulls_url":"https://api.github.com/repos/cfpb/grasshopper-loader/pulls{/number}","milestones_url":"https://api.github.com/repos/cfpb/grasshopper-loader/milestones{/number}","notifications_url":"https://api.github.com/repos/cfpb/grasshopper-loader/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/cfpb/grasshopper-loader/labels{/name}","releases_url":"https://api.github.com/repos/cfpb/grasshopper-loader/releases{/id}","created_at":"2015-02-18T19:16:45Z","updated_at":"2015-07-11T17:52:23Z","pushed_at":"2015-11-19T22:06:33Z","git_url":"git://github.com/cfpb/grasshopper-loader.git","ssh_url":"git@github.com:cfpb/grasshopper-loader.git","clone_url":"https://github.com/cfpb/grasshopper-loader.git","svn_url":"https://github.com/cfpb/grasshopper-loader","homepage":"https://github.com/cfpb/grasshopper","size":2149,"stargazers_count":5,"watchers_count":5,"language":"JavaScript","has_issues":true,"has_downloads":true,"has_wiki":true,"has_pages":true,"forks_count":3,"mirror_url":null,"open_issues_count":23,"forks":3,"open_issues":23,"watchers":5,"default_branch":"master"}},"base":{"label":"cfpb:master","ref":"master","sha":"6b41ae8ecea5d7ff101c9b740e1c77407679cad0","user":{"login":"cfpb","id":1071563,"avatar_url":"https://avatars.githubusercontent.com/u/1071563?v=3","gravatar_id":"","url":"https://api.github.com/users/cfpb","html_url":"https://github.com/cfpb","followers_url":"https://api.github.com/users/cfpb/followers","following_url":"https://api.github.com/users/cfpb/following{/other_user}","gists_url":"https://api.github.com/users/cfpb/gists{/gist_id}","starred_url":"https://api.github.com/users/cfpb/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cfpb/subscriptions","organizations_url":"https://api.github.com/users/cfpb/orgs","repos_url":"https://api.github.com/users/cfpb/repos","events_url":"https://api.github.com/users/cfpb/events{/privacy}","received_events_url":"https://api.github.com/users/cfpb/received_events","type":"Organization","site_admin":false},"repo":{"id":30981871,"name":"grasshopper-loader","full_name":"cfpb/grasshopper-loader","owner":{"login":"cfpb","id":1071563,"avatar_url":"https://avatars.githubusercontent.com/u/1071563?v=3","gravatar_id":"","url":"https://api.github.com/users/cfpb","html_url":"https://github.com/cfpb","followers_url":"https://api.github.com/users/cfpb/followers","following_url":"https://api.github.com/users/cfpb/following{/other_user}","gists_url":"https://api.github.com/users/cfpb/gists{/gist_id}","starred_url":"https://api.github.com/users/cfpb/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cfpb/subscriptions","organizations_url":"https://api.github.com/users/cfpb/orgs","repos_url":"https://api.github.com/users/cfpb/repos","events_url":"https://api.github.com/users/cfpb/events{/privacy}","received_events_url":"https://api.github.com/users/cfpb/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/cfpb/grasshopper-loader","description":"Data loader for Grasshopper ","fork":false,"url":"https://api.github.com/repos/cfpb/grasshopper-loader","forks_url":"https://api.github.com/repos/cfpb/grasshopper-loader/forks","keys_url":"https://api.github.com/repos/cfpb/grasshopper-loader/keys{/key_id}","collaborators_url":"https://api.github.com/repos/cfpb/grasshopper-loader/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/cfpb/grasshopper-loader/teams","hooks_url":"https://api.github.com/repos/cfpb/grasshopper-loader/hooks","issue_events_url":"https://api.github.com/repos/cfpb/grasshopper-loader/issues/events{/number}","events_url":"https://api.github.com/repos/cfpb/grasshopper-loader/events","assignees_url":"https://api.github.com/repos/cfpb/grasshopper-loader/assignees{/user}","branches_url":"https://api.github.com/repos/cfpb/grasshopper-loader/branches{/branch}","tags_url":"https://api.github.com/repos/cfpb/grasshopper-loader/tags","blobs_url":"https://api.github.com/repos/cfpb/grasshopper-loader/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/cfpb/grasshopper-loader/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/cfpb/grasshopper-loader/git/refs{/sha}","trees_url":"https://api.github.com/repos/cfpb/grasshopper-loader/git/trees{/sha}","statuses_url":"https://api.github.com/repos/cfpb/grasshopper-loader/statuses/{sha}","languages_url":"https://api.github.com/repos/cfpb/grasshopper-loader/languages","stargazers_url":"https://api.github.com/repos/cfpb/grasshopper-loader/stargazers","contributors_url":"https://api.github.com/repos/cfpb/grasshopper-loader/contributors","subscribers_url":"https://api.github.com/repos/cfpb/grasshopper-loader/subscribers","subscription_url":"https://api.github.com/repos/cfpb/grasshopper-loader/subscription","commits_url":"https://api.github.com/repos/cfpb/grasshopper-loader/commits{/sha}","git_commits_url":"https://api.github.com/repos/cfpb/grasshopper-loader/git/commits{/sha}","comments_url":"https://api.github.com/repos/cfpb/grasshopper-loader/comments{/number}","issue_comment_url":"https://api.github.com/repos/cfpb/grasshopper-loader/issues/comments{/number}","contents_url":"https://api.github.com/repos/cfpb/grasshopper-loader/contents/{+path}","compare_url":"https://api.github.com/repos/cfpb/grasshopper-loader/compare/{base}...{head}","merges_url":"https://api.github.com/repos/cfpb/grasshopper-loader/merges","archive_url":"https://api.github.com/repos/cfpb/grasshopper-loader/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/cfpb/grasshopper-loader/downloads","issues_url":"https://api.github.com/repos/cfpb/grasshopper-loader/issues{/number}","pulls_url":"https://api.github.com/repos/cfpb/grasshopper-loader/pulls{/number}","milestones_url":"https://api.github.com/repos/cfpb/grasshopper-loader/milestones{/number}","notifications_url":"https://api.github.com/repos/cfpb/grasshopper-loader/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/cfpb/grasshopper-loader/labels{/name}","releases_url":"https://api.github.com/repos/cfpb/grasshopper-loader/releases{/id}","created_at":"2015-02-18T19:16:45Z","updated_at":"2015-07-11T17:52:23Z","pushed_at":"2015-11-19T22:06:33Z","git_url":"git://github.com/cfpb/grasshopper-loader.git","ssh_url":"git@github.com:cfpb/grasshopper-loader.git","clone_url":"https://github.com/cfpb/grasshopper-loader.git","svn_url":"https://github.com/cfpb/grasshopper-loader","homepage":"https://github.com/cfpb/grasshopper","size":2149,"stargazers_count":5,"watchers_count":5,"language":"JavaScript","has_issues":true,"has_downloads":true,"has_wiki":true,"has_pages":true,"forks_count":3,"mirror_url":null,"open_issues_count":23,"forks":3,"open_issues":23,"watchers":5,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/cfpb/grasshopper-loader/pulls/133"},"html":{"href":"https://github.com/cfpb/grasshopper-loader/pull/133"},"issue":{"href":"https://api.github.com/repos/cfpb/grasshopper-loader/issues/133"},"comments":{"href":"https://api.github.com/repos/cfpb/grasshopper-loader/issues/133/comments"},"review_comments":{"href":"https://api.github.com/repos/cfpb/grasshopper-loader/pulls/133/comments"},"review_comment":{"href":"https://api.github.com/repos/cfpb/grasshopper-loader/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/cfpb/grasshopper-loader/pulls/133/commits"},"statuses":{"href":"https://api.github.com/repos/cfpb/grasshopper-loader/statuses/71787db19fff01c6c2a942bf1d64dfe3cfe98aca"}}}}