{"action":"created","comment":{"url":"https://api.github.com/repos/Syncano/syncano-ios/pulls/comments/26674841","id":26674841,"diff_hunk":"@@ -25,103 +36,111 @@ @implementation Syncano\n static Syncano *_sharedInstance = nil;\n \n + (NSDictionary *)settings {\n-\tstatic NSDictionary *_settings = nil;\n-\tstatic dispatch_once_t onceToken;\n-\tdispatch_once(&onceToken, ^{\n-\t\t_settings = [NSDictionary dictionaryWithContentsOfURL:[NSURL fileURLWithPath:[[NSBundle mainBundle] pathForResource:@\"Syncano\" ofType:@\"plist\"]]];\n-\t});\n-\treturn _settings;\n+  static NSDictionary *_settings = nil;\n+  static dispatch_once_t onceToken;\n+  dispatch_once(&onceToken, ^{\n+    NSString *filePath = [[NSBundle mainBundle] pathForResource:@\"Syncano\" ofType:@\"plist\"];\n+    if (filePath)\n+      _settings = [NSDictionary dictionaryWithContentsOfURL:[NSURL fileURLWithPath:filePath]];\n+  });\n+  return _settings;\n }\n \n + (instancetype)sharedInstanceWithAPIKey:(NSString *)apiKey name:(NSString *)name {\n-\tstatic dispatch_once_t onceToken;\n-\t\n-\t__block NSString *defaultAPIKey = apiKey;\n-\t__block NSString *defaultName = name;\n-\tdispatch_once(&onceToken, ^{\n-\t\tif (![defaultAPIKey length])\n-\t\t\tdefaultAPIKey = [Syncano settings][@\"apiKey\"];\n-\t\tif (![defaultName length])\n-\t\t\tdefaultName = [Syncano settings][@\"defaultName\"];\n-\t\t\n-\t\tif ([defaultAPIKey length] && [defaultName length]) {\n-\t\t\t_sharedInstance = [[Syncano alloc] initWithAPIKey:defaultAPIKey name:defaultName];\n-\t\t}\n-\t});\n-\t\n-\treturn _sharedInstance;\n+  static dispatch_once_t onceToken;\n+  \n+  __block NSString *defaultAPIKey = apiKey;\n+  __block NSString *defaultName = name;\n+  dispatch_once(&onceToken, ^{\n+    if (![defaultAPIKey length])\n+      defaultAPIKey = [Syncano settings][kAPIKey];\n+    if (![defaultName length])\n+      defaultName = [Syncano settings][kDefaultName];\n+    \n+    if ([defaultAPIKey length] && [defaultName length]) {\n+      _sharedInstance = [[Syncano alloc] initWithAPIKey:defaultAPIKey name:defaultName];\n+    }\n+  });\n+  \n+  return _sharedInstance;\n }\n \n + (instancetype)sharedInstance {\n-\treturn [Syncano sharedInstanceWithAPIKey:[Syncano settings][@\"apiKey\"] name:[Syncano settings][@\"defaultName\"]];\n+  return [Syncano sharedInstanceWithAPIKey:[Syncano settings][kAPIKey] name:[Syncano settings][kDefaultName]];\n }\n \n + (instancetype)setSharedInstanceName:(NSString *)name {\n-\tSyncano *instance = [Syncano sharedInstance];\n-\tif (!instance)\n-\t\treturn [Syncano sharedInstanceWithAPIKey:[Syncano settings][@\"apiKey\"] name:name];\n-\n-\tinstance->_name = [name copy];\n-\treturn instance;\n+  Syncano *instance = [Syncano sharedInstance];\n+  if (!instance)\n+    return [Syncano sharedInstanceWithAPIKey:[Syncano settings][kAPIKey] name:name];\n+  \n+  instance->_name = [name copy];\n+  return instance;\n }\n \n - (instancetype)initWithName:(NSString *)name {\n-\treturn [self initWithAPIKey:[Syncano settings][@\"apiKey\"] name:name];\n+  return [self initWithAPIKey:[Syncano settings][kAPIKey] name:name];\n }\n \n - (instancetype)initWithAPIKey:(NSString *)apiKey name:(NSString *)name {\n-\tif (![apiKey length] || ![name length])\n-\t\treturn nil;\n-\t\n-\tself = [super init];\n-\tif (self) {\n-\t\t_apiKey = [apiKey copy];\n-\t\t_name = [name copy];\n-\t}\n-\treturn self;\n+  if (![apiKey length] || ![name length])\n+    return nil;\n+  \n+  self = [super init];\n+  if (self) {\n+    _apiKey = [apiKey copy];\n+    _name = [name copy];\n+  }\n+  return self;\n }\n \n + (instancetype)syncanoWithName:(NSString *)name {\n-\treturn [Syncano syncanoWithAPIKey:[Syncano settings][@\"apiKey\"] name:name];\n+  return [Syncano syncanoWithAPIKey:[Syncano settings][kAPIKey] name:name];\n }\n \n + (instancetype)syncanoWithAPIKey:(NSString *)apiKey name:(NSString *)name {\n-\treturn [[Syncano alloc] initWithAPIKey:apiKey name:name];\n+  return [[Syncano alloc] initWithAPIKey:apiKey name:name];\n }\n \n - (void)dealloc {\n-\t_apiKey = nil;\n-\t_name = nil;\n+  _apiKey = nil;\n+  _name = nil;\n }\n \n - (NSURLSessionDataTask *)get:(Class)class params:(SyncanoParameters *)params success:(SyncanoObjectBlock)success failure:(SyncanoErrorBlock)failure {\n-\tif (![class conformsToProtocol:@protocol(SyncanoObjectProtocol)]) {\n-\t\t[NSException exceptionWithName:@\"Syncano.InvalidParameterException\" reason:[NSString stringWithFormat:@\"%@ does not conform to protocol SyncanoObjectProtocol\", NSStringFromClass(class)] userInfo:nil];\n-\t\treturn nil;\n-\t}\n-\t\n-\tNSString *url = [NSString stringWithFormat:@\"instances/%@/classes/%@/objects/%@\", self.name, NSStringFromClass(class), params[@\"dbID\"]];\n-\treturn [[APIClient sharedClient] POST:url\n-\t\t\t\t\t\t\t\t\t\t\t\t\t\t parameters:params\n-\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tsuccess:^(NSURLSessionDataTask *task, id responseObject) {\n-\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tif (success) {\n-\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tNSDictionary *json = responseObject;\n-\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tif ([json isKindOfClass:[NSDictionary class]]) {\n-\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tid<SyncanoObjectProtocol> object = [class alloc];\n-\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tsuccess(task, [object initWithJSON:json]);\n-\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n-\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\telse if (failure)\n-\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfailure(task, [NSError errorWithDomain:@\"Syncano\" code:100 userInfo:nil]);\n-\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n-\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n-\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfailure:^(NSURLSessionDataTask *task, NSError *error) {\n-\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tif (failure)\n-\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfailure(task, error);\n-\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}];\n+  if (![class conformsToProtocol:@protocol(SyncanoObject)]) {\n+    [[SyncanoException exceptionWithCode:SyncanoExceptionInvalidParameter reason:[NSString stringWithFormat:@\"%@ does not conform to protocol %@\", NSStringFromClass(class), NSStringFromProtocol(@protocol(SyncanoObject))]] raise];","path":"Syncano/Syncano.m","position":171,"original_position":171,"commit_id":"404cecaeb98c3e963f436c74c0a5d05ff5e60057","original_commit_id":"404cecaeb98c3e963f436c74c0a5d05ff5e60057","user":{"login":"lifcio","id":3170386,"avatar_url":"https://avatars.githubusercontent.com/u/3170386?v=3","gravatar_id":"","url":"https://api.github.com/users/lifcio","html_url":"https://github.com/lifcio","followers_url":"https://api.github.com/users/lifcio/followers","following_url":"https://api.github.com/users/lifcio/following{/other_user}","gists_url":"https://api.github.com/users/lifcio/gists{/gist_id}","starred_url":"https://api.github.com/users/lifcio/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/lifcio/subscriptions","organizations_url":"https://api.github.com/users/lifcio/orgs","repos_url":"https://api.github.com/users/lifcio/repos","events_url":"https://api.github.com/users/lifcio/events{/privacy}","received_events_url":"https://api.github.com/users/lifcio/received_events","type":"User","site_admin":false},"body":":+1: \r\nIn the future, in one of the next iterations we should probably also consider having those strings in `.strings` file(s).","created_at":"2015-03-18T15:40:17Z","updated_at":"2015-03-18T15:40:17Z","html_url":"https://github.com/Syncano/syncano-ios/pull/3#discussion_r26674841","pull_request_url":"https://api.github.com/repos/Syncano/syncano-ios/pulls/3","_links":{"self":{"href":"https://api.github.com/repos/Syncano/syncano-ios/pulls/comments/26674841"},"html":{"href":"https://github.com/Syncano/syncano-ios/pull/3#discussion_r26674841"},"pull_request":{"href":"https://api.github.com/repos/Syncano/syncano-ios/pulls/3"}}},"pull_request":{"url":"https://api.github.com/repos/Syncano/syncano-ios/pulls/3","id":31389779,"html_url":"https://github.com/Syncano/syncano-ios/pull/3","diff_url":"https://github.com/Syncano/syncano-ios/pull/3.diff","patch_url":"https://github.com/Syncano/syncano-ios/pull/3.patch","issue_url":"https://api.github.com/repos/Syncano/syncano-ios/issues/3","number":3,"state":"open","locked":false,"title":"another portion of changes","user":{"login":"antisoftware","id":10942448,"avatar_url":"https://avatars.githubusercontent.com/u/10942448?v=3","gravatar_id":"","url":"https://api.github.com/users/antisoftware","html_url":"https://github.com/antisoftware","followers_url":"https://api.github.com/users/antisoftware/followers","following_url":"https://api.github.com/users/antisoftware/following{/other_user}","gists_url":"https://api.github.com/users/antisoftware/gists{/gist_id}","starred_url":"https://api.github.com/users/antisoftware/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/antisoftware/subscriptions","organizations_url":"https://api.github.com/users/antisoftware/orgs","repos_url":"https://api.github.com/users/antisoftware/repos","events_url":"https://api.github.com/users/antisoftware/events{/privacy}","received_events_url":"https://api.github.com/users/antisoftware/received_events","type":"User","site_admin":false},"body":"changed APIClient to call [self class] instead of [APIClient class]\r\nchanged nullSafe to SyncanoNullSafe category name for NSObject\r\ncorrected #include to #import \"SyncanoArray.h\"\r\nadded proper keys to Syncano.m to avoid pure strings\r\nadded check for the existence of Syncano.plist in custom project\r\nused Mantle to deserialize JSON to objects\r\nintroduced SyncanoError and SyncanoException\r\nchanged protocol name from SyncanoObjectProtocol to SyncanoObject\r\nchanged getter methods of SyncanoObject protocol into properties","created_at":"2015-03-17T23:57:54Z","updated_at":"2015-03-18T15:40:17Z","closed_at":null,"merged_at":null,"merge_commit_sha":"b89be24819b74e570281a75e4bf7182d637e66d3","assignee":null,"milestone":null,"commits_url":"https://api.github.com/repos/Syncano/syncano-ios/pulls/3/commits","review_comments_url":"https://api.github.com/repos/Syncano/syncano-ios/pulls/3/comments","review_comment_url":"https://api.github.com/repos/Syncano/syncano-ios/pulls/comments{/number}","comments_url":"https://api.github.com/repos/Syncano/syncano-ios/issues/3/comments","statuses_url":"https://api.github.com/repos/Syncano/syncano-ios/statuses/404cecaeb98c3e963f436c74c0a5d05ff5e60057","head":{"label":"antisoftware:release4_inProgress","ref":"release4_inProgress","sha":"404cecaeb98c3e963f436c74c0a5d05ff5e60057","user":{"login":"antisoftware","id":10942448,"avatar_url":"https://avatars.githubusercontent.com/u/10942448?v=3","gravatar_id":"","url":"https://api.github.com/users/antisoftware","html_url":"https://github.com/antisoftware","followers_url":"https://api.github.com/users/antisoftware/followers","following_url":"https://api.github.com/users/antisoftware/following{/other_user}","gists_url":"https://api.github.com/users/antisoftware/gists{/gist_id}","starred_url":"https://api.github.com/users/antisoftware/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/antisoftware/subscriptions","organizations_url":"https://api.github.com/users/antisoftware/orgs","repos_url":"https://api.github.com/users/antisoftware/repos","events_url":"https://api.github.com/users/antisoftware/events{/privacy}","received_events_url":"https://api.github.com/users/antisoftware/received_events","type":"User","site_admin":false},"repo":{"id":32426753,"name":"syncano-ios","full_name":"antisoftware/syncano-ios","owner":{"login":"antisoftware","id":10942448,"avatar_url":"https://avatars.githubusercontent.com/u/10942448?v=3","gravatar_id":"","url":"https://api.github.com/users/antisoftware","html_url":"https://github.com/antisoftware","followers_url":"https://api.github.com/users/antisoftware/followers","following_url":"https://api.github.com/users/antisoftware/following{/other_user}","gists_url":"https://api.github.com/users/antisoftware/gists{/gist_id}","starred_url":"https://api.github.com/users/antisoftware/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/antisoftware/subscriptions","organizations_url":"https://api.github.com/users/antisoftware/orgs","repos_url":"https://api.github.com/users/antisoftware/repos","events_url":"https://api.github.com/users/antisoftware/events{/privacy}","received_events_url":"https://api.github.com/users/antisoftware/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/antisoftware/syncano-ios","description":"iOS library for http://syncano.com API","fork":true,"url":"https://api.github.com/repos/antisoftware/syncano-ios","forks_url":"https://api.github.com/repos/antisoftware/syncano-ios/forks","keys_url":"https://api.github.com/repos/antisoftware/syncano-ios/keys{/key_id}","collaborators_url":"https://api.github.com/repos/antisoftware/syncano-ios/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/antisoftware/syncano-ios/teams","hooks_url":"https://api.github.com/repos/antisoftware/syncano-ios/hooks","issue_events_url":"https://api.github.com/repos/antisoftware/syncano-ios/issues/events{/number}","events_url":"https://api.github.com/repos/antisoftware/syncano-ios/events","assignees_url":"https://api.github.com/repos/antisoftware/syncano-ios/assignees{/user}","branches_url":"https://api.github.com/repos/antisoftware/syncano-ios/branches{/branch}","tags_url":"https://api.github.com/repos/antisoftware/syncano-ios/tags","blobs_url":"https://api.github.com/repos/antisoftware/syncano-ios/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/antisoftware/syncano-ios/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/antisoftware/syncano-ios/git/refs{/sha}","trees_url":"https://api.github.com/repos/antisoftware/syncano-ios/git/trees{/sha}","statuses_url":"https://api.github.com/repos/antisoftware/syncano-ios/statuses/{sha}","languages_url":"https://api.github.com/repos/antisoftware/syncano-ios/languages","stargazers_url":"https://api.github.com/repos/antisoftware/syncano-ios/stargazers","contributors_url":"https://api.github.com/repos/antisoftware/syncano-ios/contributors","subscribers_url":"https://api.github.com/repos/antisoftware/syncano-ios/subscribers","subscription_url":"https://api.github.com/repos/antisoftware/syncano-ios/subscription","commits_url":"https://api.github.com/repos/antisoftware/syncano-ios/commits{/sha}","git_commits_url":"https://api.github.com/repos/antisoftware/syncano-ios/git/commits{/sha}","comments_url":"https://api.github.com/repos/antisoftware/syncano-ios/comments{/number}","issue_comment_url":"https://api.github.com/repos/antisoftware/syncano-ios/issues/comments{/number}","contents_url":"https://api.github.com/repos/antisoftware/syncano-ios/contents/{+path}","compare_url":"https://api.github.com/repos/antisoftware/syncano-ios/compare/{base}...{head}","merges_url":"https://api.github.com/repos/antisoftware/syncano-ios/merges","archive_url":"https://api.github.com/repos/antisoftware/syncano-ios/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/antisoftware/syncano-ios/downloads","issues_url":"https://api.github.com/repos/antisoftware/syncano-ios/issues{/number}","pulls_url":"https://api.github.com/repos/antisoftware/syncano-ios/pulls{/number}","milestones_url":"https://api.github.com/repos/antisoftware/syncano-ios/milestones{/number}","notifications_url":"https://api.github.com/repos/antisoftware/syncano-ios/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/antisoftware/syncano-ios/labels{/name}","releases_url":"https://api.github.com/repos/antisoftware/syncano-ios/releases{/id}","created_at":"2015-03-17T23:38:51Z","updated_at":"2015-03-17T23:40:50Z","pushed_at":"2015-03-17T23:56:06Z","git_url":"git://github.com/antisoftware/syncano-ios.git","ssh_url":"git@github.com:antisoftware/syncano-ios.git","clone_url":"https://github.com/antisoftware/syncano-ios.git","svn_url":"https://github.com/antisoftware/syncano-ios","homepage":"","size":682,"stargazers_count":1,"watchers_count":1,"language":"Objective-C","has_issues":false,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":0,"mirror_url":null,"open_issues_count":0,"forks":0,"open_issues":0,"watchers":1,"default_branch":"master"}},"base":{"label":"Syncano:release4_inProgress","ref":"release4_inProgress","sha":"a20514aade716fce28c17c0b0d18562a21d1b69e","user":{"login":"Syncano","id":6367703,"avatar_url":"https://avatars.githubusercontent.com/u/6367703?v=3","gravatar_id":"","url":"https://api.github.com/users/Syncano","html_url":"https://github.com/Syncano","followers_url":"https://api.github.com/users/Syncano/followers","following_url":"https://api.github.com/users/Syncano/following{/other_user}","gists_url":"https://api.github.com/users/Syncano/gists{/gist_id}","starred_url":"https://api.github.com/users/Syncano/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/Syncano/subscriptions","organizations_url":"https://api.github.com/users/Syncano/orgs","repos_url":"https://api.github.com/users/Syncano/repos","events_url":"https://api.github.com/users/Syncano/events{/privacy}","received_events_url":"https://api.github.com/users/Syncano/received_events","type":"Organization","site_admin":false},"repo":{"id":18832511,"name":"syncano-ios","full_name":"Syncano/syncano-ios","owner":{"login":"Syncano","id":6367703,"avatar_url":"https://avatars.githubusercontent.com/u/6367703?v=3","gravatar_id":"","url":"https://api.github.com/users/Syncano","html_url":"https://github.com/Syncano","followers_url":"https://api.github.com/users/Syncano/followers","following_url":"https://api.github.com/users/Syncano/following{/other_user}","gists_url":"https://api.github.com/users/Syncano/gists{/gist_id}","starred_url":"https://api.github.com/users/Syncano/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/Syncano/subscriptions","organizations_url":"https://api.github.com/users/Syncano/orgs","repos_url":"https://api.github.com/users/Syncano/repos","events_url":"https://api.github.com/users/Syncano/events{/privacy}","received_events_url":"https://api.github.com/users/Syncano/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/Syncano/syncano-ios","description":"iOS library for http://syncano.com API","fork":false,"url":"https://api.github.com/repos/Syncano/syncano-ios","forks_url":"https://api.github.com/repos/Syncano/syncano-ios/forks","keys_url":"https://api.github.com/repos/Syncano/syncano-ios/keys{/key_id}","collaborators_url":"https://api.github.com/repos/Syncano/syncano-ios/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/Syncano/syncano-ios/teams","hooks_url":"https://api.github.com/repos/Syncano/syncano-ios/hooks","issue_events_url":"https://api.github.com/repos/Syncano/syncano-ios/issues/events{/number}","events_url":"https://api.github.com/repos/Syncano/syncano-ios/events","assignees_url":"https://api.github.com/repos/Syncano/syncano-ios/assignees{/user}","branches_url":"https://api.github.com/repos/Syncano/syncano-ios/branches{/branch}","tags_url":"https://api.github.com/repos/Syncano/syncano-ios/tags","blobs_url":"https://api.github.com/repos/Syncano/syncano-ios/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/Syncano/syncano-ios/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/Syncano/syncano-ios/git/refs{/sha}","trees_url":"https://api.github.com/repos/Syncano/syncano-ios/git/trees{/sha}","statuses_url":"https://api.github.com/repos/Syncano/syncano-ios/statuses/{sha}","languages_url":"https://api.github.com/repos/Syncano/syncano-ios/languages","stargazers_url":"https://api.github.com/repos/Syncano/syncano-ios/stargazers","contributors_url":"https://api.github.com/repos/Syncano/syncano-ios/contributors","subscribers_url":"https://api.github.com/repos/Syncano/syncano-ios/subscribers","subscription_url":"https://api.github.com/repos/Syncano/syncano-ios/subscription","commits_url":"https://api.github.com/repos/Syncano/syncano-ios/commits{/sha}","git_commits_url":"https://api.github.com/repos/Syncano/syncano-ios/git/commits{/sha}","comments_url":"https://api.github.com/repos/Syncano/syncano-ios/comments{/number}","issue_comment_url":"https://api.github.com/repos/Syncano/syncano-ios/issues/comments{/number}","contents_url":"https://api.github.com/repos/Syncano/syncano-ios/contents/{+path}","compare_url":"https://api.github.com/repos/Syncano/syncano-ios/compare/{base}...{head}","merges_url":"https://api.github.com/repos/Syncano/syncano-ios/merges","archive_url":"https://api.github.com/repos/Syncano/syncano-ios/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/Syncano/syncano-ios/downloads","issues_url":"https://api.github.com/repos/Syncano/syncano-ios/issues{/number}","pulls_url":"https://api.github.com/repos/Syncano/syncano-ios/pulls{/number}","milestones_url":"https://api.github.com/repos/Syncano/syncano-ios/milestones{/number}","notifications_url":"https://api.github.com/repos/Syncano/syncano-ios/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/Syncano/syncano-ios/labels{/name}","releases_url":"https://api.github.com/repos/Syncano/syncano-ios/releases{/id}","created_at":"2014-04-16T08:29:30Z","updated_at":"2015-03-16T14:47:58Z","pushed_at":"2015-03-16T20:50:30Z","git_url":"git://github.com/Syncano/syncano-ios.git","ssh_url":"git@github.com:Syncano/syncano-ios.git","clone_url":"https://github.com/Syncano/syncano-ios.git","svn_url":"https://github.com/Syncano/syncano-ios","homepage":"","size":682,"stargazers_count":3,"watchers_count":3,"language":"Objective-C","has_issues":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":2,"mirror_url":null,"open_issues_count":2,"forks":2,"open_issues":2,"watchers":3,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/Syncano/syncano-ios/pulls/3"},"html":{"href":"https://github.com/Syncano/syncano-ios/pull/3"},"issue":{"href":"https://api.github.com/repos/Syncano/syncano-ios/issues/3"},"comments":{"href":"https://api.github.com/repos/Syncano/syncano-ios/issues/3/comments"},"review_comments":{"href":"https://api.github.com/repos/Syncano/syncano-ios/pulls/3/comments"},"review_comment":{"href":"https://api.github.com/repos/Syncano/syncano-ios/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/Syncano/syncano-ios/pulls/3/commits"},"statuses":{"href":"https://api.github.com/repos/Syncano/syncano-ios/statuses/404cecaeb98c3e963f436c74c0a5d05ff5e60057"}}}}