{"action":"created","comment":{"url":"https://api.github.com/repos/epacke/indeni-enhancements/pulls/comments/175221626","pull_request_review_id":104726633,"id":175221626,"diff_hunk":"@@ -0,0 +1,492 @@\n+\n+// Adding functions:\n+// Each function must have the following properties.\n+// 1. testName: Shown in the test results.\n+// 2. reason: Shown in the popup.\n+// 3. severity: Which color the test result should have (recommendation = blue, warning = orange, error = red)\n+// 4. applyToSections: Which sections the function should apply to.\n+// 5. mark = A function which takes section content as parameter and returns modified matched content.\n+\n+// Note:\n+// When adding functions, remember to add space before and after the \"=\", or the tests might trigger when using the \"show all button\"\n+\n+// This list contains valid name prefixes for scripts\n+var indeniScriptNamePrefixes = [\"chkp\", \"f5\", \"panos\", \"nexus\", \"radware\", \"junos\", \"ios\", \"fortios\", \"cpembedded\", \"bluecoat\", \"linux\", \"unix\"];\n+\n+var codeValidationFunctions = {\n+    \"validScriptNamePrefix\": new function(){\n+\n+        // Prefixes is important not only to distinguish which type of device the script is executed on\n+        // but also to avoid script name collisions. \n+        // This is just a recommendation.\n+        // Example of an offending line: \n+        //name: sausage-metric\n+\n+        this.testName = \"Valid script name prefix\";\n+        this.reason = \"Prefixes is important not only to distinguish which type of device the script is executed on but also to avoid script name collisions\";\n+        this.severity = \"error\";\n+        this.applyToSections = [\"meta\"];\n+\n+        this.mark = function(content){\n+\n+            var scriptNameRow = content.match(/^name:.*$/m);\n+\n+            if(scriptNameRow.length === 1){\n+\n+                var scriptName = scriptNameRow[0].split(\" \")[1];\n+                var prefix = scriptName.replace(/-.+$/, \"\");\n+\n+                if(indeniScriptNamePrefixes.indexOf(prefix) === -1){\n+                    var re = new RegExp(scriptName);\n+                    content = content.replace(re, getSpan(this.severity, this.reason, \"$&\"));\n+                    console.log(content)\n+                }\n+            }\n+\n+            return content;\n+        }\n+    },\n+    \"genericSpaceBeforeAndAfter\": new function(){\n+\n+        // Space before and after curly brackets and parenthesis makes the code less compact and more readable\n+        // This is just a recommendation.\n+        // Example of an offending line: \n+        //#if(something == \"1\"){\n+        ///A regexp/ {\n+\n+        this.testName = \"Space <3\";\n+        this.reason = \"Space in certain places makes the code look nicer\";\n+        this.severity = \"recommendation\";\n+        this.applyToSections = [\"awk\"];\n+\n+        this.mark = function(content){\n+            return content.replace(/if\\(|\\){|}else|else{/g, getSpan(this.severity, this.reason, \"$&\"));\n+        }\n+    },\n+    \"spaceBeforeExample\": new function() {\n+\n+        // Space before examples maybe looks nice, but it's far from exact\n+        // Example of an offending line: \n+        //# my_example\n+        ///A regexp/ {\n+\n+        this.testName = \"Space before example\";\n+        this.reason = \"Space before examples maybe looks nice, but it's far from exact unless the input file actually has one. Consider removing this space unless yours does\";\n+        this.severity = \"warning\";\n+        this.applyToSections = [\"awk\"];\n+\n+        this.mark = function(content){\n+            return content.replace(/(\\# .+)(\\n\\/.+\\/\\s*{\\n)/g, getSpan(this.severity, this.reason, \"$1\") + \"$2\");\n+        }\n+    },\n+    \"variableNamingConventions\": new function (){\n+\n+        // Variables should use snake case (snake_case)\n+        // Example of an offending line: \n+        //myVariable = 1\n+        //my-variable = 1\n+\n+        this.testName = \"Variable naming\";\n+        this.reason = \"Most people use snake case (ie. my_variable) in the repository. This is a suggestion for you to do the same.\";\n+        this.severity = \"warning\";\n+        this.applyToSections = [\"awk\"];\n+\n+        this.mark = function(content){\n+            return content.replace(/([a-z][A-Z][a-z]{0,}\\s*=\\s*|\\-[a-zA-Z]+\\s*=\\s*)/gm, getSpan(this.severity, this.reason, \"$&\"));\n+        }\n+    },\n+    \"emptyBEGINSection\": new function (){\n+        // Empty BEGIN sections serves no purpose and should be disposed of.\n+        // Example of an offending line: \n+        //END {\n+        //    \n+        //}\n+\n+        this.testName = \"Empty BEGIN\";\n+        this.reason = \"Empty BEGIN sections serves no purpose and should be disposed of.\";\n+        this.severity = \"warning\";\n+        this.applyToSections = [\"awk\"];\n+\n+        this.mark = function(content){\n+            return content.replace(/BEGIN {\\s*}/g, getSpan(this.severity, this.reason, \"$&\"));\n+        }\n+    },\n+    \"emptyENDSection\": new function (){\n+\n+        // Empty END sections serves no purpose and should be disposed of.\n+        // Example of an offending line: \n+        //END {\n+        //    \n+        //}\n+\n+        this.testName = \"Empty END\";\n+        this.reason = \"Empty END sections serves no purpose and should be disposed of.\";\n+        this.severity = \"warning\";\n+        this.applyToSections = [\"awk\"];\n+\n+        this.mark = function(content){\n+            return content.replace(/END {\\s*}/g, getSpan(this.severity, this.reason, \"$&\"));\n+        }\n+    },\n+    \"writeDebugExists\": new function(){\n+\n+        // writeDebug is great for troubleshooting, but code with that command should never reach customers.\n+        // Example of an offending line: \n+        //writeDebug(\"this is a debug\")\n+\n+        this.testName = \"writeDebug()\";\n+        this.reason = \"writeDebug is great for troubleshooting, but code with that command should never reach customers.\";\n+        this.severity = \"error\";\n+        this.applyToSections = [\"awk\"];\n+\n+        this.mark = function(content){\n+            return content.replace(/writeDebug\\(.+\\)/gm, getSpan(this.severity, this.reason, \"$&\"));\n+        }\n+    },\n+    \"ifContainsSingleEqualSign\": new function (){\n+\n+        // Single equal sign in an if is always true and the cause of bugs\n+        // Example of an offending line: \n+        //if (variable = 1) { \n+\n+        this.testName = \"If statement with single equal sign\";\n+        this.reason = \"Found an if statement contains a single equal sign. Since this is most likely an accident and it'd always return true it could cause strange bugs in the code. Consider replacing with double equal signs.\";\n+        this.severity = \"error\";\n+        this.applyToSections = [\"awk\"];\n+\n+        this.mark = function(content){\n+            return content.replace(/if\\s*?\\([^=]+[^=!]={1}[^=].+\\)/gm, getSpan(this.severity, this.reason, \"$&\"));\n+        }\n+    },\n+    \"columnVariableManipulation\": new function (){\n+\n+        // Changing column values is potentially the cause of bugs and should be avoided\n+        // Example of an offending line:\n+        // variable = test   \n+\n+        this.testName = \"Column variable manipulation\";\n+        this.reason = \"Changing column values (ie. $0, $1) could easily lead to unexpected behaviors.<br>It is highly recommended to instead save the column value to a variable and change that instead.\";\n+        this.severity = \"warning\";\n+        this.applyToSections = [\"awk\"];\n+\n+        this.mark = function(content){\n+            return content.replace(/g{0,1}sub.+?(\\$[0-9])+/gm, getSpan(this.severity, this.reason, \"$&\"));\n+        }\n+    },\n+    \"trailingWhiteSpace\": new function() {\n+\n+        //Trailing white space serves no purpose\n+        // Example of an offending line:\n+        // variable = test   \n+\n+        this.testName = \"Trailing White-Space\";\n+        this.reason = \"Trailing white space serves no purpose and should be removed\";\n+        this.severity = \"error\";\n+        this.applyToSections = [\"awk\", \"yaml\"];\n+\n+        this.mark = function(content){\n+            return content.replace(/[ \\t]+$/gm, getSpan(this.severity, this.reason, \"$&\"))\n+        }\n+\n+    },\n+    \"leadingTab\": new function () {\n+\n+        // Tabs should not be used for indentation\n+        // Example of an offending line:\n+        //  variable = test\n+\n+        this.testName = \"Leading tabs\";\n+        this.reason = \"Tabs should not be used for indentation, please configure your editor to use space for indentation\";\n+        this.severity = \"error\";\n+        this.applyToSections = [\"awk\", \"yaml\"];\n+\n+        this.mark = function(content){\n+            return content.replace(/^[\\t]+/gm, getSpan(this.severity, this.reason, \"$&\"))\n+        }\n+\n+    },\n+    \"comparisonOperatorNoSpace\": new function () {","path":"code-quality/code-validation.js","position":208,"original_position":208,"commit_id":"85eb741101739e8f8dc738ed167285d1cd0d8a50","original_commit_id":"85eb741101739e8f8dc738ed167285d1cd0d8a50","user":{"login":"haughki","id":1500330,"avatar_url":"https://avatars0.githubusercontent.com/u/1500330?v=4","gravatar_id":"","url":"https://api.github.com/users/haughki","html_url":"https://github.com/haughki","followers_url":"https://api.github.com/users/haughki/followers","following_url":"https://api.github.com/users/haughki/following{/other_user}","gists_url":"https://api.github.com/users/haughki/gists{/gist_id}","starred_url":"https://api.github.com/users/haughki/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/haughki/subscriptions","organizations_url":"https://api.github.com/users/haughki/orgs","repos_url":"https://api.github.com/users/haughki/repos","events_url":"https://api.github.com/users/haughki/events{/privacy}","received_events_url":"https://api.github.com/users/haughki/received_events","type":"User","site_admin":false},"body":"This is the only function I touched from the original file. Changed the name, tweaked the .reason, and refactored the pattern.","created_at":"2018-03-16T21:45:07Z","updated_at":"2018-03-16T21:45:07Z","html_url":"https://github.com/epacke/indeni-enhancements/pull/1#discussion_r175221626","pull_request_url":"https://api.github.com/repos/epacke/indeni-enhancements/pulls/1","author_association":"NONE","_links":{"self":{"href":"https://api.github.com/repos/epacke/indeni-enhancements/pulls/comments/175221626"},"html":{"href":"https://github.com/epacke/indeni-enhancements/pull/1#discussion_r175221626"},"pull_request":{"href":"https://api.github.com/repos/epacke/indeni-enhancements/pulls/1"}}},"pull_request":{"url":"https://api.github.com/repos/epacke/indeni-enhancements/pulls/1","id":175652639,"html_url":"https://github.com/epacke/indeni-enhancements/pull/1","diff_url":"https://github.com/epacke/indeni-enhancements/pull/1.diff","patch_url":"https://github.com/epacke/indeni-enhancements/pull/1.patch","issue_url":"https://api.github.com/repos/epacke/indeni-enhancements/issues/1","number":1,"state":"open","locked":false,"title":"Add lightweight test framework and some tests to update a validation step","user":{"login":"haughki","id":1500330,"avatar_url":"https://avatars0.githubusercontent.com/u/1500330?v=4","gravatar_id":"","url":"https://api.github.com/users/haughki","html_url":"https://github.com/haughki","followers_url":"https://api.github.com/users/haughki/followers","following_url":"https://api.github.com/users/haughki/following{/other_user}","gists_url":"https://api.github.com/users/haughki/gists{/gist_id}","starred_url":"https://api.github.com/users/haughki/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/haughki/subscriptions","organizations_url":"https://api.github.com/users/haughki/orgs","repos_url":"https://api.github.com/users/haughki/repos","events_url":"https://api.github.com/users/haughki/events{/privacy}","received_events_url":"https://api.github.com/users/haughki/received_events","type":"User","site_admin":false},"body":"The first time I went to use \"indeni-enhancements\" I got a false positive\r\nfor spacing issues around \">=\". So, here's my proposed solution. I felt\r\nlike I needed to be able to unit test to be sure I was breaking anything,\r\nand to be sure my fix was good. I've done basic system/UI testing, but\r\nif you decide to take this change, I hope you'll do some sanity checking\r\nyourself, since I'm not that familiar with the application. Fwiw, that would \r\nbe the next thing I would add: an automated, higher-level integration \r\nregression test to make sure that changing something doesn't break \r\nsomething else.\r\n\r\n- Adds a super-lightweight test framework, \"tape\", to the project\r\n- Adds package.json for node/npm management of the single, dev-only\r\n  dependency.\r\n- Adds a test directory and a single test file under there targeting one\r\n  of the validation functions. To run tests: nodejs ./test/*.js (note:\r\n  this won't work in Windows cmd shell since dos can't do *nix glob -- \r\n  need bash for windows to run these).\r\n- To make it easier (possible?) to do the unit testing, separates the code\r\n  validation functions out into their own file. Both 'code-validation.js'\r\n  and 'indeni.js' depend on 'getScriptSections', so I had to pull that out\r\n  into a separate file ('common.js') to avoid circular dependency.\r\n  'indeni.html' imports the .js files in a careful order to make sure\r\n  everything's where it should be for each import. Also, adds a node\r\n  \"export\" statement to 'code-validation.js' so that we can access the\r\n  validation functions in the tape test modules via requires(). Note that\r\n  this doesn't make node a requirement for the overall project, only for\r\n  the unit tests. The indeni.html doesn't import node.\r\n- Adds tests for spacing around comparison operators and update regex\r\n  accordingly: now handles all the AWK comparison operators:  =!<>~\r\n- Rename comparison operator spaces function to make it more clear what\r\n  it's doing, and rename test file to agree.\r\n- add test-runner.sh to make it easy to run tests from IDE","created_at":"2018-03-16T21:41:05Z","updated_at":"2018-03-16T21:45:07Z","closed_at":null,"merged_at":null,"merge_commit_sha":"a813c303f0f6ab26cb98c7e58f8324f2e8da2988","assignee":null,"assignees":[],"requested_reviewers":[],"requested_teams":[],"labels":[],"milestone":null,"commits_url":"https://api.github.com/repos/epacke/indeni-enhancements/pulls/1/commits","review_comments_url":"https://api.github.com/repos/epacke/indeni-enhancements/pulls/1/comments","review_comment_url":"https://api.github.com/repos/epacke/indeni-enhancements/pulls/comments{/number}","comments_url":"https://api.github.com/repos/epacke/indeni-enhancements/issues/1/comments","statuses_url":"https://api.github.com/repos/epacke/indeni-enhancements/statuses/85eb741101739e8f8dc738ed167285d1cd0d8a50","head":{"label":"haughki:simple-test-framework","ref":"simple-test-framework","sha":"85eb741101739e8f8dc738ed167285d1cd0d8a50","user":{"login":"haughki","id":1500330,"avatar_url":"https://avatars0.githubusercontent.com/u/1500330?v=4","gravatar_id":"","url":"https://api.github.com/users/haughki","html_url":"https://github.com/haughki","followers_url":"https://api.github.com/users/haughki/followers","following_url":"https://api.github.com/users/haughki/following{/other_user}","gists_url":"https://api.github.com/users/haughki/gists{/gist_id}","starred_url":"https://api.github.com/users/haughki/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/haughki/subscriptions","organizations_url":"https://api.github.com/users/haughki/orgs","repos_url":"https://api.github.com/users/haughki/repos","events_url":"https://api.github.com/users/haughki/events{/privacy}","received_events_url":"https://api.github.com/users/haughki/received_events","type":"User","site_admin":false},"repo":{"id":125118300,"name":"indeni-enhancements","full_name":"haughki/indeni-enhancements","owner":{"login":"haughki","id":1500330,"avatar_url":"https://avatars0.githubusercontent.com/u/1500330?v=4","gravatar_id":"","url":"https://api.github.com/users/haughki","html_url":"https://github.com/haughki","followers_url":"https://api.github.com/users/haughki/followers","following_url":"https://api.github.com/users/haughki/following{/other_user}","gists_url":"https://api.github.com/users/haughki/gists{/gist_id}","starred_url":"https://api.github.com/users/haughki/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/haughki/subscriptions","organizations_url":"https://api.github.com/users/haughki/orgs","repos_url":"https://api.github.com/users/haughki/repos","events_url":"https://api.github.com/users/haughki/events{/privacy}","received_events_url":"https://api.github.com/users/haughki/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/haughki/indeni-enhancements","description":"My personal fork of epacke's repo -- please contribute to the original.","fork":true,"url":"https://api.github.com/repos/haughki/indeni-enhancements","forks_url":"https://api.github.com/repos/haughki/indeni-enhancements/forks","keys_url":"https://api.github.com/repos/haughki/indeni-enhancements/keys{/key_id}","collaborators_url":"https://api.github.com/repos/haughki/indeni-enhancements/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/haughki/indeni-enhancements/teams","hooks_url":"https://api.github.com/repos/haughki/indeni-enhancements/hooks","issue_events_url":"https://api.github.com/repos/haughki/indeni-enhancements/issues/events{/number}","events_url":"https://api.github.com/repos/haughki/indeni-enhancements/events","assignees_url":"https://api.github.com/repos/haughki/indeni-enhancements/assignees{/user}","branches_url":"https://api.github.com/repos/haughki/indeni-enhancements/branches{/branch}","tags_url":"https://api.github.com/repos/haughki/indeni-enhancements/tags","blobs_url":"https://api.github.com/repos/haughki/indeni-enhancements/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/haughki/indeni-enhancements/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/haughki/indeni-enhancements/git/refs{/sha}","trees_url":"https://api.github.com/repos/haughki/indeni-enhancements/git/trees{/sha}","statuses_url":"https://api.github.com/repos/haughki/indeni-enhancements/statuses/{sha}","languages_url":"https://api.github.com/repos/haughki/indeni-enhancements/languages","stargazers_url":"https://api.github.com/repos/haughki/indeni-enhancements/stargazers","contributors_url":"https://api.github.com/repos/haughki/indeni-enhancements/contributors","subscribers_url":"https://api.github.com/repos/haughki/indeni-enhancements/subscribers","subscription_url":"https://api.github.com/repos/haughki/indeni-enhancements/subscription","commits_url":"https://api.github.com/repos/haughki/indeni-enhancements/commits{/sha}","git_commits_url":"https://api.github.com/repos/haughki/indeni-enhancements/git/commits{/sha}","comments_url":"https://api.github.com/repos/haughki/indeni-enhancements/comments{/number}","issue_comment_url":"https://api.github.com/repos/haughki/indeni-enhancements/issues/comments{/number}","contents_url":"https://api.github.com/repos/haughki/indeni-enhancements/contents/{+path}","compare_url":"https://api.github.com/repos/haughki/indeni-enhancements/compare/{base}...{head}","merges_url":"https://api.github.com/repos/haughki/indeni-enhancements/merges","archive_url":"https://api.github.com/repos/haughki/indeni-enhancements/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/haughki/indeni-enhancements/downloads","issues_url":"https://api.github.com/repos/haughki/indeni-enhancements/issues{/number}","pulls_url":"https://api.github.com/repos/haughki/indeni-enhancements/pulls{/number}","milestones_url":"https://api.github.com/repos/haughki/indeni-enhancements/milestones{/number}","notifications_url":"https://api.github.com/repos/haughki/indeni-enhancements/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/haughki/indeni-enhancements/labels{/name}","releases_url":"https://api.github.com/repos/haughki/indeni-enhancements/releases{/id}","deployments_url":"https://api.github.com/repos/haughki/indeni-enhancements/deployments","created_at":"2018-03-13T21:41:25Z","updated_at":"2018-03-13T21:42:15Z","pushed_at":"2018-03-16T21:29:23Z","git_url":"git://github.com/haughki/indeni-enhancements.git","ssh_url":"git@github.com:haughki/indeni-enhancements.git","clone_url":"https://github.com/haughki/indeni-enhancements.git","svn_url":"https://github.com/haughki/indeni-enhancements","homepage":"","size":110,"stargazers_count":0,"watchers_count":0,"language":"JavaScript","has_issues":false,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":0,"mirror_url":null,"archived":false,"open_issues_count":0,"license":null,"forks":0,"open_issues":0,"watchers":0,"default_branch":"master"}},"base":{"label":"epacke:master","ref":"master","sha":"73ed4933a4c9c806a60c1e3e158e65415dda93a7","user":{"login":"epacke","id":17186619,"avatar_url":"https://avatars3.githubusercontent.com/u/17186619?v=4","gravatar_id":"","url":"https://api.github.com/users/epacke","html_url":"https://github.com/epacke","followers_url":"https://api.github.com/users/epacke/followers","following_url":"https://api.github.com/users/epacke/following{/other_user}","gists_url":"https://api.github.com/users/epacke/gists{/gist_id}","starred_url":"https://api.github.com/users/epacke/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/epacke/subscriptions","organizations_url":"https://api.github.com/users/epacke/orgs","repos_url":"https://api.github.com/users/epacke/repos","events_url":"https://api.github.com/users/epacke/events{/privacy}","received_events_url":"https://api.github.com/users/epacke/received_events","type":"User","site_admin":false},"repo":{"id":112582370,"name":"indeni-enhancements","full_name":"epacke/indeni-enhancements","owner":{"login":"epacke","id":17186619,"avatar_url":"https://avatars3.githubusercontent.com/u/17186619?v=4","gravatar_id":"","url":"https://api.github.com/users/epacke","html_url":"https://github.com/epacke","followers_url":"https://api.github.com/users/epacke/followers","following_url":"https://api.github.com/users/epacke/following{/other_user}","gists_url":"https://api.github.com/users/epacke/gists{/gist_id}","starred_url":"https://api.github.com/users/epacke/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/epacke/subscriptions","organizations_url":"https://api.github.com/users/epacke/orgs","repos_url":"https://api.github.com/users/epacke/repos","events_url":"https://api.github.com/users/epacke/events{/privacy}","received_events_url":"https://api.github.com/users/epacke/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/epacke/indeni-enhancements","description":"Making the life easier for indeni developers","fork":false,"url":"https://api.github.com/repos/epacke/indeni-enhancements","forks_url":"https://api.github.com/repos/epacke/indeni-enhancements/forks","keys_url":"https://api.github.com/repos/epacke/indeni-enhancements/keys{/key_id}","collaborators_url":"https://api.github.com/repos/epacke/indeni-enhancements/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/epacke/indeni-enhancements/teams","hooks_url":"https://api.github.com/repos/epacke/indeni-enhancements/hooks","issue_events_url":"https://api.github.com/repos/epacke/indeni-enhancements/issues/events{/number}","events_url":"https://api.github.com/repos/epacke/indeni-enhancements/events","assignees_url":"https://api.github.com/repos/epacke/indeni-enhancements/assignees{/user}","branches_url":"https://api.github.com/repos/epacke/indeni-enhancements/branches{/branch}","tags_url":"https://api.github.com/repos/epacke/indeni-enhancements/tags","blobs_url":"https://api.github.com/repos/epacke/indeni-enhancements/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/epacke/indeni-enhancements/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/epacke/indeni-enhancements/git/refs{/sha}","trees_url":"https://api.github.com/repos/epacke/indeni-enhancements/git/trees{/sha}","statuses_url":"https://api.github.com/repos/epacke/indeni-enhancements/statuses/{sha}","languages_url":"https://api.github.com/repos/epacke/indeni-enhancements/languages","stargazers_url":"https://api.github.com/repos/epacke/indeni-enhancements/stargazers","contributors_url":"https://api.github.com/repos/epacke/indeni-enhancements/contributors","subscribers_url":"https://api.github.com/repos/epacke/indeni-enhancements/subscribers","subscription_url":"https://api.github.com/repos/epacke/indeni-enhancements/subscription","commits_url":"https://api.github.com/repos/epacke/indeni-enhancements/commits{/sha}","git_commits_url":"https://api.github.com/repos/epacke/indeni-enhancements/git/commits{/sha}","comments_url":"https://api.github.com/repos/epacke/indeni-enhancements/comments{/number}","issue_comment_url":"https://api.github.com/repos/epacke/indeni-enhancements/issues/comments{/number}","contents_url":"https://api.github.com/repos/epacke/indeni-enhancements/contents/{+path}","compare_url":"https://api.github.com/repos/epacke/indeni-enhancements/compare/{base}...{head}","merges_url":"https://api.github.com/repos/epacke/indeni-enhancements/merges","archive_url":"https://api.github.com/repos/epacke/indeni-enhancements/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/epacke/indeni-enhancements/downloads","issues_url":"https://api.github.com/repos/epacke/indeni-enhancements/issues{/number}","pulls_url":"https://api.github.com/repos/epacke/indeni-enhancements/pulls{/number}","milestones_url":"https://api.github.com/repos/epacke/indeni-enhancements/milestones{/number}","notifications_url":"https://api.github.com/repos/epacke/indeni-enhancements/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/epacke/indeni-enhancements/labels{/name}","releases_url":"https://api.github.com/repos/epacke/indeni-enhancements/releases{/id}","deployments_url":"https://api.github.com/repos/epacke/indeni-enhancements/deployments","created_at":"2017-11-30T07:56:12Z","updated_at":"2018-03-10T02:59:05Z","pushed_at":"2018-03-16T21:41:06Z","git_url":"git://github.com/epacke/indeni-enhancements.git","ssh_url":"git@github.com:epacke/indeni-enhancements.git","clone_url":"https://github.com/epacke/indeni-enhancements.git","svn_url":"https://github.com/epacke/indeni-enhancements","homepage":null,"size":95,"stargazers_count":0,"watchers_count":0,"language":"JavaScript","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":1,"mirror_url":null,"archived":false,"open_issues_count":1,"license":null,"forks":1,"open_issues":1,"watchers":0,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/epacke/indeni-enhancements/pulls/1"},"html":{"href":"https://github.com/epacke/indeni-enhancements/pull/1"},"issue":{"href":"https://api.github.com/repos/epacke/indeni-enhancements/issues/1"},"comments":{"href":"https://api.github.com/repos/epacke/indeni-enhancements/issues/1/comments"},"review_comments":{"href":"https://api.github.com/repos/epacke/indeni-enhancements/pulls/1/comments"},"review_comment":{"href":"https://api.github.com/repos/epacke/indeni-enhancements/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/epacke/indeni-enhancements/pulls/1/commits"},"statuses":{"href":"https://api.github.com/repos/epacke/indeni-enhancements/statuses/85eb741101739e8f8dc738ed167285d1cd0d8a50"}},"author_association":"NONE"}}
{"actor":{"display_login":"haughki"}}