Skip to content
This repository was archived by the owner on Oct 18, 2022. It is now read-only.

Commit 7163357

Browse files
committed
Merge pull request #4 from slightair/introduceNewObjCSyntax
Introduce Objective-C nullability, lightweight generics
2 parents 21aaa25 + fa3a68d commit 7163357

25 files changed

+181
-187
lines changed

Example/Tests/PURLogStoreSpec.swift

Lines changed: 25 additions & 54 deletions
Original file line numberDiff line numberDiff line change
@@ -5,17 +5,15 @@ import Puree
55
class PURLogStoreSpec: QuickSpec {
66
override func spec() {
77
describe("readwrite logs") {
8+
class TestOutputA : PUROutput {}
9+
class TestOutputB : PUROutput {}
10+
811
let date = NSDate().timeIntervalSince1970
912
let logStoreDBPath = NSTemporaryDirectory() + "/LogStoreSpec_\(date).db"
10-
var logStore : PURLogStore!
11-
12-
class TestOutputA : PUROutput {
13-
14-
}
15-
16-
class TestOutputB : PUROutput {
17-
18-
}
13+
let dummyLogger = PURLogger(configuration: PURLoggerConfiguration())
14+
let outputA = TestOutputA(logger: dummyLogger, tagPattern: "test.*")
15+
let outputB = TestOutputB(logger: dummyLogger, tagPattern: "test.*")
16+
var logStore: PURLogStore!
1917

2018
beforeSuite {
2119
logStore = PURLogStore(databasePath: logStoreDBPath)
@@ -27,14 +25,9 @@ class PURLogStoreSpec: QuickSpec {
2725
}
2826

2927
it("should write log") {
30-
let outputA = TestOutputA(logger: nil, tagPattern: "test.*")
31-
let outputB = TestOutputB(logger: nil, tagPattern: "test.*")
32-
3328
var count = -1
3429
logStore.retrieveLogsForPattern("test.*", output:outputA, completion: { logs in
35-
if logs != nil {
36-
count = logs.count
37-
}
30+
count = logs.count
3831
})
3932
expect(count).toEventually(equal(0), timeout: 1)
4033

@@ -45,22 +38,15 @@ class PURLogStoreSpec: QuickSpec {
4538
logStore.addLog(PURLog(tag: "test.apple", date: NSDate(), userInfo: nil), fromOutput: outputB)
4639

4740
logStore.retrieveLogsForPattern("test.*", output:outputA, completion: { logs in
48-
if logs != nil {
49-
count = logs.count
50-
}
41+
count = logs.count
5142
})
5243
expect(count).toEventually(equal(4), timeout: 1)
5344
}
5445

5546
it("should write logs all together") {
56-
let outputA = TestOutputA(logger: nil, tagPattern: "test.*")
57-
let outputB = TestOutputB(logger: nil, tagPattern: "test.*")
58-
5947
var count = -1
6048
logStore.retrieveLogsForPattern("test.*", output: outputA, completion: { logs in
61-
if logs != nil {
62-
count = logs.count
63-
}
49+
count = logs.count
6450
})
6551
expect(count).toEventually(equal(0), timeout: 1)
6652

@@ -78,17 +64,12 @@ class PURLogStoreSpec: QuickSpec {
7864
], fromOutput:outputB);
7965

8066
logStore.retrieveLogsForPattern("test.*", output: outputA, completion: { logs in
81-
if logs != nil {
82-
count = logs.count
83-
}
67+
count = logs.count
8468
})
8569
expect(count).toEventually(equal(5), timeout: 1)
8670
}
8771

8872
it("should remove logs") {
89-
let outputA = TestOutputA(logger: nil, tagPattern: "test.*")
90-
let outputB = TestOutputB(logger: nil, tagPattern: "test.*")
91-
9273
let firstChunk = [
9374
PURLog(tag: "test.apple", date: NSDate(), userInfo: nil),
9475
PURLog(tag: "test.banana", date: NSDate(), userInfo: nil),
@@ -98,41 +79,33 @@ class PURLogStoreSpec: QuickSpec {
9879
PURLog(tag: "test.apple", date: NSDate(), userInfo: nil),
9980
PURLog(tag: "test.apple", date: NSDate(), userInfo: nil),
10081
PURLog(tag: "test.banana", date: NSDate(), userInfo: nil),
101-
], fromOutput:outputA);
82+
], fromOutput:outputA);
10283

10384
logStore.addLogs([
10485
PURLog(tag: "test.apple", date: NSDate(), userInfo: nil),
10586
PURLog(tag: "test.banana", date: NSDate(), userInfo: nil),
106-
], fromOutput:outputB);
87+
], fromOutput:outputB);
10788

10889
var count = -1
10990
logStore.retrieveLogsForPattern("test.*", output: outputA, completion: { logs in
110-
if logs != nil {
111-
count = logs.count
112-
}
91+
count = logs.count
11392
})
11493
expect(count).toEventually(equal(5), timeout: 1)
11594

11695
logStore.retrieveLogsForPattern("test.*", output: outputB, completion: { logs in
117-
if logs != nil {
118-
count = logs.count
119-
}
96+
count = logs.count
12097
})
12198
expect(count).toEventually(equal(2), timeout: 1)
12299

123100
logStore.removeLogs(firstChunk, fromOutput: outputA)
124101

125102
logStore.retrieveLogsForPattern("test.*", output: outputA, completion: { logs in
126-
if logs != nil {
127-
count = logs.count
128-
}
103+
count = logs.count
129104
})
130105
expect(count).toEventually(equal(3), timeout: 1)
131106

132107
logStore.retrieveLogsForPattern("test.*", output: outputB, completion: { logs in
133-
if logs != nil {
134-
count = logs.count
135-
}
108+
count = logs.count
136109
})
137110
expect(count).toEventually(equal(2), timeout: 1)
138111
}
@@ -141,12 +114,12 @@ class PURLogStoreSpec: QuickSpec {
141114
describe("stress test") {
142115
let date = NSDate().timeIntervalSince1970
143116
let logStoreDBPath = NSTemporaryDirectory() + "/LogStoreSpec_\(date).db"
117+
let dummyLogger = PURLogger(configuration: PURLoggerConfiguration())
118+
let outputA = PUROutput(logger: dummyLogger, tagPattern: "testA.*")
119+
let outputB = PUROutput(logger: dummyLogger, tagPattern: "testB.*")
120+
let outputC = PUROutput(logger: dummyLogger, tagPattern: "testC.*")
144121
var logStore : PURLogStore!
145122

146-
let outputA = PUROutput(logger: nil, tagPattern: "testA.*")
147-
let outputB = PUROutput(logger: nil, tagPattern: "testB.*")
148-
let outputC = PUROutput(logger: nil, tagPattern: "testC.*")
149-
150123
beforeSuite {
151124
logStore = PURLogStore(databasePath: logStoreDBPath)
152125
logStore.prepare()
@@ -158,20 +131,20 @@ class PURLogStoreSpec: QuickSpec {
158131
PURLog(tag: "testA.apple", date: NSDate(), userInfo: nil),
159132
PURLog(tag: "testA.banana", date: NSDate(), userInfo: nil),
160133
PURLog(tag: "testA.mango", date: NSDate(), userInfo: nil),
161-
], fromOutput:outputA);
134+
], fromOutput:outputA);
162135

163136
logStore.addLogs([
164137
PURLog(tag: "testB.apple", date: NSDate(), userInfo: nil),
165138
PURLog(tag: "testB.banana", date: NSDate(), userInfo: nil),
166139
PURLog(tag: "testB.mango", date: NSDate(), userInfo: nil),
167-
], fromOutput:outputB);
140+
], fromOutput:outputB);
168141

169142
logStore.addLogs([
170143
PURLog(tag: "testC.apple", date: NSDate(), userInfo: nil),
171144
PURLog(tag: "testC.banana", date: NSDate(), userInfo: nil),
172145
PURLog(tag: "testC.mango", date: NSDate(), userInfo: nil),
173146
PURLog(tag: "testC.peach", date: NSDate(), userInfo: nil),
174-
], fromOutput:outputC);
147+
], fromOutput:outputC);
175148
}
176149
}
177150

@@ -184,9 +157,7 @@ class PURLogStoreSpec: QuickSpec {
184157
it("read testA.* logs") {
185158
var count = -1
186159
logStore.retrieveLogsForPattern("testA.*", output: outputA, completion: { logs in
187-
if logs != nil {
188-
count = logs.count
189-
}
160+
count = logs.count
190161
})
191162
expect(count).toEventually(equal(300), timeout: 3)
192163
}

Example/Tests/PURTestAppendParamFilter.swift

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -10,10 +10,15 @@ import Foundation
1010
import Puree
1111

1212
class PURTestAppendParamFilter : PURFilter {
13-
override func logsWithObject(object: AnyObject!, tag: String!, captured: String!) -> [AnyObject]! {
14-
var userInfo = object as! [NSObject : AnyObject]
15-
userInfo["ext"] = captured;
13+
override func logsWithObject(object: AnyObject, tag: String, captured: String?) -> [PURLog] {
14+
guard
15+
var userInfo = object as? [NSObject: AnyObject],
16+
let ext = captured
17+
else {
18+
return []
19+
}
1620

17-
return [PURLog(tag: tag, date: NSDate(), userInfo: userInfo as [NSObject : AnyObject])]
21+
userInfo["ext"] = ext
22+
return [PURLog(tag: tag, date: self.logger.currentDate(), userInfo: userInfo)]
1823
}
1924
}

Example/Tests/PURTestBufferedOutput.swift

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -10,23 +10,22 @@ import Foundation
1010
import Puree
1111

1212
class PURTestBufferedOutput : PURBufferedOutput {
13-
var logStorage: TestLogStorage?
13+
var logStorage: TestLogStorage!
1414

15-
override func configure(settings: [NSObject : AnyObject]!) {
15+
override func configure(settings: [String : AnyObject]) {
1616
super.configure(settings)
1717

18-
self.logStorage = settings["logStorage"] as? TestLogStorage
18+
self.logStorage = settings["logStorage"] as! TestLogStorage
1919
}
2020

21-
override func writeChunk(chunk: PURBufferedOutputChunk!, completion: ((Bool) -> Void)!) {
22-
let logs = chunk.logs as! [PURLog]
23-
let logString = (logs as [PURLog]).reduce("") { (result, log) -> String in
21+
override func writeChunk(chunk: PURBufferedOutputChunk, completion: (Bool) -> Void) {
22+
let logString = chunk.logs.reduce("") { (result, log) -> String in
2423
let userInfo = log.userInfo as! [String: String]
2524
let record = userInfo.keys.sort().map { "\($0)=\(log.userInfo[$0]!)" }.joinWithSeparator("_")
2625

2726
return result + "\(log.tag)-\(record)/"
2827
}
29-
self.logStorage?.addLog(logString)
28+
self.logStorage.addLog(logString)
3029
completion(true);
3130
}
3231
}

Example/Tests/PURTestChangeTagFilter.swift

Lines changed: 13 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -10,14 +10,21 @@ import Foundation
1010
import Puree
1111

1212
class PURTestChangeTagFilter : PURFilter {
13-
var tagSuffix: String!
14-
override func configure(settings: [NSObject : AnyObject]!) {
15-
tagSuffix = settings["tagSuffix"] as! String!
13+
var tagSuffix: String?
14+
15+
override func configure(settings: [String : AnyObject]) {
16+
tagSuffix = settings["tagSuffix"] as? String
1617
}
1718

18-
override func logsWithObject(object: AnyObject!, tag: String!, captured: String!) -> [AnyObject]! {
19-
let newTag = tag + tagSuffix
19+
override func logsWithObject(object: AnyObject, tag: String, captured: String?) -> [PURLog] {
20+
guard
21+
let userInfo = object as? [NSObject: AnyObject],
22+
let suffix = tagSuffix
23+
else {
24+
return []
25+
}
2026

21-
return [PURLog(tag: newTag, date: NSDate(), userInfo: object as! [NSObject : AnyObject])]
27+
let newTag = tag + suffix
28+
return [PURLog(tag: newTag, date: self.logger.currentDate(), userInfo: userInfo)]
2229
}
2330
}

Example/Tests/PURTestFailureOutput.swift

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -10,16 +10,16 @@ import Foundation
1010
import Puree
1111

1212
class PURTestFailureOutput : PURBufferedOutput {
13-
var logStorage: TestLogStorage?
13+
var logStorage: TestLogStorage!
1414

15-
override func configure(settings: [NSObject : AnyObject]!) {
15+
override func configure(settings: [String : AnyObject]) {
1616
super.configure(settings)
1717

18-
self.logStorage = settings["logStorage"] as? TestLogStorage
18+
self.logStorage = settings["logStorage"] as! TestLogStorage
1919
}
2020

21-
override func writeChunk(chunk: PURBufferedOutputChunk!, completion: ((Bool) -> Void)!) {
22-
self.logStorage?.addLog("error");
21+
override func writeChunk(chunk: PURBufferedOutputChunk, completion: (Bool) -> Void) {
22+
self.logStorage.addLog("error");
2323
print("\(NSDate()): error!(retry debug)")
2424
completion(false)
2525
}

Example/Tests/PURTestOutput.swift

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -10,17 +10,17 @@ import Foundation
1010
import Puree
1111

1212
class PURTestOutput : PUROutput {
13-
var logStorage: TestLogStorage?
13+
var logStorage: TestLogStorage!
1414

15-
override func configure(settings: [NSObject : AnyObject]!) {
15+
override func configure(settings: [String : AnyObject]) {
1616
super.configure(settings)
1717

18-
self.logStorage = settings["logStorage"] as? TestLogStorage
18+
self.logStorage = settings["logStorage"] as! TestLogStorage
1919
}
2020

21-
override func emitLog(log: PURLog!) {
21+
override func emitLog(log: PURLog) {
2222
let userInfo = log.userInfo as! [String: String]
2323
let record = userInfo.keys.sort().map { "\($0)=\(log.userInfo[$0]!)" }.joinWithSeparator("_")
24-
self.logStorage?.addLog("\(log.tag)-\(record)")
24+
self.logStorage.addLog("\(log.tag)-\(record)")
2525
}
2626
}

Pod/Classes/PURBufferedOutput.h

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,15 +9,17 @@
99
#import <Foundation/Foundation.h>
1010
#import "PUROutput.h"
1111

12+
NS_ASSUME_NONNULL_BEGIN
13+
1214
extern NSString * const PURBufferedOutputSettingsLogLimitKey;
1315
extern NSString * const PURBufferedOutputSettingsFlushIntervalKey;
1416
extern NSString * const PURBufferedOutputSettingsMaxRetryCountKey;
1517

1618
@interface PURBufferedOutputChunk : NSObject
1719

18-
- (instancetype)initWithLogs:(NSArray *)logs;
20+
- (instancetype)initWithLogs:(NSArray<PURLog *> *)logs;
1921

20-
@property (nonatomic, readonly) NSArray *logs;
22+
@property (nonatomic, readonly) NSArray<PURLog *> *logs;
2123
@property (nonatomic) NSUInteger retryCount;
2224

2325
@end
@@ -35,3 +37,5 @@ extern NSString * const PURBufferedOutputSettingsMaxRetryCountKey;
3537
@property (nonatomic, readonly) NSOperationQueue *writeChunkQueue;
3638

3739
@end
40+
41+
NS_ASSUME_NONNULL_END

Pod/Classes/PURBufferedOutput.m

Lines changed: 8 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -20,21 +20,20 @@
2020

2121
@implementation PURBufferedOutputChunk
2222

23-
- (instancetype)initWithLogs:(NSArray *)logs
23+
- (instancetype)initWithLogs:(NSArray<PURLog *> *)logs
2424
{
2525
self = [super init];
26-
if (self) {
27-
_logs = logs;
28-
_retryCount = 0;
29-
}
26+
_logs = logs;
27+
_retryCount = 0;
28+
3029
return self;
3130
}
3231

3332
@end
3433

3534
@interface PURBufferedOutput ()
3635

37-
@property (nonatomic) NSMutableArray *buffer;
36+
@property (nonatomic) NSMutableArray<PURLog *> *buffer;
3837
@property (nonatomic) NSUInteger logLimit;
3938
@property (nonatomic) NSTimeInterval flushInterval;
4039
@property (nonatomic) NSUInteger maxRetryCount;
@@ -62,7 +61,7 @@ - (void)setUpTimer
6261
[[NSRunLoop currentRunLoop] addTimer:self.timer forMode:NSRunLoopCommonModes];
6362
}
6463

65-
- (void)configure:(NSDictionary *)settings
64+
- (void)configure:(NSDictionary<NSString *, id> *)settings
6665
{
6766
[super configure:settings];
6867

@@ -124,7 +123,7 @@ - (void)reloadLogStore
124123

125124
[self.logStore retrieveLogsForPattern:self.tagPattern
126125
output:self
127-
completion:^(NSArray *logs){
126+
completion:^(NSArray<PURLog *> *logs){
128127
[self.buffer addObjectsFromArray:logs];
129128
}];
130129
}
@@ -149,7 +148,7 @@ - (void)flush
149148

150149
NSUInteger logCount = MIN([self.buffer count], self.logLimit);
151150
NSIndexSet *indexSet = [NSIndexSet indexSetWithIndexesInRange:NSMakeRange(0, logCount)];
152-
NSArray *flushLogs = [self.buffer objectsAtIndexes:indexSet];
151+
NSArray<PURLog *> *flushLogs = [self.buffer objectsAtIndexes:indexSet];
153152
[self.buffer removeObjectsAtIndexes:indexSet];
154153

155154
PURBufferedOutputChunk *chunk = [[PURBufferedOutputChunk alloc] initWithLogs:flushLogs];

0 commit comments

Comments
 (0)