{"action":"created","comment":{"url":"https://api.github.com/repos/keenlabs/keen-sdk-net/pulls/comments/150374924","pull_request_review_id":75923746,"id":150374924,"diff_hunk":"@@ -0,0 +1,306 @@\n+﻿using Newtonsoft.Json;\n+using Newtonsoft.Json.Linq;\n+using Newtonsoft.Json.Serialization;\n+using System;\n+using System.Collections.Generic;\n+using System.Linq;\n+using System.Net;\n+using System.Threading.Tasks;\n+\n+\n+namespace Keen.Core.Dataset\n+{\n+    /// <summary>\n+    /// Datasets implements the IDataset interface which represents the Keen.IO Cached Datasets\n+    /// API methods.\n+    /// </summary>\n+    internal class Datasets : IDataset\n+    {\n+        private const int MAX_DATASET_DEFINITION_LIST_LIMIT = 100;\n+        private static readonly JsonSerializerSettings SERIALIZER_SETTINGS =\n+            new JsonSerializerSettings\n+            {\n+                ContractResolver = new DefaultContractResolver\n+                {\n+                    NamingStrategy = new SnakeCaseNamingStrategy()\n+                },\n+                DefaultValueHandling = DefaultValueHandling.IgnoreAndPopulate,\n+                Formatting = Formatting.None\n+            };\n+\n+        private readonly IKeenHttpClient _keenHttpClient;\n+        private readonly string _cachedDatasetRelativeUrl;\n+        private readonly string _masterKey;\n+\n+\n+        internal Datasets(IProjectSettings prjSettings,\n+                          IKeenHttpClientProvider keenHttpClientProvider)\n+        {\n+            if (null == prjSettings)\n+            {\n+                throw new ArgumentNullException(nameof(prjSettings),\n+                                                \"Project Settings must be provided.\");\n+            }\n+\n+            if (null == keenHttpClientProvider)\n+            {\n+                throw new ArgumentNullException(nameof(keenHttpClientProvider),\n+                                                \"A KeenHttpClient provider must be provided.\");\n+            }\n+\n+            if (string.IsNullOrWhiteSpace(prjSettings.KeenUrl) ||\n+                !Uri.IsWellFormedUriString(prjSettings.KeenUrl, UriKind.Absolute))\n+            {\n+                throw new KeenException(\n+                    \"A properly formatted KeenUrl must be provided via Project Settings.\");\n+            }\n+\n+            var serverBaseUrl = new Uri(prjSettings.KeenUrl);\n+            _keenHttpClient = keenHttpClientProvider.GetForUrl(serverBaseUrl);\n+            _cachedDatasetRelativeUrl =\n+                KeenHttpClient.GetRelativeUrl(prjSettings.ProjectId,\n+                                              KeenConstants.DatasetsResource);\n+\n+            _masterKey = prjSettings.MasterKey;\n+        }\n+\n+        public async Task<JObject> GetResultsAsync(string datasetName,\n+                                                   string indexBy,\n+                                                   string timeframe)\n+        {\n+            if (string.IsNullOrWhiteSpace(datasetName))\n+            {\n+                throw new KeenException(\"A dataset name is required.\");\n+            }\n+\n+            if (string.IsNullOrWhiteSpace(indexBy))\n+            {\n+                throw new KeenException(\"A value to index by is required.\");\n+            }\n+\n+            if (string.IsNullOrWhiteSpace(timeframe))\n+            {\n+                throw new KeenException(\"A timeframe by is required.\");\n+            }\n+\n+            if (string.IsNullOrWhiteSpace(_masterKey))\n+            {\n+                throw new KeenException(\"An API masterkey is required to get dataset results.\");\n+            }\n+\n+            var datasetResultsUrl = $\"{GetDatasetUrl(datasetName)}/results\";\n+\n+            var url = $\"{datasetResultsUrl}?index_by={indexBy}&timeframe={timeframe}\";\n+\n+            var responseMsg = await _keenHttpClient\n+                .GetAsync(url, _masterKey)\n+                .ConfigureAwait(continueOnCapturedContext: false);\n+\n+            var responseString = await responseMsg\n+                .Content\n+                .ReadAsStringAsync()\n+                .ConfigureAwait(continueOnCapturedContext: false);\n+\n+            var response = JObject.Parse(responseString);\n+\n+            KeenUtil.CheckApiErrorCode(response);\n+\n+            if (!responseMsg.IsSuccessStatusCode)\n+            {\n+                throw new KeenException($\"Request failed with status: {responseMsg.StatusCode}\");\n+            }\n+\n+            return response;\n+        }\n+\n+        public async Task<DatasetDefinition> GetDefinitionAsync(string datasetName)\n+        {\n+            if (string.IsNullOrWhiteSpace(datasetName))\n+            {\n+                throw new KeenException(\"A dataset name is required.\");\n+            }\n+\n+            if (string.IsNullOrWhiteSpace(_masterKey))\n+            {\n+                throw new KeenException(\"An API masterkey is required to get dataset results.\");\n+            }\n+\n+            var responseMsg = await _keenHttpClient\n+                .GetAsync(GetDatasetUrl(datasetName), _masterKey)\n+                .ConfigureAwait(continueOnCapturedContext: false);\n+\n+            var responseString = await responseMsg\n+                .Content\n+                .ReadAsStringAsync()\n+                .ConfigureAwait(continueOnCapturedContext: false);\n+\n+            var response = JObject.Parse(responseString);\n+\n+            KeenUtil.CheckApiErrorCode(response);\n+\n+            if (!responseMsg.IsSuccessStatusCode)\n+            {\n+                throw new KeenException($\"Request failed with status: {responseMsg.StatusCode}\");\n+            }\n+\n+            return JsonConvert.DeserializeObject<DatasetDefinition>(responseString,\n+                                                                    SERIALIZER_SETTINGS);\n+        }\n+\n+        public async Task<DatasetDefinitionCollection> ListDefinitionsAsync(\n+            int limit = 10,\n+            string afterName = null)\n+        {\n+            if (string.IsNullOrWhiteSpace(_masterKey))\n+            {\n+                throw new KeenException(\"An API masterkey is required to get dataset results.\");\n+            }\n+\n+            var datasetResultsUrl = $\"{_cachedDatasetRelativeUrl}?limit={limit}\";\n+\n+            if (!string.IsNullOrWhiteSpace(afterName))\n+            {\n+                datasetResultsUrl += $\"&after_name={afterName}\";\n+            }\n+\n+            var responseMsg = await _keenHttpClient\n+                .GetAsync(datasetResultsUrl, _masterKey)\n+                .ConfigureAwait(continueOnCapturedContext: false);\n+\n+            var responseString = await responseMsg\n+                .Content\n+                .ReadAsStringAsync()\n+                .ConfigureAwait(continueOnCapturedContext: false);\n+\n+            var response = JObject.Parse(responseString);\n+\n+            KeenUtil.CheckApiErrorCode(response);\n+\n+            if (!responseMsg.IsSuccessStatusCode)\n+            {\n+                throw new KeenException($\"Request failed with status: {responseMsg.StatusCode}\");\n+            }\n+\n+            return JsonConvert.DeserializeObject<DatasetDefinitionCollection>(responseString,\n+                                                                              SERIALIZER_SETTINGS);\n+        }\n+\n+        public async Task<IEnumerable<DatasetDefinition>> ListAllDefinitionsAsync()\n+        {\n+            var allDefinitions = new List<DatasetDefinition>();\n+            var firstSet = await ListDefinitionsAsync(MAX_DATASET_DEFINITION_LIST_LIMIT)\n+                .ConfigureAwait(continueOnCapturedContext: false);\n+\n+            if (null == firstSet?.Datasets)\n+            {\n+                throw new KeenException(\"Failed to fetch definition list\");\n+            }\n+\n+            if (!firstSet.Datasets.Any())\n+            {\n+                return allDefinitions;\n+            }\n+\n+            if (firstSet.Count <= firstSet.Datasets.Count())\n+            {\n+                return firstSet.Datasets;\n+            }\n+\n+            allDefinitions.AddRange(firstSet.Datasets);\n+\n+            do\n+            {\n+                var nextSet = await ListDefinitionsAsync(MAX_DATASET_DEFINITION_LIST_LIMIT,\n+                                                         allDefinitions.Last().DatasetName)\n+                    .ConfigureAwait(continueOnCapturedContext: false);\n+\n+                if (null == nextSet?.Datasets || !nextSet.Datasets.Any())\n+                {\n+                    throw new KeenException(\"Failed to fetch definition list\");\n+                }\n+\n+                allDefinitions.AddRange(nextSet.Datasets);\n+            } while (firstSet.Count > allDefinitions.Count);\n+\n+            return allDefinitions;\n+        }\n+\n+        public async Task DeleteDatasetAsync(string datasetName)\n+        {\n+            if (string.IsNullOrWhiteSpace(datasetName))\n+            {\n+                throw new KeenException(\"A dataset name is required.\");\n+            }\n+\n+            if (string.IsNullOrWhiteSpace(_masterKey))\n+            {\n+                throw new KeenException(\"An API masterkey is required to get dataset results.\");\n+            }\n+\n+            var responseMsg = await _keenHttpClient\n+                .DeleteAsync(GetDatasetUrl(datasetName), _masterKey)\n+                .ConfigureAwait(continueOnCapturedContext: false);\n+\n+            var responseString = await responseMsg\n+                .Content\n+                .ReadAsStringAsync()\n+                .ConfigureAwait(continueOnCapturedContext: false);\n+\n+            if (HttpStatusCode.NoContent == responseMsg.StatusCode)\n+            {\n+                return;\n+            }\n+\n+            var response = JObject.Parse(responseString);\n+\n+            KeenUtil.CheckApiErrorCode(response);\n+\n+            throw new KeenException($\"Request failed with status: {responseMsg.StatusCode}\");\n+        }\n+\n+        public async Task<DatasetDefinition> CreateDatasetAsync(DatasetDefinition dataset)\n+        {\n+            if (string.IsNullOrWhiteSpace(_masterKey))","path":"Keen.NetStandard/Dataset/Datasets.cs","position":263,"original_position":263,"commit_id":"81e3f4d5ddd896a04a695d3b80a5b3f124f00280","original_commit_id":"81e3f4d5ddd896a04a695d3b80a5b3f124f00280","user":{"login":"masojus","id":11385690,"avatar_url":"https://avatars2.githubusercontent.com/u/11385690?v=4","gravatar_id":"","url":"https://api.github.com/users/masojus","html_url":"https://github.com/masojus","followers_url":"https://api.github.com/users/masojus/followers","following_url":"https://api.github.com/users/masojus/following{/other_user}","gists_url":"https://api.github.com/users/masojus/gists{/gist_id}","starred_url":"https://api.github.com/users/masojus/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/masojus/subscriptions","organizations_url":"https://api.github.com/users/masojus/orgs","repos_url":"https://api.github.com/users/masojus/repos","events_url":"https://api.github.com/users/masojus/events{/privacy}","received_events_url":"https://api.github.com/users/masojus/received_events","type":"User","site_admin":false},"body":"I noticed that while ReadKey is accepted by the back end for getting results/defs, our `Datasets` impl was demanding MasterKey in those cases, so I fixed that locally, and it'll be part of the final version of this PR.","created_at":"2017-11-11T04:59:48Z","updated_at":"2017-11-11T04:59:48Z","html_url":"https://github.com/keenlabs/keen-sdk-net/pull/128#discussion_r150374924","pull_request_url":"https://api.github.com/repos/keenlabs/keen-sdk-net/pulls/128","author_association":"CONTRIBUTOR","_links":{"self":{"href":"https://api.github.com/repos/keenlabs/keen-sdk-net/pulls/comments/150374924"},"html":{"href":"https://github.com/keenlabs/keen-sdk-net/pull/128#discussion_r150374924"},"pull_request":{"href":"https://api.github.com/repos/keenlabs/keen-sdk-net/pulls/128"}},"in_reply_to_id":149254931},"pull_request":{"url":"https://api.github.com/repos/keenlabs/keen-sdk-net/pulls/128","id":148895724,"html_url":"https://github.com/keenlabs/keen-sdk-net/pull/128","diff_url":"https://github.com/keenlabs/keen-sdk-net/pull/128.diff","patch_url":"https://github.com/keenlabs/keen-sdk-net/pull/128.patch","issue_url":"https://api.github.com/repos/keenlabs/keen-sdk-net/issues/128","number":128,"state":"open","locked":false,"title":"Datasets","user":{"login":"masojus","id":11385690,"avatar_url":"https://avatars2.githubusercontent.com/u/11385690?v=4","gravatar_id":"","url":"https://api.github.com/users/masojus","html_url":"https://github.com/masojus","followers_url":"https://api.github.com/users/masojus/followers","following_url":"https://api.github.com/users/masojus/following{/other_user}","gists_url":"https://api.github.com/users/masojus/gists{/gist_id}","starred_url":"https://api.github.com/users/masojus/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/masojus/subscriptions","organizations_url":"https://api.github.com/users/masojus/orgs","repos_url":"https://api.github.com/users/masojus/repos","events_url":"https://api.github.com/users/masojus/events{/privacy}","received_events_url":"https://api.github.com/users/masojus/received_events","type":"User","site_admin":false},"body":"See PR #96 for details. This PR is to continue that discussion and merge with changes made in `master` related to all the .NET Standard work.","created_at":"2017-10-26T10:29:27Z","updated_at":"2017-11-11T04:59:48Z","closed_at":null,"merged_at":null,"merge_commit_sha":"ff00b2e95f170a9b9c3d3cb232d321717a7b9e1b","assignee":null,"assignees":[],"requested_reviewers":[],"milestone":null,"commits_url":"https://api.github.com/repos/keenlabs/keen-sdk-net/pulls/128/commits","review_comments_url":"https://api.github.com/repos/keenlabs/keen-sdk-net/pulls/128/comments","review_comment_url":"https://api.github.com/repos/keenlabs/keen-sdk-net/pulls/comments{/number}","comments_url":"https://api.github.com/repos/keenlabs/keen-sdk-net/issues/128/comments","statuses_url":"https://api.github.com/repos/keenlabs/keen-sdk-net/statuses/81e3f4d5ddd896a04a695d3b80a5b3f124f00280","head":{"label":"keenlabs:jm_UpdateCachedDatasetsBranch","ref":"jm_UpdateCachedDatasetsBranch","sha":"81e3f4d5ddd896a04a695d3b80a5b3f124f00280","user":{"login":"keenlabs","id":1315418,"avatar_url":"https://avatars0.githubusercontent.com/u/1315418?v=4","gravatar_id":"","url":"https://api.github.com/users/keenlabs","html_url":"https://github.com/keenlabs","followers_url":"https://api.github.com/users/keenlabs/followers","following_url":"https://api.github.com/users/keenlabs/following{/other_user}","gists_url":"https://api.github.com/users/keenlabs/gists{/gist_id}","starred_url":"https://api.github.com/users/keenlabs/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/keenlabs/subscriptions","organizations_url":"https://api.github.com/users/keenlabs/orgs","repos_url":"https://api.github.com/users/keenlabs/repos","events_url":"https://api.github.com/users/keenlabs/events{/privacy}","received_events_url":"https://api.github.com/users/keenlabs/received_events","type":"Organization","site_admin":false},"repo":{"id":17722261,"name":"keen-sdk-net","full_name":"keenlabs/keen-sdk-net","owner":{"login":"keenlabs","id":1315418,"avatar_url":"https://avatars0.githubusercontent.com/u/1315418?v=4","gravatar_id":"","url":"https://api.github.com/users/keenlabs","html_url":"https://github.com/keenlabs","followers_url":"https://api.github.com/users/keenlabs/followers","following_url":"https://api.github.com/users/keenlabs/following{/other_user}","gists_url":"https://api.github.com/users/keenlabs/gists{/gist_id}","starred_url":"https://api.github.com/users/keenlabs/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/keenlabs/subscriptions","organizations_url":"https://api.github.com/users/keenlabs/orgs","repos_url":"https://api.github.com/users/keenlabs/repos","events_url":"https://api.github.com/users/keenlabs/events{/privacy}","received_events_url":"https://api.github.com/users/keenlabs/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/keenlabs/keen-sdk-net","description":"A .NET SDK for the Keen IO API","fork":false,"url":"https://api.github.com/repos/keenlabs/keen-sdk-net","forks_url":"https://api.github.com/repos/keenlabs/keen-sdk-net/forks","keys_url":"https://api.github.com/repos/keenlabs/keen-sdk-net/keys{/key_id}","collaborators_url":"https://api.github.com/repos/keenlabs/keen-sdk-net/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/keenlabs/keen-sdk-net/teams","hooks_url":"https://api.github.com/repos/keenlabs/keen-sdk-net/hooks","issue_events_url":"https://api.github.com/repos/keenlabs/keen-sdk-net/issues/events{/number}","events_url":"https://api.github.com/repos/keenlabs/keen-sdk-net/events","assignees_url":"https://api.github.com/repos/keenlabs/keen-sdk-net/assignees{/user}","branches_url":"https://api.github.com/repos/keenlabs/keen-sdk-net/branches{/branch}","tags_url":"https://api.github.com/repos/keenlabs/keen-sdk-net/tags","blobs_url":"https://api.github.com/repos/keenlabs/keen-sdk-net/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/keenlabs/keen-sdk-net/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/keenlabs/keen-sdk-net/git/refs{/sha}","trees_url":"https://api.github.com/repos/keenlabs/keen-sdk-net/git/trees{/sha}","statuses_url":"https://api.github.com/repos/keenlabs/keen-sdk-net/statuses/{sha}","languages_url":"https://api.github.com/repos/keenlabs/keen-sdk-net/languages","stargazers_url":"https://api.github.com/repos/keenlabs/keen-sdk-net/stargazers","contributors_url":"https://api.github.com/repos/keenlabs/keen-sdk-net/contributors","subscribers_url":"https://api.github.com/repos/keenlabs/keen-sdk-net/subscribers","subscription_url":"https://api.github.com/repos/keenlabs/keen-sdk-net/subscription","commits_url":"https://api.github.com/repos/keenlabs/keen-sdk-net/commits{/sha}","git_commits_url":"https://api.github.com/repos/keenlabs/keen-sdk-net/git/commits{/sha}","comments_url":"https://api.github.com/repos/keenlabs/keen-sdk-net/comments{/number}","issue_comment_url":"https://api.github.com/repos/keenlabs/keen-sdk-net/issues/comments{/number}","contents_url":"https://api.github.com/repos/keenlabs/keen-sdk-net/contents/{+path}","compare_url":"https://api.github.com/repos/keenlabs/keen-sdk-net/compare/{base}...{head}","merges_url":"https://api.github.com/repos/keenlabs/keen-sdk-net/merges","archive_url":"https://api.github.com/repos/keenlabs/keen-sdk-net/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/keenlabs/keen-sdk-net/downloads","issues_url":"https://api.github.com/repos/keenlabs/keen-sdk-net/issues{/number}","pulls_url":"https://api.github.com/repos/keenlabs/keen-sdk-net/pulls{/number}","milestones_url":"https://api.github.com/repos/keenlabs/keen-sdk-net/milestones{/number}","notifications_url":"https://api.github.com/repos/keenlabs/keen-sdk-net/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/keenlabs/keen-sdk-net/labels{/name}","releases_url":"https://api.github.com/repos/keenlabs/keen-sdk-net/releases{/id}","deployments_url":"https://api.github.com/repos/keenlabs/keen-sdk-net/deployments","created_at":"2014-03-13T18:56:49Z","updated_at":"2017-08-13T12:13:13Z","pushed_at":"2017-11-10T03:56:55Z","git_url":"git://github.com/keenlabs/keen-sdk-net.git","ssh_url":"git@github.com:keenlabs/keen-sdk-net.git","clone_url":"https://github.com/keenlabs/keen-sdk-net.git","svn_url":"https://github.com/keenlabs/keen-sdk-net","homepage":"","size":987,"stargazers_count":34,"watchers_count":34,"language":"C#","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":28,"mirror_url":null,"archived":false,"open_issues_count":42,"forks":28,"open_issues":42,"watchers":34,"default_branch":"master"}},"base":{"label":"keenlabs:master","ref":"master","sha":"b820c2ec8315e11a344ce4f239dc2709dd042240","user":{"login":"keenlabs","id":1315418,"avatar_url":"https://avatars0.githubusercontent.com/u/1315418?v=4","gravatar_id":"","url":"https://api.github.com/users/keenlabs","html_url":"https://github.com/keenlabs","followers_url":"https://api.github.com/users/keenlabs/followers","following_url":"https://api.github.com/users/keenlabs/following{/other_user}","gists_url":"https://api.github.com/users/keenlabs/gists{/gist_id}","starred_url":"https://api.github.com/users/keenlabs/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/keenlabs/subscriptions","organizations_url":"https://api.github.com/users/keenlabs/orgs","repos_url":"https://api.github.com/users/keenlabs/repos","events_url":"https://api.github.com/users/keenlabs/events{/privacy}","received_events_url":"https://api.github.com/users/keenlabs/received_events","type":"Organization","site_admin":false},"repo":{"id":17722261,"name":"keen-sdk-net","full_name":"keenlabs/keen-sdk-net","owner":{"login":"keenlabs","id":1315418,"avatar_url":"https://avatars0.githubusercontent.com/u/1315418?v=4","gravatar_id":"","url":"https://api.github.com/users/keenlabs","html_url":"https://github.com/keenlabs","followers_url":"https://api.github.com/users/keenlabs/followers","following_url":"https://api.github.com/users/keenlabs/following{/other_user}","gists_url":"https://api.github.com/users/keenlabs/gists{/gist_id}","starred_url":"https://api.github.com/users/keenlabs/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/keenlabs/subscriptions","organizations_url":"https://api.github.com/users/keenlabs/orgs","repos_url":"https://api.github.com/users/keenlabs/repos","events_url":"https://api.github.com/users/keenlabs/events{/privacy}","received_events_url":"https://api.github.com/users/keenlabs/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/keenlabs/keen-sdk-net","description":"A .NET SDK for the Keen IO API","fork":false,"url":"https://api.github.com/repos/keenlabs/keen-sdk-net","forks_url":"https://api.github.com/repos/keenlabs/keen-sdk-net/forks","keys_url":"https://api.github.com/repos/keenlabs/keen-sdk-net/keys{/key_id}","collaborators_url":"https://api.github.com/repos/keenlabs/keen-sdk-net/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/keenlabs/keen-sdk-net/teams","hooks_url":"https://api.github.com/repos/keenlabs/keen-sdk-net/hooks","issue_events_url":"https://api.github.com/repos/keenlabs/keen-sdk-net/issues/events{/number}","events_url":"https://api.github.com/repos/keenlabs/keen-sdk-net/events","assignees_url":"https://api.github.com/repos/keenlabs/keen-sdk-net/assignees{/user}","branches_url":"https://api.github.com/repos/keenlabs/keen-sdk-net/branches{/branch}","tags_url":"https://api.github.com/repos/keenlabs/keen-sdk-net/tags","blobs_url":"https://api.github.com/repos/keenlabs/keen-sdk-net/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/keenlabs/keen-sdk-net/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/keenlabs/keen-sdk-net/git/refs{/sha}","trees_url":"https://api.github.com/repos/keenlabs/keen-sdk-net/git/trees{/sha}","statuses_url":"https://api.github.com/repos/keenlabs/keen-sdk-net/statuses/{sha}","languages_url":"https://api.github.com/repos/keenlabs/keen-sdk-net/languages","stargazers_url":"https://api.github.com/repos/keenlabs/keen-sdk-net/stargazers","contributors_url":"https://api.github.com/repos/keenlabs/keen-sdk-net/contributors","subscribers_url":"https://api.github.com/repos/keenlabs/keen-sdk-net/subscribers","subscription_url":"https://api.github.com/repos/keenlabs/keen-sdk-net/subscription","commits_url":"https://api.github.com/repos/keenlabs/keen-sdk-net/commits{/sha}","git_commits_url":"https://api.github.com/repos/keenlabs/keen-sdk-net/git/commits{/sha}","comments_url":"https://api.github.com/repos/keenlabs/keen-sdk-net/comments{/number}","issue_comment_url":"https://api.github.com/repos/keenlabs/keen-sdk-net/issues/comments{/number}","contents_url":"https://api.github.com/repos/keenlabs/keen-sdk-net/contents/{+path}","compare_url":"https://api.github.com/repos/keenlabs/keen-sdk-net/compare/{base}...{head}","merges_url":"https://api.github.com/repos/keenlabs/keen-sdk-net/merges","archive_url":"https://api.github.com/repos/keenlabs/keen-sdk-net/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/keenlabs/keen-sdk-net/downloads","issues_url":"https://api.github.com/repos/keenlabs/keen-sdk-net/issues{/number}","pulls_url":"https://api.github.com/repos/keenlabs/keen-sdk-net/pulls{/number}","milestones_url":"https://api.github.com/repos/keenlabs/keen-sdk-net/milestones{/number}","notifications_url":"https://api.github.com/repos/keenlabs/keen-sdk-net/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/keenlabs/keen-sdk-net/labels{/name}","releases_url":"https://api.github.com/repos/keenlabs/keen-sdk-net/releases{/id}","deployments_url":"https://api.github.com/repos/keenlabs/keen-sdk-net/deployments","created_at":"2014-03-13T18:56:49Z","updated_at":"2017-08-13T12:13:13Z","pushed_at":"2017-11-10T03:56:55Z","git_url":"git://github.com/keenlabs/keen-sdk-net.git","ssh_url":"git@github.com:keenlabs/keen-sdk-net.git","clone_url":"https://github.com/keenlabs/keen-sdk-net.git","svn_url":"https://github.com/keenlabs/keen-sdk-net","homepage":"","size":987,"stargazers_count":34,"watchers_count":34,"language":"C#","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":28,"mirror_url":null,"archived":false,"open_issues_count":42,"forks":28,"open_issues":42,"watchers":34,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/keenlabs/keen-sdk-net/pulls/128"},"html":{"href":"https://github.com/keenlabs/keen-sdk-net/pull/128"},"issue":{"href":"https://api.github.com/repos/keenlabs/keen-sdk-net/issues/128"},"comments":{"href":"https://api.github.com/repos/keenlabs/keen-sdk-net/issues/128/comments"},"review_comments":{"href":"https://api.github.com/repos/keenlabs/keen-sdk-net/pulls/128/comments"},"review_comment":{"href":"https://api.github.com/repos/keenlabs/keen-sdk-net/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/keenlabs/keen-sdk-net/pulls/128/commits"},"statuses":{"href":"https://api.github.com/repos/keenlabs/keen-sdk-net/statuses/81e3f4d5ddd896a04a695d3b80a5b3f124f00280"}},"author_association":"CONTRIBUTOR"}}
{"actor":{"display_login":"masojus"}}