From 46ea06d9cc4b8799ab6a9c4dfa924a338ffe5779 Mon Sep 17 00:00:00 2001
From: pawurb
Date: Thu, 2 Nov 2017 15:16:38 +0100
Subject: [PATCH] update to swift 4
---
ABKit.podspec | 2 +-
ABKit.xcodeproj/project.pbxproj | 94 +++++++++++--------
ABKit/Codes/ConditionalTest.swift | 12 +--
ABKit/Codes/ConditionalVersion.swift | 4 +-
...SUserDefaults+RandomNumberRepository.swift | 16 ++--
ABKit/Codes/RandomNumberRepository.swift | 6 +-
ABKit/Codes/SplitTest.swift | 28 +++---
ABKit/Codes/Version.swift | 8 +-
ABKit/Codes/VersionWeight.swift | 4 +-
...rDefaults+RandomNumberRepositorySpec.swift | 2 +-
ABKitTests/SplitTestSpec.swift | 6 +-
Podfile | 4 +-
Podfile.lock | 16 ++--
13 files changed, 111 insertions(+), 91 deletions(-)
diff --git a/ABKit.podspec b/ABKit.podspec
index 07a1923..4773516 100644
--- a/ABKit.podspec
+++ b/ABKit.podspec
@@ -1,6 +1,6 @@
Pod::Spec.new do |s|
s.name = "ABKit"
- s.version = "0.1.0"
+f s.version = "0.2.0"
s.summary = "AB testing framework for iOS"
s.description = <<-DESC
ABKit is a library for implementing a simple Split Test that:
diff --git a/ABKit.xcodeproj/project.pbxproj b/ABKit.xcodeproj/project.pbxproj
index 1c4e54f..b40dd0c 100644
--- a/ABKit.xcodeproj/project.pbxproj
+++ b/ABKit.xcodeproj/project.pbxproj
@@ -7,7 +7,6 @@
objects = {
/* Begin PBXBuildFile section */
- 38EF8B652AF26F2465387A33 /* Pods_ABKitTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 22E564495A2765E422B3B15D /* Pods_ABKitTests.framework */; };
3D10CF2B1C6DA4E1002A2016 /* ABKit.h in Headers */ = {isa = PBXBuildFile; fileRef = 3D10CF2A1C6DA4E1002A2016 /* ABKit.h */; settings = {ATTRIBUTES = (Public, ); }; };
3D10CF321C6DA4E1002A2016 /* ABKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 3D10CF271C6DA4E1002A2016 /* ABKit.framework */; };
3D2CCB0C1C7FDDC200152924 /* ConditionalTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3D2CCB0B1C7FDDC200152924 /* ConditionalTest.swift */; };
@@ -22,6 +21,7 @@
53D5F9B01C6DCE64004E832B /* VersionWeightSpec.swift in Sources */ = {isa = PBXBuildFile; fileRef = 53D5F9AF1C6DCE64004E832B /* VersionWeightSpec.swift */; };
53D5F9B21C6DD149004E832B /* NSUserDefaults+RandomNumberRepositorySpec.swift in Sources */ = {isa = PBXBuildFile; fileRef = 53D5F9B11C6DD149004E832B /* NSUserDefaults+RandomNumberRepositorySpec.swift */; };
53DC27A11C6DAED20040005E /* SplitTestSpec.swift in Sources */ = {isa = PBXBuildFile; fileRef = 53DC27A01C6DAED20040005E /* SplitTestSpec.swift */; };
+ 636AEC5AB4BB96DA01157CB0 /* Pods_ABKitTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E9EE4E2FF6203125D03620BC /* Pods_ABKitTests.framework */; };
/* End PBXBuildFile section */
/* Begin PBXContainerItemProxy section */
@@ -35,8 +35,6 @@
/* End PBXContainerItemProxy section */
/* Begin PBXFileReference section */
- 1030AAA5A25025EFD4FDF524 /* Pods-ABKitTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-ABKitTests.debug.xcconfig"; path = "Pods/Target Support Files/Pods-ABKitTests/Pods-ABKitTests.debug.xcconfig"; sourceTree = ""; };
- 22E564495A2765E422B3B15D /* Pods_ABKitTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_ABKitTests.framework; sourceTree = BUILT_PRODUCTS_DIR; };
3D10CF271C6DA4E1002A2016 /* ABKit.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = ABKit.framework; sourceTree = BUILT_PRODUCTS_DIR; };
3D10CF2A1C6DA4E1002A2016 /* ABKit.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ABKit.h; sourceTree = ""; };
3D10CF2C1C6DA4E1002A2016 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; };
@@ -51,10 +49,12 @@
3DD4E6661C6DAA190089473B /* Version.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Version.swift; sourceTree = ""; };
3DD4E66A1C6DAD410089473B /* RandomNumberRepository.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = RandomNumberRepository.swift; sourceTree = ""; };
3DD4E66C1C6DAE4A0089473B /* NSUserDefaults+RandomNumberRepository.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "NSUserDefaults+RandomNumberRepository.swift"; sourceTree = ""; };
- 4BFA0C4A40C2D2B016305DBC /* Pods-ABKitTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-ABKitTests.release.xcconfig"; path = "Pods/Target Support Files/Pods-ABKitTests/Pods-ABKitTests.release.xcconfig"; sourceTree = ""; };
53D5F9AF1C6DCE64004E832B /* VersionWeightSpec.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = VersionWeightSpec.swift; sourceTree = ""; };
53D5F9B11C6DD149004E832B /* NSUserDefaults+RandomNumberRepositorySpec.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "NSUserDefaults+RandomNumberRepositorySpec.swift"; sourceTree = ""; };
53DC27A01C6DAED20040005E /* SplitTestSpec.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SplitTestSpec.swift; sourceTree = ""; };
+ 84F219074146D56A2B39827F /* Pods-ABKitTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-ABKitTests.release.xcconfig"; path = "Pods/Target Support Files/Pods-ABKitTests/Pods-ABKitTests.release.xcconfig"; sourceTree = ""; };
+ A4DB337A4EAFCC0153FCF40A /* Pods-ABKitTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-ABKitTests.debug.xcconfig"; path = "Pods/Target Support Files/Pods-ABKitTests/Pods-ABKitTests.debug.xcconfig"; sourceTree = ""; };
+ E9EE4E2FF6203125D03620BC /* Pods_ABKitTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_ABKitTests.framework; sourceTree = BUILT_PRODUCTS_DIR; };
/* End PBXFileReference section */
/* Begin PBXFrameworksBuildPhase section */
@@ -70,21 +70,38 @@
buildActionMask = 2147483647;
files = (
3D10CF321C6DA4E1002A2016 /* ABKit.framework in Frameworks */,
- 38EF8B652AF26F2465387A33 /* Pods_ABKitTests.framework in Frameworks */,
+ 636AEC5AB4BB96DA01157CB0 /* Pods_ABKitTests.framework in Frameworks */,
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXFrameworksBuildPhase section */
/* Begin PBXGroup section */
+ 2471542489B36CF9BC805F81 /* Frameworks */ = {
+ isa = PBXGroup;
+ children = (
+ E9EE4E2FF6203125D03620BC /* Pods_ABKitTests.framework */,
+ );
+ name = Frameworks;
+ sourceTree = "";
+ };
+ 3AD11926FCE5B3F141A64AFE /* Pods */ = {
+ isa = PBXGroup;
+ children = (
+ A4DB337A4EAFCC0153FCF40A /* Pods-ABKitTests.debug.xcconfig */,
+ 84F219074146D56A2B39827F /* Pods-ABKitTests.release.xcconfig */,
+ );
+ name = Pods;
+ sourceTree = "";
+ };
3D10CF1D1C6DA4E1002A2016 = {
isa = PBXGroup;
children = (
3D10CF291C6DA4E1002A2016 /* ABKit */,
3D10CF351C6DA4E1002A2016 /* ABKitTests */,
3D10CF281C6DA4E1002A2016 /* Products */,
- B065F1B0026A1DD49EE95394 /* Pods */,
- 4032D80C528A3D639DC536D5 /* Frameworks */,
+ 3AD11926FCE5B3F141A64AFE /* Pods */,
+ 2471542489B36CF9BC805F81 /* Frameworks */,
);
sourceTree = "";
};
@@ -134,23 +151,6 @@
path = Codes;
sourceTree = "";
};
- 4032D80C528A3D639DC536D5 /* Frameworks */ = {
- isa = PBXGroup;
- children = (
- 22E564495A2765E422B3B15D /* Pods_ABKitTests.framework */,
- );
- name = Frameworks;
- sourceTree = "";
- };
- B065F1B0026A1DD49EE95394 /* Pods */ = {
- isa = PBXGroup;
- children = (
- 1030AAA5A25025EFD4FDF524 /* Pods-ABKitTests.debug.xcconfig */,
- 4BFA0C4A40C2D2B016305DBC /* Pods-ABKitTests.release.xcconfig */,
- );
- name = Pods;
- sourceTree = "";
- };
/* End PBXGroup section */
/* Begin PBXHeadersBuildPhase section */
@@ -187,12 +187,12 @@
isa = PBXNativeTarget;
buildConfigurationList = 3D10CF3E1C6DA4E1002A2016 /* Build configuration list for PBXNativeTarget "ABKitTests" */;
buildPhases = (
- E25764AB338FE1DB92D00F7C /* Check Pods Manifest.lock */,
+ E6ABEDE5DC97FC4FF3F23325 /* [CP] Check Pods Manifest.lock */,
3D10CF2D1C6DA4E1002A2016 /* Sources */,
3D10CF2E1C6DA4E1002A2016 /* Frameworks */,
3D10CF2F1C6DA4E1002A2016 /* Resources */,
- 046228D421FEC92C198AC274 /* Embed Pods Frameworks */,
- B0D2480D98990ACCDC21F66F /* Copy Pods Resources */,
+ C9D4DA1A5C5673CA530B7419 /* [CP] Embed Pods Frameworks */,
+ AFE8944335842B21C49949E5 /* [CP] Copy Pods Resources */,
);
buildRules = (
);
@@ -216,9 +216,11 @@
TargetAttributes = {
3D10CF261C6DA4E1002A2016 = {
CreatedOnToolsVersion = 7.2;
+ LastSwiftMigration = 0900;
};
3D10CF301C6DA4E1002A2016 = {
CreatedOnToolsVersion = 7.2;
+ LastSwiftMigration = 0900;
};
};
};
@@ -258,49 +260,57 @@
/* End PBXResourcesBuildPhase section */
/* Begin PBXShellScriptBuildPhase section */
- 046228D421FEC92C198AC274 /* Embed Pods Frameworks */ = {
+ AFE8944335842B21C49949E5 /* [CP] Copy Pods Resources */ = {
isa = PBXShellScriptBuildPhase;
buildActionMask = 2147483647;
files = (
);
inputPaths = (
);
- name = "Embed Pods Frameworks";
+ name = "[CP] Copy Pods Resources";
outputPaths = (
);
runOnlyForDeploymentPostprocessing = 0;
shellPath = /bin/sh;
- shellScript = "\"${SRCROOT}/Pods/Target Support Files/Pods-ABKitTests/Pods-ABKitTests-frameworks.sh\"\n";
+ shellScript = "\"${SRCROOT}/Pods/Target Support Files/Pods-ABKitTests/Pods-ABKitTests-resources.sh\"\n";
showEnvVarsInLog = 0;
};
- B0D2480D98990ACCDC21F66F /* Copy Pods Resources */ = {
+ C9D4DA1A5C5673CA530B7419 /* [CP] Embed Pods Frameworks */ = {
isa = PBXShellScriptBuildPhase;
buildActionMask = 2147483647;
files = (
);
inputPaths = (
+ "${SRCROOT}/Pods/Target Support Files/Pods-ABKitTests/Pods-ABKitTests-frameworks.sh",
+ "${BUILT_PRODUCTS_DIR}/Nimble/Nimble.framework",
+ "${BUILT_PRODUCTS_DIR}/Quick/Quick.framework",
);
- name = "Copy Pods Resources";
+ name = "[CP] Embed Pods Frameworks";
outputPaths = (
+ "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/Nimble.framework",
+ "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/Quick.framework",
);
runOnlyForDeploymentPostprocessing = 0;
shellPath = /bin/sh;
- shellScript = "\"${SRCROOT}/Pods/Target Support Files/Pods-ABKitTests/Pods-ABKitTests-resources.sh\"\n";
+ shellScript = "\"${SRCROOT}/Pods/Target Support Files/Pods-ABKitTests/Pods-ABKitTests-frameworks.sh\"\n";
showEnvVarsInLog = 0;
};
- E25764AB338FE1DB92D00F7C /* Check Pods Manifest.lock */ = {
+ E6ABEDE5DC97FC4FF3F23325 /* [CP] Check Pods Manifest.lock */ = {
isa = PBXShellScriptBuildPhase;
buildActionMask = 2147483647;
files = (
);
inputPaths = (
+ "${PODS_PODFILE_DIR_PATH}/Podfile.lock",
+ "${PODS_ROOT}/Manifest.lock",
);
- name = "Check Pods Manifest.lock";
+ name = "[CP] Check Pods Manifest.lock";
outputPaths = (
+ "$(DERIVED_FILE_DIR)/Pods-ABKitTests-checkManifestLockResult.txt",
);
runOnlyForDeploymentPostprocessing = 0;
shellPath = /bin/sh;
- shellScript = "diff \"${PODS_ROOT}/../Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [[ $? != 0 ]] ; then\n cat << EOM\nerror: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\nEOM\n exit 1\nfi\n";
+ shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n";
showEnvVarsInLog = 0;
};
/* End PBXShellScriptBuildPhase section */
@@ -447,6 +457,8 @@
PRODUCT_NAME = "$(TARGET_NAME)";
SKIP_INSTALL = YES;
SWIFT_OPTIMIZATION_LEVEL = "-Onone";
+ SWIFT_SWIFT3_OBJC_INFERENCE = On;
+ SWIFT_VERSION = 4.0;
};
name = Debug;
};
@@ -464,28 +476,34 @@
PRODUCT_BUNDLE_IDENTIFIER = "jp.co.recruit-mp.ABKit";
PRODUCT_NAME = "$(TARGET_NAME)";
SKIP_INSTALL = YES;
+ SWIFT_SWIFT3_OBJC_INFERENCE = On;
+ SWIFT_VERSION = 4.0;
};
name = Release;
};
3D10CF3F1C6DA4E1002A2016 /* Debug */ = {
isa = XCBuildConfiguration;
- baseConfigurationReference = 1030AAA5A25025EFD4FDF524 /* Pods-ABKitTests.debug.xcconfig */;
+ baseConfigurationReference = A4DB337A4EAFCC0153FCF40A /* Pods-ABKitTests.debug.xcconfig */;
buildSettings = {
INFOPLIST_FILE = ABKitTests/Info.plist;
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
PRODUCT_BUNDLE_IDENTIFIER = "jp.co.recruit-mp.ABKitTests";
PRODUCT_NAME = "$(TARGET_NAME)";
+ SWIFT_SWIFT3_OBJC_INFERENCE = On;
+ SWIFT_VERSION = 4.0;
};
name = Debug;
};
3D10CF401C6DA4E1002A2016 /* Release */ = {
isa = XCBuildConfiguration;
- baseConfigurationReference = 4BFA0C4A40C2D2B016305DBC /* Pods-ABKitTests.release.xcconfig */;
+ baseConfigurationReference = 84F219074146D56A2B39827F /* Pods-ABKitTests.release.xcconfig */;
buildSettings = {
INFOPLIST_FILE = ABKitTests/Info.plist;
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
PRODUCT_BUNDLE_IDENTIFIER = "jp.co.recruit-mp.ABKitTests";
PRODUCT_NAME = "$(TARGET_NAME)";
+ SWIFT_SWIFT3_OBJC_INFERENCE = On;
+ SWIFT_VERSION = 4.0;
};
name = Release;
};
diff --git a/ABKit/Codes/ConditionalTest.swift b/ABKit/Codes/ConditionalTest.swift
index 803fc74..7d40de5 100644
--- a/ABKit/Codes/ConditionalTest.swift
+++ b/ABKit/Codes/ConditionalTest.swift
@@ -6,23 +6,23 @@
// Copyright © 2016 Recruit Marketing Partners Co.,Ltd. All rights reserved.
//
-public class ConditionalTest {
- public let name: String
- public let defaultVersion: Version
+open class ConditionalTest {
+ open let name: String
+ open let defaultVersion: Version
- private var versions: [ConditionalVersion] = []
+ fileprivate var versions: [ConditionalVersion] = []
public init(name: String, defaultVersion: Version) {
self.name = name
self.defaultVersion = defaultVersion
}
- public func addVersion(version: Version, condition: (T) -> Bool) {
+ open func addVersion(_ version: Version, condition: @escaping (T) -> Bool) {
let conditionalVersion = ConditionalVersion(name: version.name, behavior: version.behavior, condition: condition)
versions.append(conditionalVersion)
}
- public func run(value: T) {
+ open func run(_ value: T) {
var isRun = false
for version in versions {
if version.condition(value) {
diff --git a/ABKit/Codes/ConditionalVersion.swift b/ABKit/Codes/ConditionalVersion.swift
index 9dc07ba..500b648 100644
--- a/ABKit/Codes/ConditionalVersion.swift
+++ b/ABKit/Codes/ConditionalVersion.swift
@@ -7,9 +7,9 @@
//
class ConditionalVersion: Version {
- let condition: T -> Bool
+ let condition: (T) -> Bool
- init(name: String, behavior: Version -> Void, condition: T -> Bool) {
+ init(name: String, behavior: @escaping (Version) -> Void, condition: @escaping (T) -> Bool) {
self.condition = condition
super.init(name: name, behavior: behavior)
}
diff --git a/ABKit/Codes/NSUserDefaults+RandomNumberRepository.swift b/ABKit/Codes/NSUserDefaults+RandomNumberRepository.swift
index ec8552b..99b5601 100644
--- a/ABKit/Codes/NSUserDefaults+RandomNumberRepository.swift
+++ b/ABKit/Codes/NSUserDefaults+RandomNumberRepository.swift
@@ -6,21 +6,21 @@
// Copyright © 2016 Recruit Marketing Partners Co.,Ltd. All rights reserved.
//
-extension NSUserDefaults: RandomNumberRepository {
- public func ab_getRandomNumberWithKey(key: String) -> Int {
- var randomNumber = integerForKey(key)
+extension UserDefaults: RandomNumberRepository {
+ public func ab_getRandomNumberWithKey(_ key: String) -> Int {
+ var randomNumber = integer(forKey: key)
if randomNumber == 0 {
randomNumber = generateRandomNumber()
- setInteger(randomNumber, forKey: key)
+ set(randomNumber, forKey: key)
}
return randomNumber
}
- public func ab_setRandomNumber(randomNumber: Int, key: String) {
- setInteger(randomNumber, forKey: key)
+ public func ab_setRandomNumber(_ randomNumber: Int, key: String) {
+ set(randomNumber, forKey: key)
}
- public func ab_deleteRandomNumberWithKey(key: String) {
- removeObjectForKey(key)
+ public func ab_deleteRandomNumberWithKey(_ key: String) {
+ removeObject(forKey: key)
}
}
diff --git a/ABKit/Codes/RandomNumberRepository.swift b/ABKit/Codes/RandomNumberRepository.swift
index 41642fe..ead6bed 100644
--- a/ABKit/Codes/RandomNumberRepository.swift
+++ b/ABKit/Codes/RandomNumberRepository.swift
@@ -9,9 +9,9 @@
import Foundation
public protocol RandomNumberRepository {
- func ab_getRandomNumberWithKey(key: String) -> Int
- func ab_setRandomNumber(randomNumber: Int, key: String)
- func ab_deleteRandomNumberWithKey(key: String)
+ func ab_getRandomNumberWithKey(_ key: String) -> Int
+ func ab_setRandomNumber(_ randomNumber: Int, key: String)
+ func ab_deleteRandomNumberWithKey(_ key: String)
}
extension RandomNumberRepository {
diff --git a/ABKit/Codes/SplitTest.swift b/ABKit/Codes/SplitTest.swift
index cbb57ef..65f9aea 100644
--- a/ABKit/Codes/SplitTest.swift
+++ b/ABKit/Codes/SplitTest.swift
@@ -8,12 +8,12 @@
import Foundation
-public class SplitTest {
+open class SplitTest {
var versionWeights: [VersionWeight] = []
- private let name: String
- private let defaultVersion: Version
- private let randomNumberRepository: RandomNumberRepository
+ fileprivate let name: String
+ fileprivate let defaultVersion: Version
+ fileprivate let randomNumberRepository: RandomNumberRepository
public init(name: String, defaultVersion: Version, randomNumberRepository: RandomNumberRepository) {
self.name = name
@@ -22,16 +22,16 @@ public class SplitTest {
}
public convenience init(name: String, defaultVersion: Version) {
- let defaultRepository = NSUserDefaults.standardUserDefaults()
- self.init(name: name, defaultVersion: defaultVersion, randomNumberRepository: defaultRepository)
+ let defaultRepository = UserDefaults.standard
+ self.init(name: name, defaultVersion: defaultVersion, randomNumberRepository: defaultRepository as RandomNumberRepository)
}
- public func addVersion(version: Version, weight: Float) {
+ open func addVersion(_ version: Version, weight: Float) {
let versionWeight = VersionWeight(version: version, weight: Int(weight * 100))
versionWeights.append(versionWeight)
}
- public func run() {
+ open func run() {
assertExcessWeight()
calculateWeightRanges()
let randomNumber = randomNumberRepository.ab_getRandomNumberWithKey("ABKit-\(name)")
@@ -39,22 +39,22 @@ public class SplitTest {
version.behavior(version)
}
- public func setRandomNumber(randomNumber: Int) {
+ open func setRandomNumber(_ randomNumber: Int) {
randomNumberRepository.ab_setRandomNumber(randomNumber, key: "ABKit-\(name)")
}
- public func deleteRandomNumber() {
+ open func deleteRandomNumber() {
randomNumberRepository.ab_deleteRandomNumberWithKey("ABKit-\(name)")
}
- private func assertExcessWeight() {
+ fileprivate func assertExcessWeight() {
let totalWeight = versionWeights.reduce(0) { $0 + $1.weight }
assert(totalWeight <= 100, "Total weight (\(totalWeight / 100)) must be below 1.0")
}
- private func calculateWeightRanges() {
+ fileprivate func calculateWeightRanges() {
var weightIndex = 0
- for (index, versionWeight) in versionWeights.enumerate() {
+ for (index, versionWeight) in versionWeights.enumerated() {
let min = weightIndex
let max = weightIndex + versionWeight.weight
versionWeights[index].weightRange = min.. Version {
+ fileprivate func selectVersionByRandomNumber(_ randomNumber: Int) -> Version {
let versions = versionWeights.filter { $0.contains(randomNumber) }.map { $0.version }
return versions.first ?? defaultVersion
}
diff --git a/ABKit/Codes/Version.swift b/ABKit/Codes/Version.swift
index 46ff4f2..623ef9e 100644
--- a/ABKit/Codes/Version.swift
+++ b/ABKit/Codes/Version.swift
@@ -6,11 +6,11 @@
// Copyright © 2016 Recruit Marketing Partners Co.,Ltd. All rights reserved.
//
-public class Version {
- public let name: String
- let behavior: Version -> Void
+open class Version {
+ open let name: String
+ let behavior: (Version) -> Void
- public init(name: String, behavior: Version -> Void) {
+ public init(name: String, behavior: @escaping (Version) -> Void) {
self.name = name
self.behavior = behavior
}
diff --git a/ABKit/Codes/VersionWeight.swift b/ABKit/Codes/VersionWeight.swift
index d075736..2b40a16 100644
--- a/ABKit/Codes/VersionWeight.swift
+++ b/ABKit/Codes/VersionWeight.swift
@@ -9,14 +9,14 @@
class VersionWeight {
let version: Version
let weight: Int
- var weightRange: Range = 0..<100
+ var weightRange: CountableRange = 0..<100
init(version: Version, weight: Int) {
self.version = version
self.weight = weight
}
- func contains(number: Int) -> Bool {
+ func contains(_ number: Int) -> Bool {
return weightRange.contains(number)
}
}
diff --git a/ABKitTests/NSUserDefaults+RandomNumberRepositorySpec.swift b/ABKitTests/NSUserDefaults+RandomNumberRepositorySpec.swift
index e542a51..b8414c9 100644
--- a/ABKitTests/NSUserDefaults+RandomNumberRepositorySpec.swift
+++ b/ABKitTests/NSUserDefaults+RandomNumberRepositorySpec.swift
@@ -16,7 +16,7 @@ class NSUserDefaultsRandomNumberRepositorySpec: QuickSpec {
describe("NSUserDefaults+RandomNumberRepository") {
it("ab_getRandomNumberWithKey") {
- let defaults = NSUserDefaults.standardUserDefaults()
+ let defaults = UserDefaults.standard
let random = defaults.ab_getRandomNumberWithKey("test")
expect(random).to(beGreaterThanOrEqualTo(0))
expect(random).to(beLessThanOrEqualTo(100))
diff --git a/ABKitTests/SplitTestSpec.swift b/ABKitTests/SplitTestSpec.swift
index 7317734..a09e9fc 100644
--- a/ABKitTests/SplitTestSpec.swift
+++ b/ABKitTests/SplitTestSpec.swift
@@ -76,13 +76,13 @@ class SplitTestSpec: QuickSpec {
}
class TestRandomNumberRepository: RandomNumberRepository {
- func ab_getRandomNumberWithKey(key: String) -> Int {
+ func ab_getRandomNumberWithKey(_ key: String) -> Int {
return 1
}
- func ab_setRandomNumber(randomNumber: Int, key: String) {
+ func ab_setRandomNumber(_ randomNumber: Int, key: String) {
}
- func ab_deleteRandomNumberWithKey(key: String) {
+ func ab_deleteRandomNumberWithKey(_ key: String) {
}
}
diff --git a/Podfile b/Podfile
index 0ea932e..5e3fcaa 100644
--- a/Podfile
+++ b/Podfile
@@ -3,8 +3,8 @@
use_frameworks!
def testing_pods
- pod 'Quick', '~> 0.9.0'
- pod 'Nimble', '3.0.0'
+ pod 'Quick', '~> 1.2.0'
+ pod 'Nimble', '7.0.2'
end
target 'ABKitTests' do
diff --git a/Podfile.lock b/Podfile.lock
index 2a27676..5cac8a6 100644
--- a/Podfile.lock
+++ b/Podfile.lock
@@ -1,13 +1,15 @@
PODS:
- - Nimble (3.0.0)
- - Quick (0.9.1)
+ - Nimble (7.0.2)
+ - Quick (1.2.0)
DEPENDENCIES:
- - Nimble (= 3.0.0)
- - Quick (~> 0.9.0)
+ - Nimble (= 7.0.2)
+ - Quick (~> 1.2.0)
SPEC CHECKSUMS:
- Nimble: 4c353d43735b38b545cbb4cb91504588eb5de926
- Quick: a5221fc21788b6aeda934805e68b061839bc3165
+ Nimble: bfe1f814edabba69ff145cb1283e04ed636a67f2
+ Quick: 58d203b1c5e27fff7229c4c1ae445ad7069a7a08
-COCOAPODS: 0.39.0
+PODFILE CHECKSUM: 2b2bdb038742f71c287eaee01b592732b249696b
+
+COCOAPODS: 1.3.1