diff --git a/PHP Monitor.xcodeproj/project.pbxproj b/PHP Monitor.xcodeproj/project.pbxproj index 307ab11..437d0e6 100644 --- a/PHP Monitor.xcodeproj/project.pbxproj +++ b/PHP Monitor.xcodeproj/project.pbxproj @@ -68,7 +68,7 @@ C42C49DB27C2806F0074ABAC /* MainMenu+FixMyValet.swift in Sources */ = {isa = PBXBuildFile; fileRef = C42C49DA27C2806F0074ABAC /* MainMenu+FixMyValet.swift */; }; C42CFB1627DFDE7900862737 /* nicoverbruggen.test in Resources */ = {isa = PBXBuildFile; fileRef = C42CFB1527DFDE7900862737 /* nicoverbruggen.test */; }; C42CFB1827DFDFDC00862737 /* nicoverbruggen_isolated.test in Resources */ = {isa = PBXBuildFile; fileRef = C42CFB1727DFDFDC00862737 /* nicoverbruggen_isolated.test */; }; - C42CFB1A27DFE8BD00862737 /* NginxParserTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = C42CFB1927DFE8BD00862737 /* NginxParserTest.swift */; }; + C42CFB1A27DFE8BD00862737 /* NginxConfigParserTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = C42CFB1927DFE8BD00862737 /* NginxConfigParserTest.swift */; }; C43603A0275E67610028EFC6 /* AppDelegate+Notifications.swift in Sources */ = {isa = PBXBuildFile; fileRef = C436039F275E67610028EFC6 /* AppDelegate+Notifications.swift */; }; C43603A1275E67610028EFC6 /* AppDelegate+Notifications.swift in Sources */ = {isa = PBXBuildFile; fileRef = C436039F275E67610028EFC6 /* AppDelegate+Notifications.swift */; }; C43A8A1A25D9CD1000591B77 /* Utility.swift in Sources */ = {isa = PBXBuildFile; fileRef = C43A8A1925D9CD1000591B77 /* Utility.swift */; }; @@ -151,6 +151,8 @@ C4CE3BBA27B31F670086CA49 /* ComposerWindow.swift in Sources */ = {isa = PBXBuildFile; fileRef = C4CE3BB927B31F670086CA49 /* ComposerWindow.swift */; }; C4CE3BBB27B324230086CA49 /* MainMenu+Switcher.swift in Sources */ = {isa = PBXBuildFile; fileRef = C4CE3BB727B31F2E0086CA49 /* MainMenu+Switcher.swift */; }; C4CE3BBC27B324250086CA49 /* ComposerWindow.swift in Sources */ = {isa = PBXBuildFile; fileRef = C4CE3BB927B31F670086CA49 /* ComposerWindow.swift */; }; + C4D5CFCA27E0F9CD00035329 /* NginxConfigParser.swift in Sources */ = {isa = PBXBuildFile; fileRef = C4D5CFC927E0F9CD00035329 /* NginxConfigParser.swift */; }; + C4D5CFCB27E0F9CD00035329 /* NginxConfigParser.swift in Sources */ = {isa = PBXBuildFile; fileRef = C4D5CFC927E0F9CD00035329 /* NginxConfigParser.swift */; }; C4D8016622B1584700C6DA1B /* Startup.swift in Sources */ = {isa = PBXBuildFile; fileRef = C4D8016522B1584700C6DA1B /* Startup.swift */; }; C4D89BC62783C99400A02B68 /* ComposerJson.swift in Sources */ = {isa = PBXBuildFile; fileRef = C4D89BC52783C99400A02B68 /* ComposerJson.swift */; }; C4D9ADBF277610E1007277F4 /* PhpSwitcher.swift in Sources */ = {isa = PBXBuildFile; fileRef = C4D9ADBE277610E1007277F4 /* PhpSwitcher.swift */; }; @@ -259,7 +261,7 @@ C42C49DA27C2806F0074ABAC /* MainMenu+FixMyValet.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "MainMenu+FixMyValet.swift"; sourceTree = ""; }; C42CFB1527DFDE7900862737 /* nicoverbruggen.test */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = nicoverbruggen.test; sourceTree = ""; }; C42CFB1727DFDFDC00862737 /* nicoverbruggen_isolated.test */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = nicoverbruggen_isolated.test; sourceTree = ""; }; - C42CFB1927DFE8BD00862737 /* NginxParserTest.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NginxParserTest.swift; sourceTree = ""; }; + C42CFB1927DFE8BD00862737 /* NginxConfigParserTest.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NginxConfigParserTest.swift; sourceTree = ""; }; C436039F275E67610028EFC6 /* AppDelegate+Notifications.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "AppDelegate+Notifications.swift"; sourceTree = ""; }; C43A8A1925D9CD1000591B77 /* Utility.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Utility.swift; sourceTree = ""; }; C43A8A1F25D9D1D700591B77 /* brew.json */ = {isa = PBXFileReference; lastKnownFileType = text.json; path = brew.json; sourceTree = ""; }; @@ -310,6 +312,7 @@ C4CCBA6B275C567B008C7055 /* PMWindowController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PMWindowController.swift; sourceTree = ""; }; C4CE3BB727B31F2E0086CA49 /* MainMenu+Switcher.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "MainMenu+Switcher.swift"; sourceTree = ""; }; C4CE3BB927B31F670086CA49 /* ComposerWindow.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ComposerWindow.swift; sourceTree = ""; }; + C4D5CFC927E0F9CD00035329 /* NginxConfigParser.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NginxConfigParser.swift; sourceTree = ""; }; C4D8016522B1584700C6DA1B /* Startup.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Startup.swift; sourceTree = ""; }; C4D89BC52783C99400A02B68 /* ComposerJson.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ComposerJson.swift; sourceTree = ""; }; C4D9ADBE277610E1007277F4 /* PhpSwitcher.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PhpSwitcher.swift; sourceTree = ""; }; @@ -590,6 +593,7 @@ children = ( C4AF9F792754499000D44ED0 /* Valet.swift */, C4E4404527C56F4700D225E1 /* ValetSite.swift */, + C4D5CFC927E0F9CD00035329 /* NginxConfigParser.swift */, ); path = Valet; sourceTree = ""; @@ -647,7 +651,7 @@ C4AF9F76275447F100D44ED0 /* ValetConfigParserTest.swift */, C4F780AD25D80B37000DBC97 /* ExtensionParserTest.swift */, C43A8A2325D9D20D00591B77 /* BrewJsonParserTest.swift */, - C42CFB1927DFE8BD00862737 /* NginxParserTest.swift */, + C42CFB1927DFE8BD00862737 /* NginxConfigParserTest.swift */, ); path = Parsers; sourceTree = ""; @@ -958,6 +962,7 @@ C476FF9822B0DD830098105B /* Alert.swift in Sources */, C474B00624C0E98C00066A22 /* LocalNotification.swift in Sources */, C48D0C9625CC80B100CC7490 /* HeaderView.swift in Sources */, + C4D5CFCA27E0F9CD00035329 /* NginxConfigParser.swift in Sources */, C4CE3BBA27B31F670086CA49 /* ComposerWindow.swift in Sources */, C4D9ADC8277611A0007277F4 /* InternalSwitcher.swift in Sources */, C4080FFA27BD956700BF2C6B /* BetterAlertVC.swift in Sources */, @@ -992,6 +997,7 @@ C4080FFB27BD956700BF2C6B /* BetterAlertVC.swift in Sources */, C4F780CC25D80B75000DBC97 /* ActivePhpInstallation.swift in Sources */, C4F780B125D80B4D000DBC97 /* PhpExtension.swift in Sources */, + C4D5CFCB27E0F9CD00035329 /* NginxConfigParser.swift in Sources */, C4068CA827B07A1300544CD5 /* SelectPreferenceView.swift in Sources */, C4F780CE25D80B75000DBC97 /* LocalNotification.swift in Sources */, C40C7F2927721FF600DDDCDC /* ActivePhpInstallation+Checks.swift in Sources */, @@ -1042,7 +1048,7 @@ C44C198E276E3A1C0072762D /* ProgressWindow.swift in Sources */, C415938027A1B54F00D2E1B7 /* PhpFrameworks.swift in Sources */, C4D9ADC9277611A0007277F4 /* InternalSwitcher.swift in Sources */, - C42CFB1A27DFE8BD00862737 /* NginxParserTest.swift in Sources */, + C42CFB1A27DFE8BD00862737 /* NginxConfigParserTest.swift in Sources */, C4F30B0B278E203C00755FCE /* MainMenu+Startup.swift in Sources */, C40B24F227A310770018C7D2 /* Events.swift in Sources */, C4F30B0A278E1A1A00755FCE /* ComposerJson.swift in Sources */, diff --git a/assets/affinity/icons.afdesign b/assets/affinity/icons.afdesign index c976af6..dd286e0 100644 Binary files a/assets/affinity/icons.afdesign and b/assets/affinity/icons.afdesign differ diff --git a/phpmon-tests/Parsers/NginxParserTest.swift b/phpmon-tests/Parsers/NginxConfigParserTest.swift similarity index 58% rename from phpmon-tests/Parsers/NginxParserTest.swift rename to phpmon-tests/Parsers/NginxConfigParserTest.swift index 105ad77..8d31048 100644 --- a/phpmon-tests/Parsers/NginxParserTest.swift +++ b/phpmon-tests/Parsers/NginxConfigParserTest.swift @@ -1,5 +1,5 @@ // -// NginxParserTest.swift +// NginxConfigParserTest.swift // phpmon-tests // // Created by Nico Verbruggen on 29/11/2021. @@ -8,7 +8,7 @@ import XCTest -class NginxParserTest: XCTestCase { +class NginxConfigParserTest: XCTestCase { static var regularUrl: URL { return Bundle(for: Self.self).url(forResource: "nicoverbruggen", withExtension: "test")! @@ -19,8 +19,14 @@ class NginxParserTest: XCTestCase { } func testCanDetermineIsolation() throws { - XCTAssertNil(ValetSite.isolatedVersion(NginxParserTest.regularUrl.path)) - XCTAssertEqual("8.1", ValetSite.isolatedVersion(NginxParserTest.isolatedUrl.path)) + XCTAssertNil( + NginxConfigParser(filePath: NginxConfigParserTest.regularUrl.path).isolatedVersion() + ) + + XCTAssertEqual( + "8.1", + NginxConfigParser(filePath: NginxConfigParserTest.isolatedUrl.path).isolatedVersion() + ) } } diff --git a/phpmon/Domain/Integrations/Valet/NginxConfigParser.swift b/phpmon/Domain/Integrations/Valet/NginxConfigParser.swift new file mode 100644 index 0000000..0756a65 --- /dev/null +++ b/phpmon/Domain/Integrations/Valet/NginxConfigParser.swift @@ -0,0 +1,39 @@ +// +// NginxConfigParser.swift +// PHP Monitor +// +// Created by Nico Verbruggen on 15/03/2022. +// Copyright © 2022 Nico Verbruggen. All rights reserved. +// + +import Foundation + +class NginxConfigParser { + + var contents: String! + + init(filePath: String) { + self.contents = try! String(contentsOfFile: filePath) + } + + public func isolatedVersion() -> String? { + let regex = try! NSRegularExpression( + pattern: #"(ISOLATED_PHP_VERSION=(php@)?)((?\d)(.)?(?\d))"#, + options: [] + ) + + let match = regex.firstMatch(in: contents, range: NSMakeRange(0, contents.count)) + + if match == nil { + return nil + } + + let majorRange = Range(match!.range(withName: "major"), in: contents)! + let minorRange = Range(match!.range(withName: "minor"), in: contents)! + + let major: String = contents[majorRange] + let minor: String = contents[minorRange] + + return "\(major).\(minor)" + } +} diff --git a/phpmon/Domain/Integrations/Valet/ValetSite.swift b/phpmon/Domain/Integrations/Valet/ValetSite.swift index b751cb6..c17cd9b 100644 --- a/phpmon/Domain/Integrations/Valet/ValetSite.swift +++ b/phpmon/Domain/Integrations/Valet/ValetSite.swift @@ -203,24 +203,9 @@ class ValetSite { // MARK: File Parsing - public static func isolatedVersion(_ file: String) -> String? { - if Filesystem.fileExists(file) && grepContains(file: file, query: "# ISOLATED_PHP_VERSION=") { - let regex = try! NSRegularExpression( - pattern: #"(ISOLATED_PHP_VERSION=(php@)?)((?\d)(.)?(?\d))"#, - options: [] - ) - - let fileContents = try! String(contentsOfFile: file) - - let match = regex.firstMatch(in: fileContents, range: NSMakeRange(0, fileContents.count)) - - let majorRange = Range(match!.range(withName: "major"), in: fileContents)! - let minorRange = Range(match!.range(withName: "minor"), in: fileContents)! - - let major: String = fileContents[majorRange] - let minor: String = fileContents[minorRange] - - return "\(major).\(minor)" + public static func isolatedVersion(_ filePath: String) -> String? { + if Filesystem.fileExists(filePath) { + return NginxConfigParser.init(filePath: filePath).isolatedVersion() } return nil