{"action":"created","comment":{"url":"https://api.github.com/repos/QuarkX/Quark/pulls/comments/75632379","id":75632379,"diff_hunk":"@@ -0,0 +1,299 @@\n+import XCTest\n+@testable import Quark\n+\n+struct Test1: InMappable {\n+    let int: Int\n+    let string: String\n+    let double: Double\n+    let bool: Bool\n+    init<Map : InMapProtocol>(mapper: InMapper<Map>) throws {\n+        self.int = try mapper.map(from: \"int\")\n+        self.string = try mapper.map(from: \"string\")\n+        self.double = try mapper.map(from: \"double\")\n+        self.bool = try mapper.map(from: \"bool\")\n+    }\n+}\n+\n+struct Nest2: InMappable {\n+    let int: Int\n+    init<Map : InMapProtocol>(mapper: InMapper<Map>) throws {\n+        self.int = try mapper.map(from: \"int\")\n+    }\n+}\n+\n+struct Test2: InMappable {\n+    let string: String\n+    let ints: [Int]\n+    let nest: Nest2\n+    init<Map : InMapProtocol>(mapper: InMapper<Map>) throws {\n+        self.string = try mapper.map(from: \"string\")\n+        self.ints = try mapper.map(arrayFrom: \"ints\")\n+        self.nest = try mapper.map(from: \"nest\")\n+    }\n+}\n+\n+struct Test3: InMappable {\n+    let string: String\n+    init<Map : InMapProtocol>(mapper: InMapper<Map>) throws {\n+        self.string = try mapper.map(from: \"rio-2016\")\n+    }\n+}\n+\n+struct Test4: InMappable {\n+    let ints: [Int]\n+    init<Map : InMapProtocol>(mapper: InMapper<Map>) throws {\n+        self.ints = try mapper.map(arrayFrom: \"ints\")\n+    }\n+}\n+\n+struct Test5: InMappable {\n+    let nests: [Nest2]\n+    init<Map : InMapProtocol>(mapper: InMapper<Map>) throws {\n+        self.nests = try mapper.map(arrayFrom: \"nests\")\n+    }\n+}\n+\n+enum StringEnum: String {\n+    case venice\n+    case annecy\n+    case quark\n+}\n+\n+enum IntEnum: Int {\n+    case kharkiv = 1\n+    case kiev = 2\n+}\n+\n+struct Test6: InMappable {\n+    let string: StringEnum\n+    let int: IntEnum\n+    init<Map : InMapProtocol>(mapper: InMapper<Map>) throws {\n+        self.string = try mapper.map(from: \"next-big-thing\")\n+        self.int = try mapper.map(from: \"city\")\n+    }\n+}\n+\n+struct Test7: InMappable {\n+    let strings: [StringEnum]\n+    let ints: [IntEnum]\n+    init<Map : InMapProtocol>(mapper: InMapper<Map>) throws {\n+        self.strings = try mapper.map(arrayFrom: \"zewo-projects\")\n+        self.ints = try mapper.map(arrayFrom: \"ukraine-capitals\")\n+    }\n+}\n+\n+struct Test8: InMappable {\n+    let string: StringEnum\n+    init<Map : InMapProtocol>(mapper: InMapper<Map>) throws {\n+        self.string = try mapper.map(from: \"project\")\n+    }\n+}\n+\n+enum TestContext {\n+    case apple\n+    case peach\n+    case orange\n+}\n+\n+struct Nest3: InMappableWithContext {\n+    let int: Int\n+    typealias Context = TestContext\n+    init<Map : InMapProtocol>(mapper: ContextualInMapper<Map, Context>) throws {\n+        let context = mapper.context ?? .apple\n+        switch context {\n+        case .apple:\n+            int = try mapper.map(from: \"apple-int\")\n+        case .peach:\n+            int = try mapper.map(from: \"peach-int\")\n+        case .orange:\n+            int = try mapper.map(from: \"orange-int\")\n+        }\n+    }\n+}\n+\n+struct Test9: InMappableWithContext {\n+    let nest: Nest3\n+    init<Map : InMapProtocol>(mapper: ContextualInMapper<Map, TestContext>) throws {\n+        self.nest = try mapper.map(from: \"nest\")\n+    }\n+}\n+\n+struct Test10: InMappableWithContext {\n+    let nests: [Nest3]\n+    init<Map : InMapProtocol>(mapper: ContextualInMapper<Map, TestContext>) throws {\n+        self.nests = try mapper.map(arrayFrom: \"nests\")\n+    }\n+}\n+\n+struct Test11: InMappable {\n+    let nest: Nest3\n+    let nests: [Nest3]\n+    init<Map : InMapProtocol>(mapper: InMapper<Map>) throws {\n+        self.nest = try mapper.map(from: \"nest\", usingContext: .peach)\n+        self.nests = try mapper.map(arrayFrom: \"nests\", usingContext: .orange)\n+    }\n+}\n+\n+struct Test12: InMappable {\n+    let hiddenFar: String\n+    init<Map : InMapProtocol>(mapper: InMapper<Map>) throws {\n+        self.hiddenFar = try mapper.map(from: \"deeper\", \"stillDeeper\", \"close\", \"gotcha\")\n+    }\n+}\n+\n+struct Test13: InMappable {\n+    let nests: [Nest2]\n+    init<Map : InMapProtocol>(mapper: InMapper<Map>) throws {\n+        self.nests = try mapper.map()\n+    }\n+}\n+\n+class InMapperTests: XCTestCase {\n+\n+    func testPrimitiveMapping() throws {\n+        let primitiveDict: Map = [\"int\": 5, \"string\": \"String\", \"double\": 7.8, \"bool\": true]\n+        let test = try Test1(from: primitiveDict)\n+        XCTAssertEqual(test.int, 5)\n+        XCTAssertEqual(test.string, \"String\")\n+        XCTAssertEqual(test.double, 7.8)\n+        XCTAssertEqual(test.bool, true)\n+    }\n+\n+    func testBasicNesting() throws {\n+        let dict: Map = [\"string\": \"Rio-2016\", \"ints\": [2, 5, 4], \"nest\": [\"int\": 11]]\n+        let test = try Test2(from: dict)\n+        XCTAssertEqual(test.string, \"Rio-2016\")\n+        XCTAssertEqual(test.ints, [2, 5, 4])\n+        XCTAssertEqual(test.nest.int, 11)\n+    }\n+\n+    func testFailNoValue() {\n+        let dict: Map = [\"string\": \"Rio-2016\"]\n+        XCTAssertThrowsError(try Test3(from: dict)) { error in\n+            guard let error = error as? InMapperError, case .noValue = error else {\n+                XCTFail(\"Wrong error thrown; must be .noValue\")\n+                return\n+            }\n+        }\n+    }\n+\n+    func testFailWrongType() {\n+        let dict: Map = [\"rio-2016\": 2016]\n+        XCTAssertThrowsError(try Test3(from: dict)) { error in\n+            guard let error = error as? InMapperError, case .wrongType = error else {\n+                XCTFail(\"Wrong error thrown; must be .wrongType\")\n+                return\n+            }\n+        }\n+    }\n+\n+    func testFailRepresentAsArray() {\n+        let dict: Map = [\"ints\": false]\n+        XCTAssertThrowsError(try Test4(from: dict)) { error in\n+            guard let error = error as? InMapperError, case .cannotRepresentAsArray = error else {\n+                XCTFail(\"Wrong error thrown; must be .cannotRepresentAsArray\")\n+                return\n+            }\n+        }\n+    }\n+\n+    func testArrayOfMappables() throws {\n+        let nests: [Map] = [3, 1, 4, 6, 19].map({ .dictionary([\"int\": .int($0)]) })\n+        let dict: Map = [\"nests\": .array(nests)]\n+        let test = try Test5(from: dict)\n+        XCTAssertEqual(test.nests.map({ $0.int }), [3, 1, 4, 6, 19])\n+    }\n+\n+    func testEnumMapping() throws {\n+        let dict: Map = [\"next-big-thing\": \"quark\", \"city\": 1]\n+        let test = try Test6(from: dict)\n+        XCTAssertEqual(test.string, .quark)\n+        XCTAssertEqual(test.int, .kharkiv)\n+    }\n+\n+    func testEnumArrayMapping() throws {\n+        let dict: Map = [\"zewo-projects\": [\"venice\", \"annecy\", \"quark\"], \"ukraine-capitals\": [1, 2]]\n+        let test = try Test7(from: dict)\n+        XCTAssertEqual(test.strings, [.venice, .annecy, .quark])\n+        XCTAssertEqual(test.ints, [.kharkiv, .kiev])\n+    }\n+\n+    func testEnumFail() {\n+        let dict: Map = [\"project\": \"swansea\"]\n+        XCTAssertThrowsError(try Test8(from: dict)) { error in\n+            guard let error = error as? InMapperError, case .cannotInitializeFromRawValue = error else {\n+                XCTFail(\"Wrong error thrown; must be .cannotInitializeFromRawValue\")\n+                return\n+            }\n+        }\n+    }\n+\n+    func testBasicMappingWithContext() throws {\n+        let appleDict: Map = [\"apple-int\": 1]\n+        let apple = try Nest3(from: appleDict, withContext: .apple)\n+        XCTAssertEqual(apple.int, 1)\n+        let defaulted = try Nest3(from: appleDict)\n+        XCTAssertEqual(defaulted.int, 1)\n+        let peachDict: Map = [\"peach-int\": 2]\n+        let peach = try Nest3(from: peachDict, withContext: .peach)\n+        XCTAssertEqual(peach.int, 2)\n+        let orangeDict: Map = [\"orange-int\": 3]\n+        let orange = try Nest3(from: orangeDict, withContext: .orange)\n+        XCTAssertEqual(orange.int, 3)\n+    }\n+\n+    func testContextInference() throws {\n+        let peach: Map = [\"nest\": [\"peach-int\": 207]]\n+        _ = try Test9(from: peach, withContext: .peach)\n+    }\n+\n+    func testArrayMappingWithContext() throws {\n+        let oranges: [Map] = [2, 0, 1, 6].map({ .dictionary([\"orange-int\": $0]) })\n+        let dict: Map = [\"nests\": .array(oranges)]\n+        _ = try Test10(from: dict, withContext: .orange)\n+    }\n+\n+    func testUsingContext() throws {\n+        let dict: Map = [\"nest\": [\"peach-int\": 10], \"nests\": [[\"orange-int\": 15]]]\n+        _ = try Test11(from: dict)\n+    }\n+\n+    func testDeep() throws {\n+        let deepDict: Map = [\"deeper\": [\"stillDeeper\": [\"close\": [\"gotcha\": \"Ukrainian Gold Medal\"]]]]\n+        let deep = try Test12(from: deepDict)\n+        XCTAssertEqual(deep.hiddenFar, \"Ukrainian Gold Medal\")\n+    }\n+\n+    func testFlatArray() throws {\n+        let dict: Map = [[\"int\": 15], [\"int\": 21]]\n+        let test = try Test13(from: dict)\n+        XCTAssertEqual(test.nests.map({ $0.int }), [15, 21])\n+    }\n+    \n+    func testExpo() throws {\n+        struct Human: Mappable {\n+            let name: String\n+            let age: Int\n+            let nicknames: [String]\n+            ","path":"Tests/QuarkTests/Core/Mapper/InMapperTests.swift","position":278,"original_position":278,"commit_id":"965913b080b0c76579af5d34cacf1b48db851475","original_commit_id":"965913b080b0c76579af5d34cacf1b48db851475","user":{"login":"houndci-bot","id":6697940,"avatar_url":"https://avatars.githubusercontent.com/u/6697940?v=3","gravatar_id":"","url":"https://api.github.com/users/houndci-bot","html_url":"https://github.com/houndci-bot","followers_url":"https://api.github.com/users/houndci-bot/followers","following_url":"https://api.github.com/users/houndci-bot/following{/other_user}","gists_url":"https://api.github.com/users/houndci-bot/gists{/gist_id}","starred_url":"https://api.github.com/users/houndci-bot/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/houndci-bot/subscriptions","organizations_url":"https://api.github.com/users/houndci-bot/orgs","repos_url":"https://api.github.com/users/houndci-bot/repos","events_url":"https://api.github.com/users/houndci-bot/events{/privacy}","received_events_url":"https://api.github.com/users/houndci-bot/received_events","type":"User","site_admin":false},"body":"Trailing Whitespace Violation: Lines should not have trailing whitespace. (trailing_whitespace)","created_at":"2016-08-22T08:02:25Z","updated_at":"2016-08-22T08:02:25Z","html_url":"https://github.com/QuarkX/Quark/pull/37#discussion_r75632379","pull_request_url":"https://api.github.com/repos/QuarkX/Quark/pulls/37","_links":{"self":{"href":"https://api.github.com/repos/QuarkX/Quark/pulls/comments/75632379"},"html":{"href":"https://github.com/QuarkX/Quark/pull/37#discussion_r75632379"},"pull_request":{"href":"https://api.github.com/repos/QuarkX/Quark/pulls/37"}}},"pull_request":{"url":"https://api.github.com/repos/QuarkX/Quark/pulls/37","id":81870126,"html_url":"https://github.com/QuarkX/Quark/pull/37","diff_url":"https://github.com/QuarkX/Quark/pull/37.diff","patch_url":"https://github.com/QuarkX/Quark/pull/37.patch","issue_url":"https://api.github.com/repos/QuarkX/Quark/issues/37","number":37,"state":"open","locked":false,"title":"Generic InMapper & OutMapper","user":{"login":"dreymonde","id":17236908,"avatar_url":"https://avatars.githubusercontent.com/u/17236908?v=3","gravatar_id":"","url":"https://api.github.com/users/dreymonde","html_url":"https://github.com/dreymonde","followers_url":"https://api.github.com/users/dreymonde/followers","following_url":"https://api.github.com/users/dreymonde/following{/other_user}","gists_url":"https://api.github.com/users/dreymonde/gists{/gist_id}","starred_url":"https://api.github.com/users/dreymonde/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/dreymonde/subscriptions","organizations_url":"https://api.github.com/users/dreymonde/orgs","repos_url":"https://api.github.com/users/dreymonde/repos","events_url":"https://api.github.com/users/dreymonde/events{/privacy}","received_events_url":"https://api.github.com/users/dreymonde/received_events","type":"User","site_admin":false},"body":"Please, review the naming, protocol requirements and so on, so I can move to writing tests.\r\n\r\nExample:\r\n\r\n```swift\r\n// Mappable = InMappable & OutMappable\r\nstruct Human: Mappable {\r\n    let name: String\r\n    let age: Int\r\n    let nicknames: [String]\r\n    \r\n    init<Map : InMapProtocol>(mapper: InMapper<Map>) throws {\r\n        self.name = try mapper.map(from: \"name\")\r\n        self.age = try mapper.map(from: \"age\")\r\n        self.nicknames = try mapper.map(arrayFrom: \"nicknames\")\r\n    }\r\n    \r\n    func outMap<Map : OutMapProtocol>(mapper: inout OutMapper<Map>) throws {\r\n        try mapper.map(self.name, to: \"name\")\r\n        try mapper.map(self.age, to: \"age\")\r\n        try mapper.map(array: self.nicknames, to: \"nicknames\")\r\n    }\r\n}\r\n\r\nlet map: Map = [\"name\": \"Bruce Wayne\", \"age\": 31, \"nicknames\": [\"Batman\", \"The Dark Knight\"]]\r\nlet batman = try Human(from: map)\r\n// (name: \"Bruce Wayne\", age: 31, nicknames: [\"Batman\", \"The Dark Knight\"])\r\nlet batmanMap: Map = try batman.map()\r\n// {\"age\":31,\"name\":\"Bruce Wayne\",\"nicknames\":[\"Batman\",\"The Dark Knight\"]}\r\n```","created_at":"2016-08-18T19:04:28Z","updated_at":"2016-08-22T08:02:25Z","closed_at":null,"merged_at":null,"merge_commit_sha":"c75c688a21a507d5b1eed0a5972ec0ff8cc17474","assignee":null,"assignees":[],"milestone":null,"commits_url":"https://api.github.com/repos/QuarkX/Quark/pulls/37/commits","review_comments_url":"https://api.github.com/repos/QuarkX/Quark/pulls/37/comments","review_comment_url":"https://api.github.com/repos/QuarkX/Quark/pulls/comments{/number}","comments_url":"https://api.github.com/repos/QuarkX/Quark/issues/37/comments","statuses_url":"https://api.github.com/repos/QuarkX/Quark/statuses/965913b080b0c76579af5d34cacf1b48db851475","head":{"label":"QuarkX:generic-mapper","ref":"generic-mapper","sha":"965913b080b0c76579af5d34cacf1b48db851475","user":{"login":"QuarkX","id":20213878,"avatar_url":"https://avatars.githubusercontent.com/u/20213878?v=3","gravatar_id":"","url":"https://api.github.com/users/QuarkX","html_url":"https://github.com/QuarkX","followers_url":"https://api.github.com/users/QuarkX/followers","following_url":"https://api.github.com/users/QuarkX/following{/other_user}","gists_url":"https://api.github.com/users/QuarkX/gists{/gist_id}","starred_url":"https://api.github.com/users/QuarkX/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/QuarkX/subscriptions","organizations_url":"https://api.github.com/users/QuarkX/orgs","repos_url":"https://api.github.com/users/QuarkX/repos","events_url":"https://api.github.com/users/QuarkX/events{/privacy}","received_events_url":"https://api.github.com/users/QuarkX/received_events","type":"Organization","site_admin":false},"repo":{"id":62730944,"name":"Quark","full_name":"QuarkX/Quark","owner":{"login":"QuarkX","id":20213878,"avatar_url":"https://avatars.githubusercontent.com/u/20213878?v=3","gravatar_id":"","url":"https://api.github.com/users/QuarkX","html_url":"https://github.com/QuarkX","followers_url":"https://api.github.com/users/QuarkX/followers","following_url":"https://api.github.com/users/QuarkX/following{/other_user}","gists_url":"https://api.github.com/users/QuarkX/gists{/gist_id}","starred_url":"https://api.github.com/users/QuarkX/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/QuarkX/subscriptions","organizations_url":"https://api.github.com/users/QuarkX/orgs","repos_url":"https://api.github.com/users/QuarkX/repos","events_url":"https://api.github.com/users/QuarkX/events{/privacy}","received_events_url":"https://api.github.com/users/QuarkX/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/QuarkX/Quark","description":"A clean web framework for modern Swift applications (macOS and Linux)","fork":false,"url":"https://api.github.com/repos/QuarkX/Quark","forks_url":"https://api.github.com/repos/QuarkX/Quark/forks","keys_url":"https://api.github.com/repos/QuarkX/Quark/keys{/key_id}","collaborators_url":"https://api.github.com/repos/QuarkX/Quark/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/QuarkX/Quark/teams","hooks_url":"https://api.github.com/repos/QuarkX/Quark/hooks","issue_events_url":"https://api.github.com/repos/QuarkX/Quark/issues/events{/number}","events_url":"https://api.github.com/repos/QuarkX/Quark/events","assignees_url":"https://api.github.com/repos/QuarkX/Quark/assignees{/user}","branches_url":"https://api.github.com/repos/QuarkX/Quark/branches{/branch}","tags_url":"https://api.github.com/repos/QuarkX/Quark/tags","blobs_url":"https://api.github.com/repos/QuarkX/Quark/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/QuarkX/Quark/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/QuarkX/Quark/git/refs{/sha}","trees_url":"https://api.github.com/repos/QuarkX/Quark/git/trees{/sha}","statuses_url":"https://api.github.com/repos/QuarkX/Quark/statuses/{sha}","languages_url":"https://api.github.com/repos/QuarkX/Quark/languages","stargazers_url":"https://api.github.com/repos/QuarkX/Quark/stargazers","contributors_url":"https://api.github.com/repos/QuarkX/Quark/contributors","subscribers_url":"https://api.github.com/repos/QuarkX/Quark/subscribers","subscription_url":"https://api.github.com/repos/QuarkX/Quark/subscription","commits_url":"https://api.github.com/repos/QuarkX/Quark/commits{/sha}","git_commits_url":"https://api.github.com/repos/QuarkX/Quark/git/commits{/sha}","comments_url":"https://api.github.com/repos/QuarkX/Quark/comments{/number}","issue_comment_url":"https://api.github.com/repos/QuarkX/Quark/issues/comments{/number}","contents_url":"https://api.github.com/repos/QuarkX/Quark/contents/{+path}","compare_url":"https://api.github.com/repos/QuarkX/Quark/compare/{base}...{head}","merges_url":"https://api.github.com/repos/QuarkX/Quark/merges","archive_url":"https://api.github.com/repos/QuarkX/Quark/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/QuarkX/Quark/downloads","issues_url":"https://api.github.com/repos/QuarkX/Quark/issues{/number}","pulls_url":"https://api.github.com/repos/QuarkX/Quark/pulls{/number}","milestones_url":"https://api.github.com/repos/QuarkX/Quark/milestones{/number}","notifications_url":"https://api.github.com/repos/QuarkX/Quark/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/QuarkX/Quark/labels{/name}","releases_url":"https://api.github.com/repos/QuarkX/Quark/releases{/id}","deployments_url":"https://api.github.com/repos/QuarkX/Quark/deployments","created_at":"2016-07-06T15:13:36Z","updated_at":"2016-08-20T03:55:02Z","pushed_at":"2016-08-22T08:02:12Z","git_url":"git://github.com/QuarkX/Quark.git","ssh_url":"git@github.com:QuarkX/Quark.git","clone_url":"https://github.com/QuarkX/Quark.git","svn_url":"https://github.com/QuarkX/Quark","homepage":"","size":1072,"stargazers_count":29,"watchers_count":29,"language":"Swift","has_issues":true,"has_downloads":true,"has_wiki":true,"has_pages":true,"forks_count":5,"mirror_url":null,"open_issues_count":7,"forks":5,"open_issues":7,"watchers":29,"default_branch":"master"}},"base":{"label":"QuarkX:clean-up","ref":"clean-up","sha":"52708caeef5d9144602d1705e64e2d5a3e31cbab","user":{"login":"QuarkX","id":20213878,"avatar_url":"https://avatars.githubusercontent.com/u/20213878?v=3","gravatar_id":"","url":"https://api.github.com/users/QuarkX","html_url":"https://github.com/QuarkX","followers_url":"https://api.github.com/users/QuarkX/followers","following_url":"https://api.github.com/users/QuarkX/following{/other_user}","gists_url":"https://api.github.com/users/QuarkX/gists{/gist_id}","starred_url":"https://api.github.com/users/QuarkX/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/QuarkX/subscriptions","organizations_url":"https://api.github.com/users/QuarkX/orgs","repos_url":"https://api.github.com/users/QuarkX/repos","events_url":"https://api.github.com/users/QuarkX/events{/privacy}","received_events_url":"https://api.github.com/users/QuarkX/received_events","type":"Organization","site_admin":false},"repo":{"id":62730944,"name":"Quark","full_name":"QuarkX/Quark","owner":{"login":"QuarkX","id":20213878,"avatar_url":"https://avatars.githubusercontent.com/u/20213878?v=3","gravatar_id":"","url":"https://api.github.com/users/QuarkX","html_url":"https://github.com/QuarkX","followers_url":"https://api.github.com/users/QuarkX/followers","following_url":"https://api.github.com/users/QuarkX/following{/other_user}","gists_url":"https://api.github.com/users/QuarkX/gists{/gist_id}","starred_url":"https://api.github.com/users/QuarkX/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/QuarkX/subscriptions","organizations_url":"https://api.github.com/users/QuarkX/orgs","repos_url":"https://api.github.com/users/QuarkX/repos","events_url":"https://api.github.com/users/QuarkX/events{/privacy}","received_events_url":"https://api.github.com/users/QuarkX/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/QuarkX/Quark","description":"A clean web framework for modern Swift applications (macOS and Linux)","fork":false,"url":"https://api.github.com/repos/QuarkX/Quark","forks_url":"https://api.github.com/repos/QuarkX/Quark/forks","keys_url":"https://api.github.com/repos/QuarkX/Quark/keys{/key_id}","collaborators_url":"https://api.github.com/repos/QuarkX/Quark/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/QuarkX/Quark/teams","hooks_url":"https://api.github.com/repos/QuarkX/Quark/hooks","issue_events_url":"https://api.github.com/repos/QuarkX/Quark/issues/events{/number}","events_url":"https://api.github.com/repos/QuarkX/Quark/events","assignees_url":"https://api.github.com/repos/QuarkX/Quark/assignees{/user}","branches_url":"https://api.github.com/repos/QuarkX/Quark/branches{/branch}","tags_url":"https://api.github.com/repos/QuarkX/Quark/tags","blobs_url":"https://api.github.com/repos/QuarkX/Quark/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/QuarkX/Quark/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/QuarkX/Quark/git/refs{/sha}","trees_url":"https://api.github.com/repos/QuarkX/Quark/git/trees{/sha}","statuses_url":"https://api.github.com/repos/QuarkX/Quark/statuses/{sha}","languages_url":"https://api.github.com/repos/QuarkX/Quark/languages","stargazers_url":"https://api.github.com/repos/QuarkX/Quark/stargazers","contributors_url":"https://api.github.com/repos/QuarkX/Quark/contributors","subscribers_url":"https://api.github.com/repos/QuarkX/Quark/subscribers","subscription_url":"https://api.github.com/repos/QuarkX/Quark/subscription","commits_url":"https://api.github.com/repos/QuarkX/Quark/commits{/sha}","git_commits_url":"https://api.github.com/repos/QuarkX/Quark/git/commits{/sha}","comments_url":"https://api.github.com/repos/QuarkX/Quark/comments{/number}","issue_comment_url":"https://api.github.com/repos/QuarkX/Quark/issues/comments{/number}","contents_url":"https://api.github.com/repos/QuarkX/Quark/contents/{+path}","compare_url":"https://api.github.com/repos/QuarkX/Quark/compare/{base}...{head}","merges_url":"https://api.github.com/repos/QuarkX/Quark/merges","archive_url":"https://api.github.com/repos/QuarkX/Quark/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/QuarkX/Quark/downloads","issues_url":"https://api.github.com/repos/QuarkX/Quark/issues{/number}","pulls_url":"https://api.github.com/repos/QuarkX/Quark/pulls{/number}","milestones_url":"https://api.github.com/repos/QuarkX/Quark/milestones{/number}","notifications_url":"https://api.github.com/repos/QuarkX/Quark/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/QuarkX/Quark/labels{/name}","releases_url":"https://api.github.com/repos/QuarkX/Quark/releases{/id}","deployments_url":"https://api.github.com/repos/QuarkX/Quark/deployments","created_at":"2016-07-06T15:13:36Z","updated_at":"2016-08-20T03:55:02Z","pushed_at":"2016-08-22T08:02:12Z","git_url":"git://github.com/QuarkX/Quark.git","ssh_url":"git@github.com:QuarkX/Quark.git","clone_url":"https://github.com/QuarkX/Quark.git","svn_url":"https://github.com/QuarkX/Quark","homepage":"","size":1072,"stargazers_count":29,"watchers_count":29,"language":"Swift","has_issues":true,"has_downloads":true,"has_wiki":true,"has_pages":true,"forks_count":5,"mirror_url":null,"open_issues_count":7,"forks":5,"open_issues":7,"watchers":29,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/QuarkX/Quark/pulls/37"},"html":{"href":"https://github.com/QuarkX/Quark/pull/37"},"issue":{"href":"https://api.github.com/repos/QuarkX/Quark/issues/37"},"comments":{"href":"https://api.github.com/repos/QuarkX/Quark/issues/37/comments"},"review_comments":{"href":"https://api.github.com/repos/QuarkX/Quark/pulls/37/comments"},"review_comment":{"href":"https://api.github.com/repos/QuarkX/Quark/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/QuarkX/Quark/pulls/37/commits"},"statuses":{"href":"https://api.github.com/repos/QuarkX/Quark/statuses/965913b080b0c76579af5d34cacf1b48db851475"}}}}
{"actor":{"display_login":"houndci-bot"}}