make factory methods public

pull/1/head
Michael Kirk 6 years ago
parent 40470ec424
commit ca5b3c8ec9

@ -7,7 +7,7 @@ import Foundation
/// Factories for creating some default TSYapDatabaseObjects. /// Factories for creating some default TSYapDatabaseObjects.
/// ///
/// To customize properties applied by the factory (e.g. `someProperty`) /// To customize properties applied by the factory (e.g. `someProperty`)
/// the factory needs a `var somePropertyBuilder: () -> (SomePropertyType)` /// the factory needs a `public var somePropertyBuilder: () -> (SomePropertyType)`
/// which is then used in the `create` method. /// which is then used in the `create` method.
/// ///
/// Examples: /// Examples:
@ -29,7 +29,7 @@ import Foundation
/// messageFactory.threadCreator = { _ in return existingThread } /// messageFactory.threadCreator = { _ in return existingThread }
/// messageFactory.create(count: 100) /// messageFactory.create(count: 100)
/// ///
protocol Factory { public protocol Factory {
associatedtype ObjectType: TSYapDatabaseObject associatedtype ObjectType: TSYapDatabaseObject
var dbConnection: YapDatabaseConnection { get } var dbConnection: YapDatabaseConnection { get }
@ -44,27 +44,27 @@ protocol Factory {
func create(count: UInt, transaction: YapDatabaseReadWriteTransaction) -> [ObjectType] func create(count: UInt, transaction: YapDatabaseReadWriteTransaction) -> [ObjectType]
} }
extension Factory { public extension Factory {
static var dbConnection: YapDatabaseConnection { static public var dbConnection: YapDatabaseConnection {
return OWSPrimaryStorage.shared().dbReadWriteConnection return OWSPrimaryStorage.shared().dbReadWriteConnection
} }
var dbConnection: YapDatabaseConnection { public var dbConnection: YapDatabaseConnection {
return OWSPrimaryStorage.shared().dbReadWriteConnection return OWSPrimaryStorage.shared().dbReadWriteConnection
} }
static func readWrite(block: @escaping (YapDatabaseReadWriteTransaction) -> Void) { static public func readWrite(block: @escaping (YapDatabaseReadWriteTransaction) -> Void) {
dbConnection.readWrite(block) dbConnection.readWrite(block)
} }
func readWrite(block: @escaping (YapDatabaseReadWriteTransaction) -> Void) { public func readWrite(block: @escaping (YapDatabaseReadWriteTransaction) -> Void) {
dbConnection.readWrite(block) dbConnection.readWrite(block)
} }
// MARK: Factory Methods // MARK: Factory Methods
func create() -> ObjectType { public func create() -> ObjectType {
var item: ObjectType! var item: ObjectType!
self.readWrite { transaction in self.readWrite { transaction in
item = self.create(transaction: transaction) item = self.create(transaction: transaction)
@ -72,7 +72,7 @@ extension Factory {
return item return item
} }
func create(count: UInt) -> [ObjectType] { public func create(count: UInt) -> [ObjectType] {
var items: [ObjectType] = [] var items: [ObjectType] = []
self.readWrite { transaction in self.readWrite { transaction in
items = self.create(count: count, transaction: transaction) items = self.create(count: count, transaction: transaction)
@ -80,20 +80,20 @@ extension Factory {
return items return items
} }
func create(count: UInt, transaction: YapDatabaseReadWriteTransaction) -> [ObjectType] { public func create(count: UInt, transaction: YapDatabaseReadWriteTransaction) -> [ObjectType] {
return (0..<count).map { _ in return create(transaction: transaction) } return (0..<count).map { _ in return create(transaction: transaction) }
} }
} }
@objc @objc
class ContactThreadFactory: NSObject, Factory { public class ContactThreadFactory: NSObject, Factory {
var messageCount: UInt = 0 var messageCount: UInt = 0
// MARK: Factory // MARK: Factory
@objc @objc
func create(transaction: YapDatabaseReadWriteTransaction) -> TSContactThread { public func create(transaction: YapDatabaseReadWriteTransaction) -> TSContactThread {
let threadId = generateContactThreadId() let threadId = generateContactThreadId()
let thread = TSContactThread.getOrCreateThread(withContactId: threadId, transaction: transaction) let thread = TSContactThread.getOrCreateThread(withContactId: threadId, transaction: transaction)
@ -116,18 +116,18 @@ class ContactThreadFactory: NSObject, Factory {
// MARK: Generators // MARK: Generators
func generateContactThreadId() -> String { public func generateContactThreadId() -> String {
return CommonGenerator.contactId return CommonGenerator.contactId
} }
} }
@objc @objc
class OutgoingMessageFactory: NSObject, Factory { public class OutgoingMessageFactory: NSObject, Factory {
// MARK: Factory // MARK: Factory
@objc @objc
func build(transaction: YapDatabaseReadWriteTransaction) -> TSOutgoingMessage { public func build(transaction: YapDatabaseReadWriteTransaction) -> TSOutgoingMessage {
let item = TSOutgoingMessage(outgoingMessageWithTimestamp: timestampBuilder(), let item = TSOutgoingMessage(outgoingMessageWithTimestamp: timestampBuilder(),
in: threadCreator(transaction), in: threadCreator(transaction),
messageBody: messageBodyBuilder(), messageBody: messageBodyBuilder(),
@ -143,7 +143,7 @@ class OutgoingMessageFactory: NSObject, Factory {
} }
@objc @objc
func create(transaction: YapDatabaseReadWriteTransaction) -> TSOutgoingMessage { public func create(transaction: YapDatabaseReadWriteTransaction) -> TSOutgoingMessage {
let item = self.build(transaction: transaction) let item = self.build(transaction: transaction)
item.save(with: transaction) item.save(with: transaction)
@ -153,19 +153,19 @@ class OutgoingMessageFactory: NSObject, Factory {
// MARK: Dependent Factories // MARK: Dependent Factories
@objc @objc
var threadCreator: (YapDatabaseReadWriteTransaction) -> TSThread = { transaction in public var threadCreator: (YapDatabaseReadWriteTransaction) -> TSThread = { transaction in
ContactThreadFactory().create(transaction: transaction) ContactThreadFactory().create(transaction: transaction)
} }
// MARK: Generators // MARK: Generators
@objc @objc
var timestampBuilder: () -> UInt64 = { public var timestampBuilder: () -> UInt64 = {
return NSDate.ows_millisecondTimeStamp() return NSDate.ows_millisecondTimeStamp()
} }
@objc @objc
var messageBodyBuilder: () -> String = { public var messageBodyBuilder: () -> String = {
return CommonGenerator.paragraph return CommonGenerator.paragraph
} }
@ -175,39 +175,39 @@ class OutgoingMessageFactory: NSObject, Factory {
} }
@objc @objc
var expiresInSecondsBuilder: () -> UInt32 = { public var expiresInSecondsBuilder: () -> UInt32 = {
return 0 return 0
} }
@objc @objc
var expireStartedAtBuilder: () -> UInt64 = { public var expireStartedAtBuilder: () -> UInt64 = {
return 0 return 0
} }
@objc @objc
var isVoiceMessageBuilder: () -> Bool = { public var isVoiceMessageBuilder: () -> Bool = {
return false return false
} }
@objc @objc
var groupMetaMessageBuilder: () -> TSGroupMetaMessage = { public var groupMetaMessageBuilder: () -> TSGroupMetaMessage = {
return .unspecified return .unspecified
} }
@objc @objc
var quotedMessageBuilder: () -> TSQuotedMessage? = { public var quotedMessageBuilder: () -> TSQuotedMessage? = {
return nil return nil
} }
@objc @objc
var contactShareBuilder: () -> OWSContact? = { public var contactShareBuilder: () -> OWSContact? = {
return nil return nil
} }
// MARK: Delivery Receipts // MARK: Delivery Receipts
@objc @objc
func buildDeliveryReceipt() -> OWSReceiptsForSenderMessage { public func buildDeliveryReceipt() -> OWSReceiptsForSenderMessage {
var item: OWSReceiptsForSenderMessage! var item: OWSReceiptsForSenderMessage!
self.readWrite { transaction in self.readWrite { transaction in
item = self.buildDeliveryReceipt(transaction: transaction) item = self.buildDeliveryReceipt(transaction: transaction)
@ -216,14 +216,14 @@ class OutgoingMessageFactory: NSObject, Factory {
} }
@objc @objc
func buildDeliveryReceipt(transaction: YapDatabaseReadWriteTransaction) -> OWSReceiptsForSenderMessage { public func buildDeliveryReceipt(transaction: YapDatabaseReadWriteTransaction) -> OWSReceiptsForSenderMessage {
let item = OWSReceiptsForSenderMessage.deliveryReceiptsForSenderMessage(with: threadCreator(transaction), let item = OWSReceiptsForSenderMessage.deliveryReceiptsForSenderMessage(with: threadCreator(transaction),
messageTimestamps: messageTimestampsBuilder()) messageTimestamps: messageTimestampsBuilder())
return item return item
} }
@objc @objc
var messageTimestampsBuilder: () -> [NSNumber] = { public var messageTimestampsBuilder: () -> [NSNumber] = {
return [1] return [1]
} }
} }
@ -234,7 +234,7 @@ class IncomingMessageFactory: NSObject, Factory {
// MARK: Factory // MARK: Factory
@objc @objc
func create(transaction: YapDatabaseReadWriteTransaction) -> TSIncomingMessage { public func create(transaction: YapDatabaseReadWriteTransaction) -> TSIncomingMessage {
let item = TSIncomingMessage(incomingMessageWithTimestamp: timestampBuilder(), let item = TSIncomingMessage(incomingMessageWithTimestamp: timestampBuilder(),
in: threadCreator(transaction), in: threadCreator(transaction),
authorId: authorIdBuilder(), authorId: authorIdBuilder(),
@ -255,59 +255,59 @@ class IncomingMessageFactory: NSObject, Factory {
// MARK: Dependent Factories // MARK: Dependent Factories
@objc @objc
var threadCreator: (YapDatabaseReadWriteTransaction) -> TSThread = { transaction in public var threadCreator: (YapDatabaseReadWriteTransaction) -> TSThread = { transaction in
ContactThreadFactory().create(transaction: transaction) ContactThreadFactory().create(transaction: transaction)
} }
// MARK: Generators // MARK: Generators
@objc @objc
var timestampBuilder: () -> UInt64 = { public var timestampBuilder: () -> UInt64 = {
return NSDate.ows_millisecondTimeStamp() return NSDate.ows_millisecondTimeStamp()
} }
@objc @objc
var messageBodyBuilder: () -> String = { public var messageBodyBuilder: () -> String = {
return CommonGenerator.paragraph return CommonGenerator.paragraph
} }
@objc @objc
var authorIdBuilder: () -> String = { public var authorIdBuilder: () -> String = {
return CommonGenerator.contactId return CommonGenerator.contactId
} }
@objc @objc
var sourceDeviceIdBuilder: () -> UInt32 = { public var sourceDeviceIdBuilder: () -> UInt32 = {
return 1 return 1
} }
@objc @objc
var attachmentIdsBuilder: () -> [String] = { public var attachmentIdsBuilder: () -> [String] = {
return [] return []
} }
@objc @objc
var expiresInSecondsBuilder: () -> UInt32 = { public var expiresInSecondsBuilder: () -> UInt32 = {
return 0 return 0
} }
@objc @objc
var quotedMessageBuilder: () -> TSQuotedMessage? = { public var quotedMessageBuilder: () -> TSQuotedMessage? = {
return nil return nil
} }
@objc @objc
var contactShareBuilder: () -> OWSContact? = { public var contactShareBuilder: () -> OWSContact? = {
return nil return nil
} }
@objc @objc
var serverTimestampBuilder: () -> NSNumber? = { public var serverTimestampBuilder: () -> NSNumber? = {
return nil return nil
} }
@objc @objc
var wasReceivedByUDBuilder: () -> Bool = { public var wasReceivedByUDBuilder: () -> Bool = {
return false return false
} }
} }
@ -316,10 +316,10 @@ class IncomingMessageFactory: NSObject, Factory {
class GroupThreadFactory: NSObject, Factory { class GroupThreadFactory: NSObject, Factory {
@objc @objc
var messageCount: UInt = 0 public var messageCount: UInt = 0
@objc @objc
func create(transaction: YapDatabaseReadWriteTransaction) -> TSGroupThread { public func create(transaction: YapDatabaseReadWriteTransaction) -> TSGroupThread {
let thread = TSGroupThread.getOrCreateThread(with: groupModelBuilder(self), let thread = TSGroupThread.getOrCreateThread(with: groupModelBuilder(self),
transaction: transaction) transaction: transaction)
thread.save(with: transaction) thread.save(with: transaction)
@ -345,7 +345,7 @@ class GroupThreadFactory: NSObject, Factory {
// MARK: Generators // MARK: Generators
@objc @objc
var groupModelBuilder: (GroupThreadFactory) -> TSGroupModel = { groupThreadFactory in public var groupModelBuilder: (GroupThreadFactory) -> TSGroupModel = { groupThreadFactory in
return TSGroupModel(title: groupThreadFactory.titleBuilder(), return TSGroupModel(title: groupThreadFactory.titleBuilder(),
memberIds: groupThreadFactory.memberIdsBuilder(), memberIds: groupThreadFactory.memberIdsBuilder(),
image: groupThreadFactory.imageBuilder(), image: groupThreadFactory.imageBuilder(),
@ -353,22 +353,22 @@ class GroupThreadFactory: NSObject, Factory {
} }
@objc @objc
var titleBuilder: () -> String? = { public var titleBuilder: () -> String? = {
return CommonGenerator.words(count: 3) return CommonGenerator.words(count: 3)
} }
@objc @objc
var groupIdBuilder: () -> Data = { public var groupIdBuilder: () -> Data = {
return Randomness.generateRandomBytes(Int32(kGroupIdLength))! return Randomness.generateRandomBytes(Int32(kGroupIdLength))!
} }
@objc @objc
var imageBuilder: () -> UIImage? = { public var imageBuilder: () -> UIImage? = {
return nil return nil
} }
@objc @objc
var memberIdsBuilder: () -> [RecipientIdentifier] = { public var memberIdsBuilder: () -> [RecipientIdentifier] = {
let groupSize = arc4random_uniform(10) let groupSize = arc4random_uniform(10)
return (0..<groupSize).map { _ in CommonGenerator.contactId } return (0..<groupSize).map { _ in CommonGenerator.contactId }
} }
@ -378,7 +378,7 @@ class GroupThreadFactory: NSObject, Factory {
class AttachmentStreamFactory: NSObject, Factory { class AttachmentStreamFactory: NSObject, Factory {
@objc @objc
class func create(contentType: String, dataSource: DataSource) -> TSAttachmentStream { class public func create(contentType: String, dataSource: DataSource) -> TSAttachmentStream {
var item: TSAttachmentStream! var item: TSAttachmentStream!
readWrite { transaction in readWrite { transaction in
item = create(contentType: contentType, dataSource: dataSource, transaction: transaction) item = create(contentType: contentType, dataSource: dataSource, transaction: transaction)
@ -387,7 +387,7 @@ class AttachmentStreamFactory: NSObject, Factory {
} }
@objc @objc
class func create(contentType: String, dataSource: DataSource, transaction: YapDatabaseReadWriteTransaction) -> TSAttachmentStream { class public func create(contentType: String, dataSource: DataSource, transaction: YapDatabaseReadWriteTransaction) -> TSAttachmentStream {
let factory = AttachmentStreamFactory() let factory = AttachmentStreamFactory()
factory.contentTypeBuilder = { return contentType } factory.contentTypeBuilder = { return contentType }
factory.byteCountBuilder = { return UInt32(dataSource.dataLength()) } factory.byteCountBuilder = { return UInt32(dataSource.dataLength()) }
@ -403,7 +403,7 @@ class AttachmentStreamFactory: NSObject, Factory {
// MARK: Factory // MARK: Factory
@objc @objc
func create(transaction: YapDatabaseReadWriteTransaction) -> TSAttachmentStream { public func create(transaction: YapDatabaseReadWriteTransaction) -> TSAttachmentStream {
let attachmentStream = build(transaction: transaction) let attachmentStream = build(transaction: transaction)
attachmentStream.save(with: transaction) attachmentStream.save(with: transaction)
@ -411,12 +411,12 @@ class AttachmentStreamFactory: NSObject, Factory {
} }
@objc @objc
func build(transaction: YapDatabaseReadTransaction) -> TSAttachmentStream { public func build(transaction: YapDatabaseReadTransaction) -> TSAttachmentStream {
return build() return build()
} }
@objc @objc
func build() -> TSAttachmentStream { public func build() -> TSAttachmentStream {
let attachmentStream = TSAttachmentStream(contentType: contentTypeBuilder(), let attachmentStream = TSAttachmentStream(contentType: contentTypeBuilder(),
byteCount: byteCountBuilder(), byteCount: byteCountBuilder(),
sourceFilename: sourceFilenameBuilder(), sourceFilename: sourceFilenameBuilder(),
@ -429,33 +429,33 @@ class AttachmentStreamFactory: NSObject, Factory {
// MARK: Properties // MARK: Properties
@objc @objc
var contentTypeBuilder: () -> String = { public var contentTypeBuilder: () -> String = {
return OWSMimeTypeApplicationOctetStream return OWSMimeTypeApplicationOctetStream
} }
@objc @objc
var byteCountBuilder: () -> UInt32 = { public var byteCountBuilder: () -> UInt32 = {
return 0 return 0
} }
@objc @objc
var sourceFilenameBuilder: () -> String? = { public var sourceFilenameBuilder: () -> String? = {
return "fake_file.dat" return "fake_file.dat"
} }
@objc @objc
var captionBuilder: () -> String? = { public var captionBuilder: () -> String? = {
return nil return nil
} }
@objc @objc
var albumMessageIdBuilder: () -> String? = { public var albumMessageIdBuilder: () -> String? = {
return nil return nil
} }
} }
extension Array { extension Array {
func ows_randomElement() -> Element? { public func ows_randomElement() -> Element? {
guard self.count > 0 else { guard self.count > 0 else {
return nil return nil
} }
@ -466,7 +466,7 @@ extension Array {
struct CommonGenerator { struct CommonGenerator {
static var contactId: String { static public var contactId: String {
let digits = ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9"] let digits = ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9"]
let randomDigits = (0..<10).map { _ in return digits.ows_randomElement()! } let randomDigits = (0..<10).map { _ in return digits.ows_randomElement()! }
@ -499,11 +499,11 @@ struct CommonGenerator {
"At one time in the world there were woods that no one owned." "At one time in the world there were woods that no one owned."
] ]
static var word: String { static public var word: String {
return String(sentence.split(separator: " ").first!) return String(sentence.split(separator: " ").first!)
} }
static func words(count: Int) -> String { static public func words(count: Int) -> String {
var result: [String] = [] var result: [String] = []
while result.count < count { while result.count < count {
@ -514,20 +514,20 @@ struct CommonGenerator {
return result.joined(separator: " ") return result.joined(separator: " ")
} }
static var sentence: String { static public var sentence: String {
return sentences.ows_randomElement()! return sentences.ows_randomElement()!
} }
static func sentences(count: UInt) -> [String] { static public func sentences(count: UInt) -> [String] {
return (0..<count).map { _ in sentence } return (0..<count).map { _ in sentence }
} }
static var paragraph: String { static public var paragraph: String {
let sentenceCount = UInt(arc4random_uniform(7) + 2) let sentenceCount = UInt(arc4random_uniform(7) + 2)
return paragraph(sentenceCount: sentenceCount) return paragraph(sentenceCount: sentenceCount)
} }
static func paragraph(sentenceCount: UInt) -> String { static public func paragraph(sentenceCount: UInt) -> String {
return sentences(count: sentenceCount).joined(separator: " ") return sentences(count: sentenceCount).joined(separator: " ")
} }
} }

Loading…
Cancel
Save