Skip to content
This repository was archived by the owner on Apr 20, 2024. It is now read-only.

Commit fa6ebb2

Browse files
Merge pull request #30 from nodes-vapor/refactor
Major refactor
2 parents e6bba83 + bd4368e commit fa6ebb2

18 files changed

+193
-412
lines changed

Package.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,6 @@ let package = Package(
44
name: "Bugsnag",
55
dependencies: [
66
.Package(url: "https://github.com/vapor/vapor.git", Version(2,0,0, prereleaseIdentifiers: ["beta"])),
7-
.Package(url: "https://github.com/nodes-vapor/stacked.git", majorVersion: 0, minor: 0)
7+
.Package(url: "https://github.com/nodes-vapor/stacked.git", majorVersion: 0, minor: 1)
88
]
99
)
Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
import Vapor
2+
3+
internal struct BugsnagConfig {
4+
internal let apiKey: String
5+
internal let notifyReleaseStages: [String]?
6+
internal let endpoint: String
7+
internal let filters: [String]
8+
internal let stackTraceSize: Int
9+
internal let environment: Environment
10+
11+
internal init(_ config: Config) throws {
12+
apiKey = try config.get("apiKey")
13+
14+
notifyReleaseStages = try config["notifyReleaseStages"]?.array?.map {
15+
guard let string = $0.string else {
16+
throw Abort(.internalServerError, reason: "Invalid field for: notifyReleaseStages")
17+
}
18+
19+
return string
20+
}
21+
22+
endpoint = try config.get("endpoint")
23+
filters = try config["filters"]?.array?.map {
24+
guard let string = $0.string else {
25+
throw Abort(.internalServerError, reason: "Invalid field for: filters")
26+
}
27+
28+
return string
29+
} ?? []
30+
31+
stackTraceSize = config["stackTraceSize"]?.int ?? 100
32+
33+
environment = config.environment
34+
}
35+
}

Sources/Bugsnag/Configuration.swift

Lines changed: 0 additions & 110 deletions
This file was deleted.

Sources/Bugsnag/ConnectionManager.swift

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,11 +3,7 @@ import HTTP
33
import Foundation
44
import Stacked
55

6-
76
public protocol ConnectionManagerType {
8-
var client: ClientFactoryProtocol { get }
9-
var url: String { get }
10-
init(client: ClientFactoryProtocol, url: String)
117
func submitPayload(_ json: JSON) throws -> Status
128
}
139

Sources/Bugsnag/Middleware.swift

Lines changed: 0 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -2,23 +2,9 @@ import Vapor
22
import HTTP
33

44
public final class Middleware: HTTP.Middleware {
5-
6-
let drop: Droplet
7-
let configuration: ConfigurationType
85
let reporter: ReporterType
96

10-
public init(drop: Droplet) throws {
11-
self.drop = drop
12-
self.configuration = try Configuration(drop: drop)
13-
self.reporter = Reporter(
14-
drop: drop,
15-
config: configuration
16-
)
17-
}
18-
197
internal init(reporter: ReporterType) throws {
20-
self.drop = reporter.drop
21-
self.configuration = reporter.config
228
self.reporter = reporter
239
}
2410

Sources/Bugsnag/PayloadTransformer.swift

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ internal struct PayloadTransformer: PayloadTransformerType {
2121
let frameAddress: FrameAddressType.Type
2222
let environment: Environment
2323
let apiKey: String
24-
24+
2525
internal func payloadFor(
2626
message: String,
2727
metadata: Node?,
@@ -68,7 +68,7 @@ internal struct PayloadTransformer: PayloadTransformerType {
6868

6969
try requestObj.set("method", request?.method.description)
7070
try requestObj.set("headers", headers)
71-
try requestObj.set("urlParameters", filterOutKeys(filters, inNode: optionalNode(request?.parameters)))
71+
try requestObj.set("urlParameters", filterOutKeys(filters, inNode: optionalNode(request?.parameters.makeNode(in: nil))))
7272
try requestObj.set("queryParameters", filterOutKeys(filters, inNode: optionalNode(request?.query)))
7373
try requestObj.set("formParameters", filterOutKeys(filters, inNode: optionalNode(request?.formURLEncoded)))
7474
try requestObj.set("jsonParameters", filterOutKeys(filters, inNode: optionalNode(request?.json?.makeNode(in: nil))))

Sources/Bugsnag/Provider.swift

Lines changed: 25 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,34 @@
11
import Vapor
2+
import Stacked
23

34
public final class Provider: Vapor.Provider {
45

56
public static var repositoryName = "Bugsnag"
67

7-
var config: ConfigurationType
8+
var config: BugsnagConfig
89

910
public func boot(_ drop: Droplet) {
10-
drop.bugsnag = Reporter(drop: drop, config: config)
11+
let connectionManager = ConnectionManager(
12+
client: EngineClient.factory,
13+
url: config.endpoint
14+
)
15+
16+
let transformer = PayloadTransformer(
17+
frameAddress: FrameAddress.self,
18+
environment: config.environment,
19+
apiKey: config.apiKey
20+
)
21+
22+
let reporter = Reporter(
23+
environment: config.environment,
24+
notifyReleaseStages: config.notifyReleaseStages,
25+
connectionManager: connectionManager,
26+
transformer: transformer,
27+
defaultStackSize: config.stackTraceSize,
28+
defaultFilters: config.filters
29+
)
30+
31+
drop.bugsnag = reporter
1132
}
1233

1334
public func boot(_ config: Config) throws {
@@ -18,11 +39,7 @@ public final class Provider: Vapor.Provider {
1839
)
1940
}
2041

21-
self.config = try Configuration(config: config)
22-
}
23-
24-
public init(drop: Droplet) throws {
25-
config = try Configuration(drop: drop)
42+
self.config = try BugsnagConfig(config)
2643
}
2744

2845
public init(config: Config) throws {
@@ -33,7 +50,7 @@ public final class Provider: Vapor.Provider {
3350
)
3451
}
3552

36-
self.config = try Configuration(config: config)
53+
self.config = try BugsnagConfig(config)
3754
}
3855

3956
// is automatically called directly after boot()

0 commit comments

Comments
 (0)