{"action":"created","comment":{"url":"https://api.github.com/repos/CrossWaterBridge/LDSAnnotations/pulls/comments/59725785","id":59725785,"diff_hunk":"@@ -0,0 +1,379 @@\n+//\n+// Copyright (c) 2016 Hilton Campbell\n+//\n+// Permission is hereby granted, free of charge, to any person obtaining a copy\n+// of this software and associated documentation files (the \"Software\"), to deal\n+// in the Software without restriction, including without limitation the rights\n+// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n+// copies of the Software, and to permit persons to whom the Software is\n+// furnished to do so, subject to the following conditions:\n+//\n+// The above copyright notice and this permission notice shall be included in\n+// all copies or substantial portions of the Software.\n+//\n+// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n+// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n+// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n+// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n+// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n+// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n+// THE SOFTWARE.\n+//\n+\n+import Foundation\n+import SQLite\n+import Swiftification\n+\n+class AnnotationTable {\n+    \n+    static let table = Table(\"annotation\")\n+    static let id = Expression<Int64>(\"_id\")\n+    static let uniqueID = Expression<String>(\"unique_id\")\n+    static let iso639_3Code = Expression<String>(\"iso639_3\")\n+    static let docID = Expression<String>(\"doc_id\")\n+    static let docVersion = Expression<Int>(\"doc_version\")\n+    static let type = Expression<AnnotationType>(\"type\")\n+    static let status = Expression<AnnotationStatus>(\"status\")\n+    static let created = Expression<NSDate?>(\"created\")\n+    static let lastModified = Expression<NSDate>(\"last_modified\")\n+    static let noteID = Expression<Int64?>(\"note_id\")\n+    static let bookmarkID = Expression<Int64?>(\"bookmark_id\")\n+    static let source = Expression<String?>(\"source\")\n+    static let device = Expression<String?>(\"device\")\n+    \n+    static func fromRow(row: Row) -> Annotation {\n+        return Annotation(id: row[id],\n+            uniqueID: row[uniqueID],\n+            iso639_3Code: row[iso639_3Code],\n+            docID: row[docID],\n+            docVersion: row[docVersion],\n+            type: row.get(type),\n+            status: row.get(status),\n+            created: row[created],\n+            lastModified: row[lastModified],\n+            noteID: row[noteID],\n+            bookmarkID: row[bookmarkID],\n+            source: row[source],\n+            device: row[device]\n+        )\n+    }\n+    \n+}\n+\n+extension AnnotationStore {\n+    \n+    func createAnnotationTable() throws {\n+        try self.db.run(AnnotationTable.table.create(ifNotExists: true) { builder in\n+            builder.column(AnnotationTable.id, primaryKey: true)\n+            builder.column(AnnotationTable.uniqueID)\n+            builder.column(AnnotationTable.iso639_3Code)\n+            builder.column(AnnotationTable.docID)\n+            builder.column(AnnotationTable.docVersion)\n+            builder.column(AnnotationTable.type)\n+            builder.column(AnnotationTable.status)\n+            builder.column(AnnotationTable.created)\n+            builder.column(AnnotationTable.lastModified)\n+            builder.column(AnnotationTable.noteID, references: NoteTable.table, NoteTable.id)\n+            builder.column(AnnotationTable.bookmarkID, references: BookmarkTable.table, BookmarkTable.id)\n+            builder.column(AnnotationTable.source)\n+            builder.column(AnnotationTable.device)\n+        })\n+    }\n+\n+    /// Returns the number of active annotations.\n+    public func annotationCount() -> Int {\n+        return db.scalar(AnnotationTable.table.filter(AnnotationTable.status == .Active).count)\n+    }\n+    \n+    /// Returns an unordered list of active annotations.\n+    public func annotations() -> [Annotation] {\n+        do {\n+            return try db.prepare(AnnotationTable.table.filter(AnnotationTable.status == .Active)).map { AnnotationTable.fromRow($0) }\n+        } catch {\n+            return []\n+        }\n+    }\n+    \n+    /// Adds a new annotation.\n+    public func addAnnotation(iso639_3Code: String, docID: String, docVersion: Int, type: AnnotationType, source: String) throws -> Annotation {\n+        guard !iso639_3Code.isEmpty && !docID.isEmpty && docVersion > 0 else {\n+            throw Error.errorWithCode(.Unknown, failureReason: \"Cannot add an annotation without an iso code, doc ID and doc version.\")\n+        }\n+        \n+        let annotation = Annotation(id: nil, uniqueID: NSUUID().UUIDString, iso639_3Code: iso639_3Code, docID: docID, docVersion: docVersion, type: type, status: .Active, created: NSDate(), lastModified: NSDate(), noteID: nil, bookmarkID: nil, source: source, device: \"iphone\")\n+        \n+        let id = try db.run(AnnotationTable.table.insert(\n+            AnnotationTable.uniqueID <- annotation.uniqueID,\n+            AnnotationTable.iso639_3Code <- annotation.iso639_3Code,\n+            AnnotationTable.docID <- annotation.docID,\n+            AnnotationTable.docVersion <- annotation.docVersion,\n+            AnnotationTable.type <- annotation.type,\n+            AnnotationTable.status <- annotation.status,\n+            AnnotationTable.created <- annotation.created,\n+            AnnotationTable.lastModified <- annotation.lastModified,\n+            AnnotationTable.source <- annotation.source,\n+            AnnotationTable.device <- annotation.device\n+        ))\n+        \n+        notifyModifiedAnnotationsWithIDs([id])\n+        \n+        var modifiedAnnotation = annotation\n+        modifiedAnnotation.id = id\n+        return modifiedAnnotation\n+    }\n+    \n+    /// Saves any changes to `annotation` and updates the `lastModified`.\n+    public func updateAnnotation(annotation: Annotation) throws -> Annotation {\n+        guard !annotation.iso639_3Code.isEmpty && !annotation.docID.isEmpty && annotation.docVersion > 0 else {\n+            throw Error.errorWithCode(.Unknown, failureReason: \"Cannot add an annotation without an iso code, doc ID and doc version.\")\n+        }\n+        \n+        var modifiedAnnotation = annotation\n+        modifiedAnnotation.lastModified = NSDate()\n+        \n+        guard let id = annotation.id else {\n+            throw Error.errorWithCode(.Unknown, failureReason: \"Cannot update a annotation without an ID.\")\n+        }\n+        \n+        try db.run(AnnotationTable.table.filter(AnnotationTable.id == id).update(\n+            AnnotationTable.uniqueID <- modifiedAnnotation.uniqueID,\n+            AnnotationTable.iso639_3Code <- modifiedAnnotation.iso639_3Code,\n+            AnnotationTable.docID <- modifiedAnnotation.docID,\n+            AnnotationTable.docVersion <- modifiedAnnotation.docVersion,\n+            AnnotationTable.type <- modifiedAnnotation.type,\n+            AnnotationTable.status <- modifiedAnnotation.status,\n+            AnnotationTable.lastModified <- modifiedAnnotation.lastModified,\n+            AnnotationTable.noteID <- modifiedAnnotation.noteID,\n+            AnnotationTable.bookmarkID <- modifiedAnnotation.bookmarkID,\n+            AnnotationTable.source <- modifiedAnnotation.source,\n+            AnnotationTable.device <- modifiedAnnotation.device\n+        ))\n+        \n+        notifyModifiedAnnotationsWithIDs([id])\n+        \n+        return modifiedAnnotation\n+    }\n+    \n+    /// Returns the number of trashed annotations.\n+    public func trashedAnnotationCount() -> Int {\n+        return db.scalar(AnnotationTable.table.filter(AnnotationTable.status == .Trashed).count)\n+    }\n+    \n+    /// Returns an unordered list of trashed annotations.\n+    public func trashedAnnotations() -> [Annotation] {\n+        do {\n+            return try db.prepare(AnnotationTable.table.filter(AnnotationTable.status == .Trashed)).map { AnnotationTable.fromRow($0) }\n+        } catch {\n+            return []\n+        }\n+    }\n+    \n+    /// Trashes the `annotations`; throws if any of the `annotations` are not active or trashed.\n+    public func trashAnnotations(annotations: [Annotation]) throws {\n+        try inTransaction {\n+            let lastModified = NSDate()\n+            \n+            var ids = [Int64]()\n+            \n+            // Fetch the current status of the annotations\n+            for annotation in self.allAnnotations(ids: annotations.flatMap { $0.id }) {\n+                if annotation.status != .Active && annotation.status != .Trashed {\n+                    throw Error.errorWithCode(.Unknown, failureReason: \"Attempted to trash a annotation that is not active or trashed.\")","path":"LDSAnnotations/AnnotationStore+Annotation.swift","position":181,"original_position":181,"commit_id":"5902a24d33b34ca06800c7202094a1010f6730ad","original_commit_id":"5902a24d33b34ca06800c7202094a1010f6730ad","user":{"login":"nickmshelley","id":419427,"avatar_url":"https://avatars.githubusercontent.com/u/419427?v=3","gravatar_id":"","url":"https://api.github.com/users/nickmshelley","html_url":"https://github.com/nickmshelley","followers_url":"https://api.github.com/users/nickmshelley/followers","following_url":"https://api.github.com/users/nickmshelley/following{/other_user}","gists_url":"https://api.github.com/users/nickmshelley/gists{/gist_id}","starred_url":"https://api.github.com/users/nickmshelley/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/nickmshelley/subscriptions","organizations_url":"https://api.github.com/users/nickmshelley/orgs","repos_url":"https://api.github.com/users/nickmshelley/repos","events_url":"https://api.github.com/users/nickmshelley/events{/privacy}","received_events_url":"https://api.github.com/users/nickmshelley/received_events","type":"User","site_admin":false},"body":"Oh, here's where I saw the \"or.\" :) We'll need to update the error message too.","created_at":"2016-04-14T14:22:52Z","updated_at":"2016-04-14T14:22:52Z","html_url":"https://github.com/CrossWaterBridge/LDSAnnotations/pull/3#discussion_r59725785","pull_request_url":"https://api.github.com/repos/CrossWaterBridge/LDSAnnotations/pulls/3","_links":{"self":{"href":"https://api.github.com/repos/CrossWaterBridge/LDSAnnotations/pulls/comments/59725785"},"html":{"href":"https://github.com/CrossWaterBridge/LDSAnnotations/pull/3#discussion_r59725785"},"pull_request":{"href":"https://api.github.com/repos/CrossWaterBridge/LDSAnnotations/pulls/3"}}},"pull_request":{"url":"https://api.github.com/repos/CrossWaterBridge/LDSAnnotations/pulls/3","id":66372939,"html_url":"https://github.com/CrossWaterBridge/LDSAnnotations/pull/3","diff_url":"https://github.com/CrossWaterBridge/LDSAnnotations/pull/3.diff","patch_url":"https://github.com/CrossWaterBridge/LDSAnnotations/pull/3.patch","issue_url":"https://api.github.com/repos/CrossWaterBridge/LDSAnnotations/issues/3","number":3,"state":"open","locked":false,"title":"Sync Annotations","user":{"login":"stephanheilner","id":2056085,"avatar_url":"https://avatars.githubusercontent.com/u/2056085?v=3","gravatar_id":"","url":"https://api.github.com/users/stephanheilner","html_url":"https://github.com/stephanheilner","followers_url":"https://api.github.com/users/stephanheilner/followers","following_url":"https://api.github.com/users/stephanheilner/following{/other_user}","gists_url":"https://api.github.com/users/stephanheilner/gists{/gist_id}","starred_url":"https://api.github.com/users/stephanheilner/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/stephanheilner/subscriptions","organizations_url":"https://api.github.com/users/stephanheilner/orgs","repos_url":"https://api.github.com/users/stephanheilner/repos","events_url":"https://api.github.com/users/stephanheilner/events{/privacy}","received_events_url":"https://api.github.com/users/stephanheilner/received_events","type":"User","site_admin":false},"body":"Missing the UI and tests still, but sync works.","created_at":"2016-04-13T18:56:15Z","updated_at":"2016-04-14T14:22:52Z","closed_at":null,"merged_at":null,"merge_commit_sha":"de810bc1b7f481866931d9b9d212cbbcc73947e9","assignee":null,"milestone":null,"commits_url":"https://api.github.com/repos/CrossWaterBridge/LDSAnnotations/pulls/3/commits","review_comments_url":"https://api.github.com/repos/CrossWaterBridge/LDSAnnotations/pulls/3/comments","review_comment_url":"https://api.github.com/repos/CrossWaterBridge/LDSAnnotations/pulls/comments{/number}","comments_url":"https://api.github.com/repos/CrossWaterBridge/LDSAnnotations/issues/3/comments","statuses_url":"https://api.github.com/repos/CrossWaterBridge/LDSAnnotations/statuses/5902a24d33b34ca06800c7202094a1010f6730ad","head":{"label":"stephanheilner:annotations","ref":"annotations","sha":"5902a24d33b34ca06800c7202094a1010f6730ad","user":{"login":"stephanheilner","id":2056085,"avatar_url":"https://avatars.githubusercontent.com/u/2056085?v=3","gravatar_id":"","url":"https://api.github.com/users/stephanheilner","html_url":"https://github.com/stephanheilner","followers_url":"https://api.github.com/users/stephanheilner/followers","following_url":"https://api.github.com/users/stephanheilner/following{/other_user}","gists_url":"https://api.github.com/users/stephanheilner/gists{/gist_id}","starred_url":"https://api.github.com/users/stephanheilner/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/stephanheilner/subscriptions","organizations_url":"https://api.github.com/users/stephanheilner/orgs","repos_url":"https://api.github.com/users/stephanheilner/repos","events_url":"https://api.github.com/users/stephanheilner/events{/privacy}","received_events_url":"https://api.github.com/users/stephanheilner/received_events","type":"User","site_admin":false},"repo":{"id":53521297,"name":"LDSAnnotations","full_name":"stephanheilner/LDSAnnotations","owner":{"login":"stephanheilner","id":2056085,"avatar_url":"https://avatars.githubusercontent.com/u/2056085?v=3","gravatar_id":"","url":"https://api.github.com/users/stephanheilner","html_url":"https://github.com/stephanheilner","followers_url":"https://api.github.com/users/stephanheilner/followers","following_url":"https://api.github.com/users/stephanheilner/following{/other_user}","gists_url":"https://api.github.com/users/stephanheilner/gists{/gist_id}","starred_url":"https://api.github.com/users/stephanheilner/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/stephanheilner/subscriptions","organizations_url":"https://api.github.com/users/stephanheilner/orgs","repos_url":"https://api.github.com/users/stephanheilner/repos","events_url":"https://api.github.com/users/stephanheilner/events{/privacy}","received_events_url":"https://api.github.com/users/stephanheilner/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/stephanheilner/LDSAnnotations","description":"Swift client library for LDS annotation sync.","fork":true,"url":"https://api.github.com/repos/stephanheilner/LDSAnnotations","forks_url":"https://api.github.com/repos/stephanheilner/LDSAnnotations/forks","keys_url":"https://api.github.com/repos/stephanheilner/LDSAnnotations/keys{/key_id}","collaborators_url":"https://api.github.com/repos/stephanheilner/LDSAnnotations/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/stephanheilner/LDSAnnotations/teams","hooks_url":"https://api.github.com/repos/stephanheilner/LDSAnnotations/hooks","issue_events_url":"https://api.github.com/repos/stephanheilner/LDSAnnotations/issues/events{/number}","events_url":"https://api.github.com/repos/stephanheilner/LDSAnnotations/events","assignees_url":"https://api.github.com/repos/stephanheilner/LDSAnnotations/assignees{/user}","branches_url":"https://api.github.com/repos/stephanheilner/LDSAnnotations/branches{/branch}","tags_url":"https://api.github.com/repos/stephanheilner/LDSAnnotations/tags","blobs_url":"https://api.github.com/repos/stephanheilner/LDSAnnotations/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/stephanheilner/LDSAnnotations/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/stephanheilner/LDSAnnotations/git/refs{/sha}","trees_url":"https://api.github.com/repos/stephanheilner/LDSAnnotations/git/trees{/sha}","statuses_url":"https://api.github.com/repos/stephanheilner/LDSAnnotations/statuses/{sha}","languages_url":"https://api.github.com/repos/stephanheilner/LDSAnnotations/languages","stargazers_url":"https://api.github.com/repos/stephanheilner/LDSAnnotations/stargazers","contributors_url":"https://api.github.com/repos/stephanheilner/LDSAnnotations/contributors","subscribers_url":"https://api.github.com/repos/stephanheilner/LDSAnnotations/subscribers","subscription_url":"https://api.github.com/repos/stephanheilner/LDSAnnotations/subscription","commits_url":"https://api.github.com/repos/stephanheilner/LDSAnnotations/commits{/sha}","git_commits_url":"https://api.github.com/repos/stephanheilner/LDSAnnotations/git/commits{/sha}","comments_url":"https://api.github.com/repos/stephanheilner/LDSAnnotations/comments{/number}","issue_comment_url":"https://api.github.com/repos/stephanheilner/LDSAnnotations/issues/comments{/number}","contents_url":"https://api.github.com/repos/stephanheilner/LDSAnnotations/contents/{+path}","compare_url":"https://api.github.com/repos/stephanheilner/LDSAnnotations/compare/{base}...{head}","merges_url":"https://api.github.com/repos/stephanheilner/LDSAnnotations/merges","archive_url":"https://api.github.com/repos/stephanheilner/LDSAnnotations/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/stephanheilner/LDSAnnotations/downloads","issues_url":"https://api.github.com/repos/stephanheilner/LDSAnnotations/issues{/number}","pulls_url":"https://api.github.com/repos/stephanheilner/LDSAnnotations/pulls{/number}","milestones_url":"https://api.github.com/repos/stephanheilner/LDSAnnotations/milestones{/number}","notifications_url":"https://api.github.com/repos/stephanheilner/LDSAnnotations/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/stephanheilner/LDSAnnotations/labels{/name}","releases_url":"https://api.github.com/repos/stephanheilner/LDSAnnotations/releases{/id}","deployments_url":"https://api.github.com/repos/stephanheilner/LDSAnnotations/deployments","created_at":"2016-03-09T18:28:48Z","updated_at":"2016-03-09T18:28:50Z","pushed_at":"2016-03-29T19:41:36Z","git_url":"git://github.com/stephanheilner/LDSAnnotations.git","ssh_url":"git@github.com:stephanheilner/LDSAnnotations.git","clone_url":"https://github.com/stephanheilner/LDSAnnotations.git","svn_url":"https://github.com/stephanheilner/LDSAnnotations","homepage":null,"size":90,"stargazers_count":0,"watchers_count":0,"language":"Swift","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":0,"default_branch":"master"}},"base":{"label":"CrossWaterBridge:master","ref":"master","sha":"3f6a916b3038e08e8c3b948a407e00298e727e71","user":{"login":"CrossWaterBridge","id":10014287,"avatar_url":"https://avatars.githubusercontent.com/u/10014287?v=3","gravatar_id":"","url":"https://api.github.com/users/CrossWaterBridge","html_url":"https://github.com/CrossWaterBridge","followers_url":"https://api.github.com/users/CrossWaterBridge/followers","following_url":"https://api.github.com/users/CrossWaterBridge/following{/other_user}","gists_url":"https://api.github.com/users/CrossWaterBridge/gists{/gist_id}","starred_url":"https://api.github.com/users/CrossWaterBridge/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/CrossWaterBridge/subscriptions","organizations_url":"https://api.github.com/users/CrossWaterBridge/orgs","repos_url":"https://api.github.com/users/CrossWaterBridge/repos","events_url":"https://api.github.com/users/CrossWaterBridge/events{/privacy}","received_events_url":"https://api.github.com/users/CrossWaterBridge/received_events","type":"Organization","site_admin":false},"repo":{"id":51182852,"name":"LDSAnnotations","full_name":"CrossWaterBridge/LDSAnnotations","owner":{"login":"CrossWaterBridge","id":10014287,"avatar_url":"https://avatars.githubusercontent.com/u/10014287?v=3","gravatar_id":"","url":"https://api.github.com/users/CrossWaterBridge","html_url":"https://github.com/CrossWaterBridge","followers_url":"https://api.github.com/users/CrossWaterBridge/followers","following_url":"https://api.github.com/users/CrossWaterBridge/following{/other_user}","gists_url":"https://api.github.com/users/CrossWaterBridge/gists{/gist_id}","starred_url":"https://api.github.com/users/CrossWaterBridge/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/CrossWaterBridge/subscriptions","organizations_url":"https://api.github.com/users/CrossWaterBridge/orgs","repos_url":"https://api.github.com/users/CrossWaterBridge/repos","events_url":"https://api.github.com/users/CrossWaterBridge/events{/privacy}","received_events_url":"https://api.github.com/users/CrossWaterBridge/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/CrossWaterBridge/LDSAnnotations","description":"Swift client library for LDS annotation sync.","fork":false,"url":"https://api.github.com/repos/CrossWaterBridge/LDSAnnotations","forks_url":"https://api.github.com/repos/CrossWaterBridge/LDSAnnotations/forks","keys_url":"https://api.github.com/repos/CrossWaterBridge/LDSAnnotations/keys{/key_id}","collaborators_url":"https://api.github.com/repos/CrossWaterBridge/LDSAnnotations/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/CrossWaterBridge/LDSAnnotations/teams","hooks_url":"https://api.github.com/repos/CrossWaterBridge/LDSAnnotations/hooks","issue_events_url":"https://api.github.com/repos/CrossWaterBridge/LDSAnnotations/issues/events{/number}","events_url":"https://api.github.com/repos/CrossWaterBridge/LDSAnnotations/events","assignees_url":"https://api.github.com/repos/CrossWaterBridge/LDSAnnotations/assignees{/user}","branches_url":"https://api.github.com/repos/CrossWaterBridge/LDSAnnotations/branches{/branch}","tags_url":"https://api.github.com/repos/CrossWaterBridge/LDSAnnotations/tags","blobs_url":"https://api.github.com/repos/CrossWaterBridge/LDSAnnotations/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/CrossWaterBridge/LDSAnnotations/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/CrossWaterBridge/LDSAnnotations/git/refs{/sha}","trees_url":"https://api.github.com/repos/CrossWaterBridge/LDSAnnotations/git/trees{/sha}","statuses_url":"https://api.github.com/repos/CrossWaterBridge/LDSAnnotations/statuses/{sha}","languages_url":"https://api.github.com/repos/CrossWaterBridge/LDSAnnotations/languages","stargazers_url":"https://api.github.com/repos/CrossWaterBridge/LDSAnnotations/stargazers","contributors_url":"https://api.github.com/repos/CrossWaterBridge/LDSAnnotations/contributors","subscribers_url":"https://api.github.com/repos/CrossWaterBridge/LDSAnnotations/subscribers","subscription_url":"https://api.github.com/repos/CrossWaterBridge/LDSAnnotations/subscription","commits_url":"https://api.github.com/repos/CrossWaterBridge/LDSAnnotations/commits{/sha}","git_commits_url":"https://api.github.com/repos/CrossWaterBridge/LDSAnnotations/git/commits{/sha}","comments_url":"https://api.github.com/repos/CrossWaterBridge/LDSAnnotations/comments{/number}","issue_comment_url":"https://api.github.com/repos/CrossWaterBridge/LDSAnnotations/issues/comments{/number}","contents_url":"https://api.github.com/repos/CrossWaterBridge/LDSAnnotations/contents/{+path}","compare_url":"https://api.github.com/repos/CrossWaterBridge/LDSAnnotations/compare/{base}...{head}","merges_url":"https://api.github.com/repos/CrossWaterBridge/LDSAnnotations/merges","archive_url":"https://api.github.com/repos/CrossWaterBridge/LDSAnnotations/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/CrossWaterBridge/LDSAnnotations/downloads","issues_url":"https://api.github.com/repos/CrossWaterBridge/LDSAnnotations/issues{/number}","pulls_url":"https://api.github.com/repos/CrossWaterBridge/LDSAnnotations/pulls{/number}","milestones_url":"https://api.github.com/repos/CrossWaterBridge/LDSAnnotations/milestones{/number}","notifications_url":"https://api.github.com/repos/CrossWaterBridge/LDSAnnotations/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/CrossWaterBridge/LDSAnnotations/labels{/name}","releases_url":"https://api.github.com/repos/CrossWaterBridge/LDSAnnotations/releases{/id}","deployments_url":"https://api.github.com/repos/CrossWaterBridge/LDSAnnotations/deployments","created_at":"2016-02-06T00:33:02Z","updated_at":"2016-02-06T00:33:21Z","pushed_at":"2016-04-13T18:56:16Z","git_url":"git://github.com/CrossWaterBridge/LDSAnnotations.git","ssh_url":"git@github.com:CrossWaterBridge/LDSAnnotations.git","clone_url":"https://github.com/CrossWaterBridge/LDSAnnotations.git","svn_url":"https://github.com/CrossWaterBridge/LDSAnnotations","homepage":null,"size":56,"stargazers_count":0,"watchers_count":0,"language":"Swift","has_issues":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":1,"mirror_url":null,"open_issues_count":1,"forks":1,"open_issues":1,"watchers":0,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/CrossWaterBridge/LDSAnnotations/pulls/3"},"html":{"href":"https://github.com/CrossWaterBridge/LDSAnnotations/pull/3"},"issue":{"href":"https://api.github.com/repos/CrossWaterBridge/LDSAnnotations/issues/3"},"comments":{"href":"https://api.github.com/repos/CrossWaterBridge/LDSAnnotations/issues/3/comments"},"review_comments":{"href":"https://api.github.com/repos/CrossWaterBridge/LDSAnnotations/pulls/3/comments"},"review_comment":{"href":"https://api.github.com/repos/CrossWaterBridge/LDSAnnotations/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/CrossWaterBridge/LDSAnnotations/pulls/3/commits"},"statuses":{"href":"https://api.github.com/repos/CrossWaterBridge/LDSAnnotations/statuses/5902a24d33b34ca06800c7202094a1010f6730ad"}}}}