{"action":"created","comment":{"url":"https://api.github.com/repos/LoomSDK/LoomSDK/pulls/comments/24556275","id":24556275,"diff_hunk":"@@ -0,0 +1,384 @@\n+/*\n+ * ===========================================================================\n+ * Loom SDK\n+ * Copyright 2011, 2012, 2013\n+ * The Game Engine Company, LLC\n+ *\n+ * Licensed under the Apache License, Version 2.0 (the \"License\");\n+ * you may not use this file except in compliance with the License.\n+ * You may obtain a copy of the License at\n+ *\n+ * http://www.apache.org/licenses/LICENSE-2.0\n+ *\n+ * Unless required by applicable law or agreed to in writing, software\n+ * distributed under the License is distributed on an \"AS IS\" BASIS,\n+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n+ * See the License for the specific language governing permissions and\n+ * limitations under the License.\n+ * ===========================================================================\n+ */\n+\n+#include \"platform/CCFileUtils.h\"\n+#include \"loom/script/loomscript.h\"\n+#include \"loom/common/core/log.h\"\n+#include \"loom/common/utils/utByteArray.h\"\n+#include \"loom/script/native/lsNativeDelegate.h\"\n+#include \"loom/vendor/sqlite3/sqlite3.h\"\n+#include \"loom/common/utils/utByteArray.h\"\n+\n+lmDefineLogGroup(gSQLiteGroup, \"loom.sqlite\", 1, LoomLogInfo);\n+\n+using namespace LS;\n+\n+\n+//forward declaration of Statement\n+class Statement;\n+\n+\n+//SQLite Connection binding for Loomscript\n+class Connection\n+{\n+protected:\n+    char szDBName[128];\n+    char szDBFullPath[1024];\n+    sqlite3 *dbHandle;\n+\n+public:\n+    static Connection *open(const char *database, int flags);\n+    static const char *getVersion();\n+\n+    Statement *prepare(const char *query);\n+    const char* getDBName() { return szDBName; }\n+\n+\n+    int getErrorCode()\n+    {\n+        return sqlite3_errcode(dbHandle);\n+    }\n+  \n+    const char* getErrorMessage()\n+    {\n+        return sqlite3_errmsg(dbHandle);\n+    }\n+      \n+    int getlastInsertRowId()\n+    {\n+        //\"NOTE: In SQLite the row ID is a 64-bit integer but for all practical \n+        //database sizes you can cast the 64 bit value to a 32-bit integer.\"\n+        //\n+        // - Some Guy on The Internet\n+        //\n+        int rowid = (int)sqlite3_last_insert_rowid(dbHandle);\n+        return rowid;\n+    }\n+\n+    void close()\n+    {\n+        //close the database\n+        int res = sqlite3_close_v2(dbHandle);\n+        if(res != SQLITE_OK)\n+        {\n+            lmLogError(gSQLiteGroup, \"Error closing the SQLite database: %s with message: %s\", szDBName, getErrorMessage());\n+        }\n+    }\n+};\n+\n+\n+\n+//SQLite Statement binding for Loomscript\n+class Statement\n+{\n+private:\n+    Connection *parentDB;\n+    static char szReturnString[4096];\n+public:\n+    sqlite3_stmt *statementHandle;\n+\n+\n+    Statement(Connection *c)\n+    {\n+        parentDB = c;\n+    }\n+\n+    int getParameterCount()\n+    {\n+        return sqlite3_bind_parameter_count(statementHandle);\n+    }\n+\n+    const char *getParameterName(int index)\n+    {\n+        const char *name = sqlite3_bind_parameter_name(statementHandle, index);\n+        if(name == NULL)\n+        {\n+            lmLogError(gSQLiteGroup, \"Invalid index for getParameterName in database: %s\", parentDB->getDBName());\n+            return NULL;\n+        }\n+\n+        //copy the string into our static return array so it survives the trip to Loomscript Land!\n+        strcpy(szReturnString, name);\n+        return szReturnString;\n+    }\n+\n+    int getParameterIndex(const char* name)\n+    {\n+        int index = sqlite3_bind_parameter_index(statementHandle, name);\n+        if(name == NULL)\n+        {\n+            lmLogError(gSQLiteGroup, \"Invalid name for getParameterIndex in database: %s\", parentDB->getDBName());\n+        }\n+        return index;\n+    }\n+\n+    int bindInt(int index, int value)\n+    {\n+        int result = sqlite3_bind_int(statementHandle, index, value);\n+        if(result != SQLITE_OK)\n+        {\n+            lmLogError(gSQLiteGroup, \"Error calling bindInt for database: %s with Result Code: %i\", parentDB->getDBName(), result);\n+        }\n+        return result;        \n+    }\n+\n+    int bindDouble(int index, double value)\n+    {\n+        int result = sqlite3_bind_double(statementHandle, index, value);\n+        if(result != SQLITE_OK)\n+        {\n+            lmLogError(gSQLiteGroup, \"Error calling bindDouble for database: %s with Result Code: %i\", parentDB->getDBName(), result);\n+        }\n+        return result;        \n+    }\n+\n+    int bindString(int index, const char *value)\n+    {\n+        int result = sqlite3_bind_text(statementHandle, index, value, -1, SQLITE_TRANSIENT); \n+        if(result != SQLITE_OK)\n+        {\n+            lmLogError(gSQLiteGroup, \"Error calling bindString for database: %s with Result Code: %i\", parentDB->getDBName(), result);\n+        }\n+        return result;        \n+    }\n+\n+\n+    int bindBytes(lua_State *L)\n+    {\n+        int index;\n+        void *bytes;\n+        int size;\n+\n+        if (!lua_isnumber(L, 1) || !lualoom_checkinstancetype(L, 2, \"system.ByteArray\"))\n+        {\n+            lmLogError(gSQLiteGroup, \"Invalid parameters passed to bindBytes for database: %s\", parentDB->getDBName());\n+            lua_pushnumber(L, SQLITE_ERROR);\n+            return 1;\n+        }\n+\n+        //get the index we are binding to from lua\n+        index = (int)lua_tonumber(L, 1);\n+\n+        //get our ByteArray from lua\n+        utByteArray *byteArray = (utByteArray *)lualoom_getnativepointer(L, 2);\n+        if(!byteArray || !byteArray->getSize())\n+        {\n+            bytes = NULL;\n+            size = 0;\n+        }\n+        else\n+        {\n+            bytes = byteArray->getDataPtr();      \n+            size = (int)byteArray->getSize();\n+        }\n+\n+        //bind the blob to the statement\n+        int result = sqlite3_bind_blob(statementHandle, index, (const void *)bytes, size, SQLITE_TRANSIENT); \n+        if(result != SQLITE_OK)\n+        {\n+            lmLogError(gSQLiteGroup, \"Error calling bindBytes for database: %s with Result Code: %i\", parentDB->getDBName(), result);\n+        }\n+        lua_pushnumber(L, result);\n+\n+        return 1;\n+    }\n+\n+    int step()\n+    {\n+        int result = sqlite3_step(statementHandle); \n+        if((result == SQLITE_ERROR) || (result == SQLITE_MISUSE))\n+        {\n+            lmLogError(gSQLiteGroup, \"Error calling bindString for database: %s with Result Code: %i\", parentDB->getDBName(), result);\n+        }\n+        return result;\n+    }\n+\n+    int columnType(int col)\n+    {\n+        return sqlite3_column_type(statementHandle, col);\n+    }\n+\n+    int columnInt(int col)\n+    {\n+        return sqlite3_column_int(statementHandle, col);\n+    }\n+\n+    double columnDouble(int col)\n+    {\n+        return sqlite3_column_double(statementHandle, col);\n+    }\n+\n+    const char* columnString(int col)\n+    {\n+        const char *text = (const char *)sqlite3_column_text(statementHandle, col);\n+        if(text == NULL)\n+        {\n+            return NULL;\n+        }\n+\n+        //copy the string into our static return array so it survives the trip to Loomscript Land!\n+        strcpy(szReturnString, text);\n+        return szReturnString;\n+    }\n+\n+    int columnBytes(lua_State *L)\n+    {\n+        //get the column\n+        int col = (int)lua_tonumber(L, 1);\n+\n+        //get the blob from the column\n+        void *blob = (void *)sqlite3_column_blob(statementHandle, col);\n+        if(blob == NULL)\n+        {\n+            lua_pushnil(L);\n+            return 1;\n+        }\n+        int size = sqlite3_column_bytes(statementHandle, col);\n+\n+        //valid blob so allocate byte array for it\n+        utByteArray *bytes = new utByteArray();\n+        bytes->allocateAndCopy(blob, size);\n+\n+        //go lua go!\n+        lualoom_pushnative<utByteArray>(L, bytes);\n+        return 1;\n+    }\n+\n+    int reset()\n+    {\n+        int result = sqlite3_reset(statementHandle); \n+        if(result != SQLITE_OK)\n+        {\n+            lmLogError(gSQLiteGroup, \"Error calling reset for database: %s with Result Code: %i\", parentDB->getDBName(), result);\n+        }\n+        return result;        \n+    }\n+\n+    int finalize()\n+    {\n+        int result = sqlite3_finalize(statementHandle); \n+        if(result != SQLITE_OK)\n+        {\n+            lmLogError(gSQLiteGroup, \"Error calling finalize for database: %s with Result Code: %i\", parentDB->getDBName(), result);\n+        }\n+        return result;        \n+    }\n+};\n+\n+char Statement::szReturnString[4096] = \"\";\n+\n+\n+\n+\n+//**Connection** external function initialisation\n+Statement *Connection::prepare(const char *query)\n+{\n+    Statement *s = new Statement(this);\n+\n+    //prepare the database with the query provided\n+    int res = sqlite3_prepare_v2(dbHandle, query, -1, &s->statementHandle, NULL);\n+    if(res != SQLITE_OK)\n+    {\n+        lmLogError(gSQLiteGroup, \"Error preparing the SQLite database: %s with message: %s\", szDBName, getErrorMessage());\n+    }\n+    return s;","path":"loom/engine/bindings/loom/lmSQLite.cpp","position":301,"original_position":301,"commit_id":"afc42f90af785be693278076aa4105e4345953f1","original_commit_id":"afc42f90af785be693278076aa4105e4345953f1","user":{"login":"bengarney","id":132844,"avatar_url":"https://avatars.githubusercontent.com/u/132844?v=3","gravatar_id":"","url":"https://api.github.com/users/bengarney","html_url":"https://github.com/bengarney","followers_url":"https://api.github.com/users/bengarney/followers","following_url":"https://api.github.com/users/bengarney/following{/other_user}","gists_url":"https://api.github.com/users/bengarney/gists{/gist_id}","starred_url":"https://api.github.com/users/bengarney/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/bengarney/subscriptions","organizations_url":"https://api.github.com/users/bengarney/orgs","repos_url":"https://api.github.com/users/bengarney/repos","events_url":"https://api.github.com/users/bengarney/events{/privacy}","received_events_url":"https://api.github.com/users/bengarney/received_events","type":"User","site_admin":false},"body":"Do we need to use the getLastError API here?","created_at":"2015-02-12T03:34:55Z","updated_at":"2015-02-12T03:34:55Z","html_url":"https://github.com/LoomSDK/LoomSDK/pull/261#discussion_r24556275","pull_request_url":"https://api.github.com/repos/LoomSDK/LoomSDK/pulls/261","_links":{"self":{"href":"https://api.github.com/repos/LoomSDK/LoomSDK/pulls/comments/24556275"},"html":{"href":"https://github.com/LoomSDK/LoomSDK/pull/261#discussion_r24556275"},"pull_request":{"href":"https://api.github.com/repos/LoomSDK/LoomSDK/pulls/261"}}},"pull_request":{"url":"https://api.github.com/repos/LoomSDK/LoomSDK/pulls/261","id":29098976,"html_url":"https://github.com/LoomSDK/LoomSDK/pull/261","diff_url":"https://github.com/LoomSDK/LoomSDK/pull/261.diff","patch_url":"https://github.com/LoomSDK/LoomSDK/pull/261.patch","issue_url":"https://api.github.com/repos/LoomSDK/LoomSDK/issues/261","number":261,"state":"open","locked":false,"title":"Lfl loom sq lite","user":{"login":"LukeLamothe","id":724378,"avatar_url":"https://avatars.githubusercontent.com/u/724378?v=3","gravatar_id":"","url":"https://api.github.com/users/LukeLamothe","html_url":"https://github.com/LukeLamothe","followers_url":"https://api.github.com/users/LukeLamothe/followers","following_url":"https://api.github.com/users/LukeLamothe/following{/other_user}","gists_url":"https://api.github.com/users/LukeLamothe/gists{/gist_id}","starred_url":"https://api.github.com/users/LukeLamothe/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/LukeLamothe/subscriptions","organizations_url":"https://api.github.com/users/LukeLamothe/orgs","repos_url":"https://api.github.com/users/LukeLamothe/repos","events_url":"https://api.github.com/users/LukeLamothe/events{/privacy}","received_events_url":"https://api.github.com/users/LukeLamothe/received_events","type":"User","site_admin":false},"body":"","created_at":"2015-02-11T15:20:50Z","updated_at":"2015-02-12T03:34:55Z","closed_at":null,"merged_at":null,"merge_commit_sha":"8c8e63762cb891371f4d7507ecc6dfd7afb0dc16","assignee":null,"milestone":null,"commits_url":"https://api.github.com/repos/LoomSDK/LoomSDK/pulls/261/commits","review_comments_url":"https://api.github.com/repos/LoomSDK/LoomSDK/pulls/261/comments","review_comment_url":"https://api.github.com/repos/LoomSDK/LoomSDK/pulls/comments/{number}","comments_url":"https://api.github.com/repos/LoomSDK/LoomSDK/issues/261/comments","statuses_url":"https://api.github.com/repos/LoomSDK/LoomSDK/statuses/afc42f90af785be693278076aa4105e4345953f1","head":{"label":"LoomSDK:LFL-LOOM-SQLite","ref":"LFL-LOOM-SQLite","sha":"afc42f90af785be693278076aa4105e4345953f1","user":{"login":"LoomSDK","id":5264050,"avatar_url":"https://avatars.githubusercontent.com/u/5264050?v=3","gravatar_id":"","url":"https://api.github.com/users/LoomSDK","html_url":"https://github.com/LoomSDK","followers_url":"https://api.github.com/users/LoomSDK/followers","following_url":"https://api.github.com/users/LoomSDK/following{/other_user}","gists_url":"https://api.github.com/users/LoomSDK/gists{/gist_id}","starred_url":"https://api.github.com/users/LoomSDK/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/LoomSDK/subscriptions","organizations_url":"https://api.github.com/users/LoomSDK/orgs","repos_url":"https://api.github.com/users/LoomSDK/repos","events_url":"https://api.github.com/users/LoomSDK/events{/privacy}","received_events_url":"https://api.github.com/users/LoomSDK/received_events","type":"Organization","site_admin":false},"repo":{"id":12335264,"name":"LoomSDK","full_name":"LoomSDK/LoomSDK","owner":{"login":"LoomSDK","id":5264050,"avatar_url":"https://avatars.githubusercontent.com/u/5264050?v=3","gravatar_id":"","url":"https://api.github.com/users/LoomSDK","html_url":"https://github.com/LoomSDK","followers_url":"https://api.github.com/users/LoomSDK/followers","following_url":"https://api.github.com/users/LoomSDK/following{/other_user}","gists_url":"https://api.github.com/users/LoomSDK/gists{/gist_id}","starred_url":"https://api.github.com/users/LoomSDK/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/LoomSDK/subscriptions","organizations_url":"https://api.github.com/users/LoomSDK/orgs","repos_url":"https://api.github.com/users/LoomSDK/repos","events_url":"https://api.github.com/users/LoomSDK/events{/privacy}","received_events_url":"https://api.github.com/users/LoomSDK/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/LoomSDK/LoomSDK","description":"The Loom SDK, a native mobile app and game framework.","fork":false,"url":"https://api.github.com/repos/LoomSDK/LoomSDK","forks_url":"https://api.github.com/repos/LoomSDK/LoomSDK/forks","keys_url":"https://api.github.com/repos/LoomSDK/LoomSDK/keys{/key_id}","collaborators_url":"https://api.github.com/repos/LoomSDK/LoomSDK/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/LoomSDK/LoomSDK/teams","hooks_url":"https://api.github.com/repos/LoomSDK/LoomSDK/hooks","issue_events_url":"https://api.github.com/repos/LoomSDK/LoomSDK/issues/events{/number}","events_url":"https://api.github.com/repos/LoomSDK/LoomSDK/events","assignees_url":"https://api.github.com/repos/LoomSDK/LoomSDK/assignees{/user}","branches_url":"https://api.github.com/repos/LoomSDK/LoomSDK/branches{/branch}","tags_url":"https://api.github.com/repos/LoomSDK/LoomSDK/tags","blobs_url":"https://api.github.com/repos/LoomSDK/LoomSDK/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/LoomSDK/LoomSDK/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/LoomSDK/LoomSDK/git/refs{/sha}","trees_url":"https://api.github.com/repos/LoomSDK/LoomSDK/git/trees{/sha}","statuses_url":"https://api.github.com/repos/LoomSDK/LoomSDK/statuses/{sha}","languages_url":"https://api.github.com/repos/LoomSDK/LoomSDK/languages","stargazers_url":"https://api.github.com/repos/LoomSDK/LoomSDK/stargazers","contributors_url":"https://api.github.com/repos/LoomSDK/LoomSDK/contributors","subscribers_url":"https://api.github.com/repos/LoomSDK/LoomSDK/subscribers","subscription_url":"https://api.github.com/repos/LoomSDK/LoomSDK/subscription","commits_url":"https://api.github.com/repos/LoomSDK/LoomSDK/commits{/sha}","git_commits_url":"https://api.github.com/repos/LoomSDK/LoomSDK/git/commits{/sha}","comments_url":"https://api.github.com/repos/LoomSDK/LoomSDK/comments{/number}","issue_comment_url":"https://api.github.com/repos/LoomSDK/LoomSDK/issues/comments/{number}","contents_url":"https://api.github.com/repos/LoomSDK/LoomSDK/contents/{+path}","compare_url":"https://api.github.com/repos/LoomSDK/LoomSDK/compare/{base}...{head}","merges_url":"https://api.github.com/repos/LoomSDK/LoomSDK/merges","archive_url":"https://api.github.com/repos/LoomSDK/LoomSDK/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/LoomSDK/LoomSDK/downloads","issues_url":"https://api.github.com/repos/LoomSDK/LoomSDK/issues{/number}","pulls_url":"https://api.github.com/repos/LoomSDK/LoomSDK/pulls{/number}","milestones_url":"https://api.github.com/repos/LoomSDK/LoomSDK/milestones{/number}","notifications_url":"https://api.github.com/repos/LoomSDK/LoomSDK/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/LoomSDK/LoomSDK/labels{/name}","releases_url":"https://api.github.com/repos/LoomSDK/LoomSDK/releases{/id}","created_at":"2013-08-24T00:09:22Z","updated_at":"2015-02-10T22:47:55Z","pushed_at":"2015-02-11T20:56:16Z","git_url":"git://github.com/LoomSDK/LoomSDK.git","ssh_url":"git@github.com:LoomSDK/LoomSDK.git","clone_url":"https://github.com/LoomSDK/LoomSDK.git","svn_url":"https://github.com/LoomSDK/LoomSDK","homepage":"http://www.LoomSDK.com","size":290312,"stargazers_count":160,"watchers_count":160,"language":"LoomScript","has_issues":false,"has_downloads":true,"has_wiki":false,"has_pages":false,"forks_count":53,"mirror_url":null,"open_issues_count":10,"forks":53,"open_issues":10,"watchers":160,"default_branch":"master"}},"base":{"label":"LoomSDK:master","ref":"master","sha":"e0c8f162d88e7258dc71c039bb4155f5159223b6","user":{"login":"LoomSDK","id":5264050,"avatar_url":"https://avatars.githubusercontent.com/u/5264050?v=3","gravatar_id":"","url":"https://api.github.com/users/LoomSDK","html_url":"https://github.com/LoomSDK","followers_url":"https://api.github.com/users/LoomSDK/followers","following_url":"https://api.github.com/users/LoomSDK/following{/other_user}","gists_url":"https://api.github.com/users/LoomSDK/gists{/gist_id}","starred_url":"https://api.github.com/users/LoomSDK/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/LoomSDK/subscriptions","organizations_url":"https://api.github.com/users/LoomSDK/orgs","repos_url":"https://api.github.com/users/LoomSDK/repos","events_url":"https://api.github.com/users/LoomSDK/events{/privacy}","received_events_url":"https://api.github.com/users/LoomSDK/received_events","type":"Organization","site_admin":false},"repo":{"id":12335264,"name":"LoomSDK","full_name":"LoomSDK/LoomSDK","owner":{"login":"LoomSDK","id":5264050,"avatar_url":"https://avatars.githubusercontent.com/u/5264050?v=3","gravatar_id":"","url":"https://api.github.com/users/LoomSDK","html_url":"https://github.com/LoomSDK","followers_url":"https://api.github.com/users/LoomSDK/followers","following_url":"https://api.github.com/users/LoomSDK/following{/other_user}","gists_url":"https://api.github.com/users/LoomSDK/gists{/gist_id}","starred_url":"https://api.github.com/users/LoomSDK/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/LoomSDK/subscriptions","organizations_url":"https://api.github.com/users/LoomSDK/orgs","repos_url":"https://api.github.com/users/LoomSDK/repos","events_url":"https://api.github.com/users/LoomSDK/events{/privacy}","received_events_url":"https://api.github.com/users/LoomSDK/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/LoomSDK/LoomSDK","description":"The Loom SDK, a native mobile app and game framework.","fork":false,"url":"https://api.github.com/repos/LoomSDK/LoomSDK","forks_url":"https://api.github.com/repos/LoomSDK/LoomSDK/forks","keys_url":"https://api.github.com/repos/LoomSDK/LoomSDK/keys{/key_id}","collaborators_url":"https://api.github.com/repos/LoomSDK/LoomSDK/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/LoomSDK/LoomSDK/teams","hooks_url":"https://api.github.com/repos/LoomSDK/LoomSDK/hooks","issue_events_url":"https://api.github.com/repos/LoomSDK/LoomSDK/issues/events{/number}","events_url":"https://api.github.com/repos/LoomSDK/LoomSDK/events","assignees_url":"https://api.github.com/repos/LoomSDK/LoomSDK/assignees{/user}","branches_url":"https://api.github.com/repos/LoomSDK/LoomSDK/branches{/branch}","tags_url":"https://api.github.com/repos/LoomSDK/LoomSDK/tags","blobs_url":"https://api.github.com/repos/LoomSDK/LoomSDK/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/LoomSDK/LoomSDK/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/LoomSDK/LoomSDK/git/refs{/sha}","trees_url":"https://api.github.com/repos/LoomSDK/LoomSDK/git/trees{/sha}","statuses_url":"https://api.github.com/repos/LoomSDK/LoomSDK/statuses/{sha}","languages_url":"https://api.github.com/repos/LoomSDK/LoomSDK/languages","stargazers_url":"https://api.github.com/repos/LoomSDK/LoomSDK/stargazers","contributors_url":"https://api.github.com/repos/LoomSDK/LoomSDK/contributors","subscribers_url":"https://api.github.com/repos/LoomSDK/LoomSDK/subscribers","subscription_url":"https://api.github.com/repos/LoomSDK/LoomSDK/subscription","commits_url":"https://api.github.com/repos/LoomSDK/LoomSDK/commits{/sha}","git_commits_url":"https://api.github.com/repos/LoomSDK/LoomSDK/git/commits{/sha}","comments_url":"https://api.github.com/repos/LoomSDK/LoomSDK/comments{/number}","issue_comment_url":"https://api.github.com/repos/LoomSDK/LoomSDK/issues/comments/{number}","contents_url":"https://api.github.com/repos/LoomSDK/LoomSDK/contents/{+path}","compare_url":"https://api.github.com/repos/LoomSDK/LoomSDK/compare/{base}...{head}","merges_url":"https://api.github.com/repos/LoomSDK/LoomSDK/merges","archive_url":"https://api.github.com/repos/LoomSDK/LoomSDK/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/LoomSDK/LoomSDK/downloads","issues_url":"https://api.github.com/repos/LoomSDK/LoomSDK/issues{/number}","pulls_url":"https://api.github.com/repos/LoomSDK/LoomSDK/pulls{/number}","milestones_url":"https://api.github.com/repos/LoomSDK/LoomSDK/milestones{/number}","notifications_url":"https://api.github.com/repos/LoomSDK/LoomSDK/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/LoomSDK/LoomSDK/labels{/name}","releases_url":"https://api.github.com/repos/LoomSDK/LoomSDK/releases{/id}","created_at":"2013-08-24T00:09:22Z","updated_at":"2015-02-10T22:47:55Z","pushed_at":"2015-02-11T20:56:16Z","git_url":"git://github.com/LoomSDK/LoomSDK.git","ssh_url":"git@github.com:LoomSDK/LoomSDK.git","clone_url":"https://github.com/LoomSDK/LoomSDK.git","svn_url":"https://github.com/LoomSDK/LoomSDK","homepage":"http://www.LoomSDK.com","size":290312,"stargazers_count":160,"watchers_count":160,"language":"LoomScript","has_issues":false,"has_downloads":true,"has_wiki":false,"has_pages":false,"forks_count":53,"mirror_url":null,"open_issues_count":10,"forks":53,"open_issues":10,"watchers":160,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/LoomSDK/LoomSDK/pulls/261"},"html":{"href":"https://github.com/LoomSDK/LoomSDK/pull/261"},"issue":{"href":"https://api.github.com/repos/LoomSDK/LoomSDK/issues/261"},"comments":{"href":"https://api.github.com/repos/LoomSDK/LoomSDK/issues/261/comments"},"review_comments":{"href":"https://api.github.com/repos/LoomSDK/LoomSDK/pulls/261/comments"},"review_comment":{"href":"https://api.github.com/repos/LoomSDK/LoomSDK/pulls/comments/{number}"},"commits":{"href":"https://api.github.com/repos/LoomSDK/LoomSDK/pulls/261/commits"},"statuses":{"href":"https://api.github.com/repos/LoomSDK/LoomSDK/statuses/afc42f90af785be693278076aa4105e4345953f1"}}}}