diff --git a/KuriDemo/Kuri.yml b/KuriDemo/Kuri.yml index ba03f26..0496b35 100644 --- a/KuriDemo/Kuri.yml +++ b/KuriDemo/Kuri.yml @@ -1,4 +1,4 @@ -DefaultTemplateDirectoryPath: ./KuriTemplate/ +DefaultTemplateDirectoryPath: .templates/KuriTemplate/ ProjectRootPath: ./ ProjectFileName: KuriDemo.xcodeproj GenerateRootPath: ./KuriDemo/ diff --git a/KuriDemo/KuriDemo.xcodeproj/project.pbxproj b/KuriDemo/KuriDemo.xcodeproj/project.pbxproj index 260752c..743bb3d 100644 --- a/KuriDemo/KuriDemo.xcodeproj/project.pbxproj +++ b/KuriDemo/KuriDemo.xcodeproj/project.pbxproj @@ -40,6 +40,7 @@ J4QXUUP0H88BEQ5F78PLJCS9 /* HogeUseCase.swift in Sources */ = {isa = PBXBuildFile; fileRef = ZGRWNTN8TDJ8TUKXMDRQOLB9 /* HogeUseCase.swift */; }; KA67GINSIV1LC97SDMI37XDF /* PiyoTranslator.swift in Sources */ = {isa = PBXBuildFile; fileRef = Z1CTBJE9GTGLY1I2HJFPB6BE /* PiyoTranslator.swift */; }; LCEVTGOH286TAOET53QBACR1 /* PiyoDataStore.swift in Sources */ = {isa = PBXBuildFile; fileRef = 57FBVZGRP03V8IY6PGH4S0OT /* PiyoDataStore.swift */; }; + LTJ981SDPE3TNX3R201QM3QS /* HogeHogeDynamicGenerateFilePath.swift in Sources */ = {isa = PBXBuildFile; fileRef = PQ5JEAIFBWC3V88T7NWBEIKE /* HogeHogeDynamicGenerateFilePath.swift */; }; ML4EFUYIGIJ5DZ8XWQT5E7SM /* PiyoTableViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8MEFM9QW3B181IE6HSTB8KZ4 /* PiyoTableViewCell.swift */; }; ODDIN2YDCIIWM3DIBRQFT6F1 /* HogeWireframe.swift in Sources */ = {isa = PBXBuildFile; fileRef = XNEBQPI9HE0M2AITC251LCPG /* HogeWireframe.swift */; }; P5PYEDZJG2Z0DW44KIE4K0FU /* FugaWireframe.swift in Sources */ = {isa = PBXBuildFile; fileRef = NK90RPQFCUJNWGHICIVW9ZM9 /* FugaWireframe.swift */; }; @@ -116,6 +117,7 @@ OA20QBGSZDSSQI2UC3DZ23T8 /* HogeViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = HogeViewController.swift; sourceTree = ""; }; OE4ZX4ZSISCR5ZNKMR72PNZK /* HogePresenter.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = HogePresenter.swift; sourceTree = ""; }; OOBOKU2OILY2WVLNQI5XQQ83 /* HogeDataStore.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = HogeDataStore.swift; sourceTree = ""; }; + PQ5JEAIFBWC3V88T7NWBEIKE /* HogeHogeDynamicGenerateFilePath.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = HogeHogeDynamicGenerateFilePath.swift; sourceTree = ""; }; QEM4X3DTKPGJS28F9531Q8LQ /* PiyoUseCase.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PiyoUseCase.swift; sourceTree = ""; }; R0ZWL75196MO0G7X61I561DY /* FugaRepository.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = FugaRepository.swift; sourceTree = ""; }; RDMKKI58T3FC0Y9DIFFCDC9C /* FugaCollectionViewController.storyboard */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.storyboard; path = FugaCollectionViewController.storyboard; sourceTree = ""; }; @@ -187,6 +189,7 @@ 6QEHK1RS5SPP75TS6ZN29UTQ /* View */, NO2Q7N0U8E7L0UDIBR7DWCEB /* Builder */, N82T550MCC6YBOTEL4GVA99B /* UseCase */, + XUBAC1MYOMKZANL2S3SHUIQ5 /* Hoge */, ); path = Hoge; sourceTree = ""; @@ -480,6 +483,14 @@ path = Presenter; sourceTree = ""; }; + XUBAC1MYOMKZANL2S3SHUIQ5 /* Hoge */ = { + isa = PBXGroup; + children = ( + PQ5JEAIFBWC3V88T7NWBEIKE /* HogeHogeDynamicGenerateFilePath.swift */, + ); + path = Hoge; + sourceTree = ""; + }; YEBDY0OV71KZ3GZ9DCMRZI96 /* View */ = { isa = PBXGroup; children = ( @@ -693,6 +704,7 @@ RUS35PKYW0IBU2Q51HWZNE8J /* FugaCollectionViewController.swift in Sources */, 1GOISMFREV12TGR7NU9AHCK9 /* FugaBuilder.swift in Sources */, 4PGJI10SW8WBZNC2TJO60MI8 /* FugaUseCase.swift in Sources */, + LTJ981SDPE3TNX3R201QM3QS /* HogeHogeDynamicGenerateFilePath.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; diff --git a/KuriDemo/KuriDemo.xcodeproj/project.xcworkspace/xcuserdata/hirose.xcuserdatad/UserInterfaceState.xcuserstate b/KuriDemo/KuriDemo.xcodeproj/project.xcworkspace/xcuserdata/hirose.xcuserdatad/UserInterfaceState.xcuserstate new file mode 100644 index 0000000..808f38a Binary files /dev/null and b/KuriDemo/KuriDemo.xcodeproj/project.xcworkspace/xcuserdata/hirose.xcuserdatad/UserInterfaceState.xcuserstate differ diff --git a/KuriDemo/KuriDemo.xcodeproj/xcuserdata/hirose.xcuserdatad/xcschemes/xcschememanagement.plist b/KuriDemo/KuriDemo.xcodeproj/xcuserdata/hirose.xcuserdatad/xcschemes/xcschememanagement.plist new file mode 100644 index 0000000..5de5980 --- /dev/null +++ b/KuriDemo/KuriDemo.xcodeproj/xcuserdata/hirose.xcuserdatad/xcschemes/xcschememanagement.plist @@ -0,0 +1,14 @@ + + + + + SchemeUserState + + KuriDemo.xcscheme + + orderHint + 0 + + + + diff --git a/KuriDemo/KuriDemo/Hoge/Hoge/HogeHogeDynamicGenerateFilePath.swift b/KuriDemo/KuriDemo/Hoge/Hoge/HogeHogeDynamicGenerateFilePath.swift new file mode 100644 index 0000000..dea9d64 --- /dev/null +++ b/KuriDemo/KuriDemo/Hoge/Hoge/HogeHogeDynamicGenerateFilePath.swift @@ -0,0 +1,11 @@ +// +// HogeDynamicGenerateFilePath +// Kuri +// +// Created by hirose on 2018/1/17. +// Copyright © 2018 hirose. All rights reserved. +// + +import UIKit + +print("HogeDynamicGenerateFilePath") diff --git a/KuriDemo/KuriTemplate/Builder/Builder.swift b/KuriDemo/templates/KuriTemplate/Builder/Builder.swift similarity index 100% rename from KuriDemo/KuriTemplate/Builder/Builder.swift rename to KuriDemo/templates/KuriTemplate/Builder/Builder.swift diff --git a/KuriDemo/KuriTemplate/DataStore/DataStore.swift b/KuriDemo/templates/KuriTemplate/DataStore/DataStore.swift similarity index 100% rename from KuriDemo/KuriTemplate/DataStore/DataStore.swift rename to KuriDemo/templates/KuriTemplate/DataStore/DataStore.swift diff --git a/KuriDemo/KuriTemplate/Entity/Entity.swift b/KuriDemo/templates/KuriTemplate/Entity/Entity.swift similarity index 100% rename from KuriDemo/KuriTemplate/Entity/Entity.swift rename to KuriDemo/templates/KuriTemplate/Entity/Entity.swift diff --git a/KuriDemo/KuriTemplate/Model/Model.swift b/KuriDemo/templates/KuriTemplate/Model/Model.swift similarity index 100% rename from KuriDemo/KuriTemplate/Model/Model.swift rename to KuriDemo/templates/KuriTemplate/Model/Model.swift diff --git a/KuriDemo/KuriTemplate/Presenter/Presenter.swift b/KuriDemo/templates/KuriTemplate/Presenter/Presenter.swift similarity index 100% rename from KuriDemo/KuriTemplate/Presenter/Presenter.swift rename to KuriDemo/templates/KuriTemplate/Presenter/Presenter.swift diff --git a/KuriDemo/KuriTemplate/Repository/Repository.swift b/KuriDemo/templates/KuriTemplate/Repository/Repository.swift similarity index 100% rename from KuriDemo/KuriTemplate/Repository/Repository.swift rename to KuriDemo/templates/KuriTemplate/Repository/Repository.swift diff --git a/KuriDemo/KuriTemplate/Translator/Translator.swift b/KuriDemo/templates/KuriTemplate/Translator/Translator.swift similarity index 100% rename from KuriDemo/KuriTemplate/Translator/Translator.swift rename to KuriDemo/templates/KuriTemplate/Translator/Translator.swift diff --git a/KuriDemo/KuriTemplate/UseCase/UseCase.swift b/KuriDemo/templates/KuriTemplate/UseCase/UseCase.swift similarity index 100% rename from KuriDemo/KuriTemplate/UseCase/UseCase.swift rename to KuriDemo/templates/KuriTemplate/UseCase/UseCase.swift diff --git a/KuriDemo/KuriTemplate/View/ViewController.storyboard b/KuriDemo/templates/KuriTemplate/View/ViewController.storyboard similarity index 100% rename from KuriDemo/KuriTemplate/View/ViewController.storyboard rename to KuriDemo/templates/KuriTemplate/View/ViewController.storyboard diff --git a/KuriDemo/KuriTemplate/View/ViewController.swift b/KuriDemo/templates/KuriTemplate/View/ViewController.swift similarity index 100% rename from KuriDemo/KuriTemplate/View/ViewController.swift rename to KuriDemo/templates/KuriTemplate/View/ViewController.swift diff --git a/KuriDemo/KuriTemplate/Wireframe/Wireframe.swift b/KuriDemo/templates/KuriTemplate/Wireframe/Wireframe.swift similarity index 100% rename from KuriDemo/KuriTemplate/Wireframe/Wireframe.swift rename to KuriDemo/templates/KuriTemplate/Wireframe/Wireframe.swift diff --git a/KuriDemo/KuriTemplateCollectionView/Builder/Builder.swift b/KuriDemo/templates/KuriTemplateCollectionView/Builder/Builder.swift similarity index 100% rename from KuriDemo/KuriTemplateCollectionView/Builder/Builder.swift rename to KuriDemo/templates/KuriTemplateCollectionView/Builder/Builder.swift diff --git a/KuriDemo/KuriTemplateCollectionView/DataStore/DataStore.swift b/KuriDemo/templates/KuriTemplateCollectionView/DataStore/DataStore.swift similarity index 100% rename from KuriDemo/KuriTemplateCollectionView/DataStore/DataStore.swift rename to KuriDemo/templates/KuriTemplateCollectionView/DataStore/DataStore.swift diff --git a/KuriDemo/KuriTemplateCollectionView/Entity/Entity.swift b/KuriDemo/templates/KuriTemplateCollectionView/Entity/Entity.swift similarity index 100% rename from KuriDemo/KuriTemplateCollectionView/Entity/Entity.swift rename to KuriDemo/templates/KuriTemplateCollectionView/Entity/Entity.swift diff --git a/KuriDemo/KuriTemplateCollectionView/Model/Model.swift b/KuriDemo/templates/KuriTemplateCollectionView/Model/Model.swift similarity index 100% rename from KuriDemo/KuriTemplateCollectionView/Model/Model.swift rename to KuriDemo/templates/KuriTemplateCollectionView/Model/Model.swift diff --git a/KuriDemo/KuriTemplateCollectionView/Presenter/Presenter.swift b/KuriDemo/templates/KuriTemplateCollectionView/Presenter/Presenter.swift similarity index 100% rename from KuriDemo/KuriTemplateCollectionView/Presenter/Presenter.swift rename to KuriDemo/templates/KuriTemplateCollectionView/Presenter/Presenter.swift diff --git a/KuriDemo/KuriTemplateCollectionView/Repository/Repository.swift b/KuriDemo/templates/KuriTemplateCollectionView/Repository/Repository.swift similarity index 100% rename from KuriDemo/KuriTemplateCollectionView/Repository/Repository.swift rename to KuriDemo/templates/KuriTemplateCollectionView/Repository/Repository.swift diff --git a/KuriDemo/KuriTemplateCollectionView/Translator/Translator.swift b/KuriDemo/templates/KuriTemplateCollectionView/Translator/Translator.swift similarity index 100% rename from KuriDemo/KuriTemplateCollectionView/Translator/Translator.swift rename to KuriDemo/templates/KuriTemplateCollectionView/Translator/Translator.swift diff --git a/KuriDemo/KuriTemplateCollectionView/UseCase/UseCase.swift b/KuriDemo/templates/KuriTemplateCollectionView/UseCase/UseCase.swift similarity index 100% rename from KuriDemo/KuriTemplateCollectionView/UseCase/UseCase.swift rename to KuriDemo/templates/KuriTemplateCollectionView/UseCase/UseCase.swift diff --git a/KuriDemo/KuriTemplateCollectionView/View/CollectionViewCell.swift b/KuriDemo/templates/KuriTemplateCollectionView/View/CollectionViewCell.swift similarity index 100% rename from KuriDemo/KuriTemplateCollectionView/View/CollectionViewCell.swift rename to KuriDemo/templates/KuriTemplateCollectionView/View/CollectionViewCell.swift diff --git a/KuriDemo/KuriTemplateCollectionView/View/CollectionViewCell.xib b/KuriDemo/templates/KuriTemplateCollectionView/View/CollectionViewCell.xib similarity index 100% rename from KuriDemo/KuriTemplateCollectionView/View/CollectionViewCell.xib rename to KuriDemo/templates/KuriTemplateCollectionView/View/CollectionViewCell.xib diff --git a/KuriDemo/KuriTemplateCollectionView/View/CollectionViewController.storyboard b/KuriDemo/templates/KuriTemplateCollectionView/View/CollectionViewController.storyboard similarity index 100% rename from KuriDemo/KuriTemplateCollectionView/View/CollectionViewController.storyboard rename to KuriDemo/templates/KuriTemplateCollectionView/View/CollectionViewController.storyboard diff --git a/KuriDemo/KuriTemplateCollectionView/View/CollectionViewController.swift b/KuriDemo/templates/KuriTemplateCollectionView/View/CollectionViewController.swift similarity index 100% rename from KuriDemo/KuriTemplateCollectionView/View/CollectionViewController.swift rename to KuriDemo/templates/KuriTemplateCollectionView/View/CollectionViewController.swift diff --git a/KuriDemo/KuriTemplateCollectionView/Wireframe/Wireframe.swift b/KuriDemo/templates/KuriTemplateCollectionView/Wireframe/Wireframe.swift similarity index 100% rename from KuriDemo/KuriTemplateCollectionView/Wireframe/Wireframe.swift rename to KuriDemo/templates/KuriTemplateCollectionView/Wireframe/Wireframe.swift diff --git a/KuriDemo/KuriTemplateTableView/Builder/Builder.swift b/KuriDemo/templates/KuriTemplateTableView/Builder/Builder.swift similarity index 100% rename from KuriDemo/KuriTemplateTableView/Builder/Builder.swift rename to KuriDemo/templates/KuriTemplateTableView/Builder/Builder.swift diff --git a/KuriDemo/KuriTemplateTableView/DataStore/DataStore.swift b/KuriDemo/templates/KuriTemplateTableView/DataStore/DataStore.swift similarity index 100% rename from KuriDemo/KuriTemplateTableView/DataStore/DataStore.swift rename to KuriDemo/templates/KuriTemplateTableView/DataStore/DataStore.swift diff --git a/KuriDemo/KuriTemplateTableView/Entity/Entity.swift b/KuriDemo/templates/KuriTemplateTableView/Entity/Entity.swift similarity index 100% rename from KuriDemo/KuriTemplateTableView/Entity/Entity.swift rename to KuriDemo/templates/KuriTemplateTableView/Entity/Entity.swift diff --git a/KuriDemo/KuriTemplateTableView/Model/Model.swift b/KuriDemo/templates/KuriTemplateTableView/Model/Model.swift similarity index 100% rename from KuriDemo/KuriTemplateTableView/Model/Model.swift rename to KuriDemo/templates/KuriTemplateTableView/Model/Model.swift diff --git a/KuriDemo/KuriTemplateTableView/Presenter/Presenter.swift b/KuriDemo/templates/KuriTemplateTableView/Presenter/Presenter.swift similarity index 100% rename from KuriDemo/KuriTemplateTableView/Presenter/Presenter.swift rename to KuriDemo/templates/KuriTemplateTableView/Presenter/Presenter.swift diff --git a/KuriDemo/KuriTemplateTableView/Repository/Repository.swift b/KuriDemo/templates/KuriTemplateTableView/Repository/Repository.swift similarity index 100% rename from KuriDemo/KuriTemplateTableView/Repository/Repository.swift rename to KuriDemo/templates/KuriTemplateTableView/Repository/Repository.swift diff --git a/KuriDemo/KuriTemplateTableView/Translator/Translator.swift b/KuriDemo/templates/KuriTemplateTableView/Translator/Translator.swift similarity index 100% rename from KuriDemo/KuriTemplateTableView/Translator/Translator.swift rename to KuriDemo/templates/KuriTemplateTableView/Translator/Translator.swift diff --git a/KuriDemo/KuriTemplateTableView/UseCase/UseCase.swift b/KuriDemo/templates/KuriTemplateTableView/UseCase/UseCase.swift similarity index 100% rename from KuriDemo/KuriTemplateTableView/UseCase/UseCase.swift rename to KuriDemo/templates/KuriTemplateTableView/UseCase/UseCase.swift diff --git a/KuriDemo/KuriTemplateTableView/View/TableViewCell.swift b/KuriDemo/templates/KuriTemplateTableView/View/TableViewCell.swift similarity index 100% rename from KuriDemo/KuriTemplateTableView/View/TableViewCell.swift rename to KuriDemo/templates/KuriTemplateTableView/View/TableViewCell.swift diff --git a/KuriDemo/KuriTemplateTableView/View/TableViewCell.xib b/KuriDemo/templates/KuriTemplateTableView/View/TableViewCell.xib similarity index 100% rename from KuriDemo/KuriTemplateTableView/View/TableViewCell.xib rename to KuriDemo/templates/KuriTemplateTableView/View/TableViewCell.xib diff --git a/KuriDemo/KuriTemplateTableView/View/TableViewController.storyboard b/KuriDemo/templates/KuriTemplateTableView/View/TableViewController.storyboard similarity index 100% rename from KuriDemo/KuriTemplateTableView/View/TableViewController.storyboard rename to KuriDemo/templates/KuriTemplateTableView/View/TableViewController.storyboard diff --git a/KuriDemo/KuriTemplateTableView/View/TableViewController.swift b/KuriDemo/templates/KuriTemplateTableView/View/TableViewController.swift similarity index 100% rename from KuriDemo/KuriTemplateTableView/View/TableViewController.swift rename to KuriDemo/templates/KuriTemplateTableView/View/TableViewController.swift diff --git a/KuriDemo/KuriTemplateTableView/Wireframe/Wireframe.swift b/KuriDemo/templates/KuriTemplateTableView/Wireframe/Wireframe.swift similarity index 100% rename from KuriDemo/KuriTemplateTableView/Wireframe/Wireframe.swift rename to KuriDemo/templates/KuriTemplateTableView/Wireframe/Wireframe.swift diff --git a/KuriDemo/templates/ReplacedContentTemplate/__PREFIX__/__PREFIX__DynamicGenerateFilePath.swift b/KuriDemo/templates/ReplacedContentTemplate/__PREFIX__/__PREFIX__DynamicGenerateFilePath.swift new file mode 100644 index 0000000..35ff2e4 --- /dev/null +++ b/KuriDemo/templates/ReplacedContentTemplate/__PREFIX__/__PREFIX__DynamicGenerateFilePath.swift @@ -0,0 +1,11 @@ +// +// __PREFIX__DynamicGenerateFilePath +// Kuri +// +// Created by __USERNAME__ on __DATE__. +// Copyright © __YEAR__ __USERNAME__. All rights reserved. +// + +import UIKit + +print("__PREFIX__DynamicGenerateFilePath") diff --git a/Sources/KuriCore/KuriErrorType.swift b/Sources/KuriCore/Command/Error/KuriErrorType.swift similarity index 100% rename from Sources/KuriCore/KuriErrorType.swift rename to Sources/KuriCore/Command/Error/KuriErrorType.swift diff --git a/Sources/KuriCore/Command/GenerateComponent.swift b/Sources/KuriCore/Command/GenerateComponent.swift index 798dd42..877ddce 100644 --- a/Sources/KuriCore/Command/GenerateComponent.swift +++ b/Sources/KuriCore/Command/GenerateComponent.swift @@ -35,7 +35,8 @@ struct GenerateComponent { return Array(templateRelativePath.components(separatedBy: "/").dropLast()) } - var generateDirectoryPath: [String] { - return templateDirectoryPath + func makeGeneratingDirectoryPath(prefix: String, targetName: String) -> [String] { + let replacedPath = templateDirectoryPath.map { $0.replaceEnvironmentText(prefix: prefix, targetName: targetName) } + return replacedPath } } diff --git a/Sources/KuriCore/Command/Generator.swift b/Sources/KuriCore/Command/Generator.swift index f8c1e7a..a034def 100644 --- a/Sources/KuriCore/Command/Generator.swift +++ b/Sources/KuriCore/Command/Generator.swift @@ -155,41 +155,6 @@ extension Generator { } fileprivate extension Generator { - struct DateComponent { - let year: Int - let month: Int - let day: Int - - var date: String { - return "\(year)/\(month)/\(day)" - } - } - - fileprivate func convert(content: String, prefix: String, targetName: String) -> String { - let userName = run(bash: "echo $USER").stdout - let date: DateComponent = { _ -> DateComponent in - let component = Calendar(identifier: .gregorian).dateComponents([.year, .month, .day], from: Date()) - guard - let year = component.year, - let month = component.month, - let day = component.day - else { - fatalError("Can't get system date") - } - return DateComponent(year: year, month: month, day: day) - }(()) - - let replacedContent = content - .replacingOccurrences(of: "__PREFIX__", with: prefix) - .replacingOccurrences(of: "__TARGET__", with: targetName) - .replacingOccurrences(of: "__USERNAME__", with: userName) - .replacingOccurrences(of: "__DATE__", with: date.date) - .replacingOccurrences(of: "__YEAR__", with: "\(date.year)") - .replacingOccurrences(of: "__MONTH__", with: "\(date.month)") - .replacingOccurrences(of: "__DAY__", with: "\(date.day)") - return replacedContent - } - fileprivate func generate(with prefix: String, for components: [GenerateComponent], and templateHeadPath: String) throws { print("Begin generate") defer { @@ -204,9 +169,10 @@ fileprivate extension Generator { let projectRootPath = yamlReader.projectRootPath(for: typeFor) let projectFileName = yamlReader.projectFileName(for: typeFor) + let targetName = yamlReader.targetName(for: typeFor) let projectFilePath = projectRootPath + projectFileName + "/" - let directoryPath = generateRootPath + component.generateDirectoryPath.joined(separator: "/") + "/" - let filePath = directoryPath + prefix + component.templateFileName + let generatingDirectoryPath = generateRootPath + component.makeGeneratingDirectoryPath(prefix: prefix, targetName: targetName).joined(separator: "/") + "/" + let filePath = (generatingDirectoryPath + prefix + component.templateFileName).replaceEnvironmentText(prefix: prefix, targetName: targetName) let project: XcodeProject if let alreadyExistsProject = pathAndXcodeProject[projectFilePath] { @@ -223,9 +189,8 @@ fileprivate extension Generator { print("can't find: \(componentType)") return } - let targetName = yamlReader.targetName(for: typeFor) - let writeCotent = convert(content: templateContent, prefix: prefix, targetName: targetName) - try fileOperator.createDirectory(for: directoryPath) + let writeCotent = templateContent.replaceEnvironmentText(prefix: prefix, targetName: targetName) + try fileOperator.createDirectory(for: generatingDirectoryPath) fileOperator.createFile(for: filePath) project.appendFilePath( diff --git a/Sources/KuriCore/SetupComponentType.swift b/Sources/KuriCore/Command/SetupComponentType.swift similarity index 100% rename from Sources/KuriCore/SetupComponentType.swift rename to Sources/KuriCore/Command/SetupComponentType.swift diff --git a/Sources/KuriCore/KuriExtension.swift b/Sources/KuriCore/KuriExtension.swift deleted file mode 100644 index a7feb87..0000000 --- a/Sources/KuriCore/KuriExtension.swift +++ /dev/null @@ -1,45 +0,0 @@ -// -// KuriExtension.swift -// Kuri -// -// Created by kingkong999yhirose on 2016/12/22. -// Copyright © 2016年 kingkong999yhirose. All rights reserved. -// - -import Foundation - -protocol Enumerable { - associatedtype Element = Self -} - -extension Enumerable where Element: RawRepresentable, Element.RawValue == Int { - static var enumerate: AnySequence { - return AnySequence { () -> AnyIterator in - var i = 0 - return AnyIterator { () -> Element? in - let element = Element(rawValue: i) - i += 1 - return element - } - } - } - static var elements: [Element] { - return Array(enumerate) - } -} - -extension String { - var hasAny: Bool { - return !isEmpty - } -} - -extension Array { - subscript(safe index: Int) -> Element? { - return 0 <= index && index < count ? self[index] : nil - } - - var second: Element? { - return self[safe: 1] - } -} diff --git a/Sources/KuriCore/FileOperator.swift b/Sources/KuriCore/Util/FileOperator.swift similarity index 100% rename from Sources/KuriCore/FileOperator.swift rename to Sources/KuriCore/Util/FileOperator.swift diff --git a/Sources/KuriCore/Helper.swift b/Sources/KuriCore/Util/Helper.swift similarity index 100% rename from Sources/KuriCore/Helper.swift rename to Sources/KuriCore/Util/Helper.swift diff --git a/Sources/KuriCore/Util/KuriExtension.swift b/Sources/KuriCore/Util/KuriExtension.swift new file mode 100644 index 0000000..36d7e47 --- /dev/null +++ b/Sources/KuriCore/Util/KuriExtension.swift @@ -0,0 +1,77 @@ +// +// KuriExtension.swift +// Kuri +// +// Created by kingkong999yhirose on 2016/12/22. +// Copyright © 2016年 kingkong999yhirose. All rights reserved. +// + +import Foundation + +protocol Enumerable { + associatedtype Element = Self +} + +extension Enumerable where Element: RawRepresentable, Element.RawValue == Int { + static var enumerate: AnySequence { + return AnySequence { () -> AnyIterator in + var i = 0 + return AnyIterator { () -> Element? in + let element = Element(rawValue: i) + i += 1 + return element + } + } + } + static var elements: [Element] { + return Array(enumerate) + } +} + + +extension String { + fileprivate struct DateComponent { + let year: Int + let month: Int + let day: Int + + var date: String { + return "\(year)/\(month)/\(day)" + } + } + func replaceEnvironmentText(prefix: String, targetName: String) -> String { + let userName = run(bash: "echo $USER").stdout + let date: DateComponent = { _ -> DateComponent in + let component = Calendar(identifier: .gregorian).dateComponents([.year, .month, .day], from: Date()) + guard + let year = component.year, + let month = component.month, + let day = component.day + else { + fatalError("Can't get system date") + } + return DateComponent(year: year, month: month, day: day) + }(()) + + let replacedContent = self + .replacingOccurrences(of: "__PREFIX__", with: prefix) + .replacingOccurrences(of: "__TARGET__", with: targetName) + .replacingOccurrences(of: "__USERNAME__", with: userName) + .replacingOccurrences(of: "__DATE__", with: date.date) + .replacingOccurrences(of: "__YEAR__", with: "\(date.year)") + .replacingOccurrences(of: "__MONTH__", with: "\(date.month)") + .replacingOccurrences(of: "__DAY__", with: "\(date.day)") + return replacedContent + } + +} + +extension Array { + subscript(safe index: Int) -> Element? { + return 0 <= index && index < count ? self[index] : nil + } + + var second: Element? { + return self[safe: 1] + } +} diff --git a/Sources/KuriCore/Yaml/YamlReader.swift b/Sources/KuriCore/Yaml/YamlReader.swift index 63f7881..3c87dd0 100644 --- a/Sources/KuriCore/Yaml/YamlReader.swift +++ b/Sources/KuriCore/Yaml/YamlReader.swift @@ -50,10 +50,10 @@ public struct YamlReader { private func readYamlForComponent(generateComponent: GenerateComponent, from yaml: Yaml) -> Yaml { var yamlForComponent: Yaml = yaml - generateComponent.generateDirectoryPath.forEach { directory in + generateComponent.templateDirectoryPath.forEach { directory in yamlForComponent = yamlForComponent[.string(directory)] if yamlForComponent == .null { - fatalError("Can't find \(directory) from \(generateComponent.generateDirectoryPath)") + fatalError("Can't find \(directory) from \(generateComponent.templateDirectoryPath)") } } return yamlForComponent