Skip to content

Commit

Permalink
first commit middleware
Browse files Browse the repository at this point in the history
  • Loading branch information
bbriatte committed Apr 15, 2017
1 parent 915b4e8 commit d7b0bb8
Show file tree
Hide file tree
Showing 5 changed files with 85 additions and 1 deletion.
4 changes: 3 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -34,8 +34,10 @@ playground.xcworkspace
# Swift Package Manager
#
# Add this line if you want to avoid checking in source code from Swift Package Manager dependencies.
# Packages/
Packages/
.build/
*.xcodeproj
Package.pins

# CocoaPods
#
Expand Down
12 changes: 12 additions & 0 deletions Package.swift
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
// swift-tools-version:3.1

import PackageDescription

let package = Package(
name: "DGPerfectMiddleware",
dependencies: [
.Package(url: "https://github.com/PerfectlySoft/Perfect-HTTP.git",
majorVersion: 2,
minor: 1)
]
)
49 changes: 49 additions & 0 deletions Sources/MiddlewareHandler.swift
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
import PerfectHTTP

public typealias Middleware = (MiddlewareContext) -> ()

public class MiddlewareContext {

public let request: HTTPRequest
public let response: HTTPResponse
public let middlewares: [Middleware]

public fileprivate(set) var shared: [String: Any]

public fileprivate(set) var current: Int

public init(request: HTTPRequest, response: HTTPResponse, middlewares: [Middleware]) {
self.request = request
self.response = response
self.shared = [String: Any]()
self.middlewares = middlewares
self.current = 0
}

public func next(err: Error? = nil) {
guard err == nil else {
return
}
if self.current < self.middlewares.count {
let cur = self.current
self.current = cur + 1
self.middlewares[cur](self)
}
}

deinit {
print("deinit")
}
}

open class MiddlewareHandler {

private init() {}

public static func all(_ middlewares: [Middleware]) -> RequestHandler {
return { request, response in
MiddlewareContext(request: request, response: response, middlewares: middlewares).next()
}
}
}

15 changes: 15 additions & 0 deletions Tests/DGPerfectMiddlewareTests/DGPerfectMiddlewareTests.swift
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
import XCTest
@testable import DGPerfectMiddleware

class DGPerfectMiddlewareTests: XCTestCase {
func testExample() {



}


static var allTests = [
("testExample", testExample),
]
}
6 changes: 6 additions & 0 deletions Tests/LinuxMain.swift
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
import XCTest
@testable import DGPerfectMiddlewareTests

XCTMain([
testCase(DGPerfectMiddlewareTests.allTests),
])

0 comments on commit d7b0bb8

Please sign in to comment.