public override void Register(ContainerBuilder builder) { _tempFolderName = Path.GetTempFileName(); File.Delete(_tempFolderName); var assembly = GetType().Assembly; foreach (var name in assembly.GetManifestResourceNames()) { if (name.StartsWith(DataPrefix)) { string text; using (var stream = assembly.GetManifestResourceStream(name)) { using (var reader = new StreamReader(stream)) text = reader.ReadToEnd(); } // Pro filtering var relativePath = name .Substring(DataPrefix.Length) .Replace(".txt", ":txt") .Replace(".recipe.xml", ":recipe:xml") .Replace('.', Path.DirectorySeparatorChar) .Replace(":txt", ".txt") .Replace(":recipe:xml", ".recipe.xml"); var targetPath = Path.Combine(_tempFolderName, relativePath); Directory.CreateDirectory(Path.GetDirectoryName(targetPath)); using (var stream = new FileStream(targetPath, FileMode.Create)) { using (var writer = new StreamWriter(stream)) { writer.Write(text); } } } } var harvester = new ExtensionHarvester(new StubCacheManager(), new StubWebSiteFolder(), new Mock <ICriticalErrorProvider>().Object); _folders = new ModuleFolders(new[] { _tempFolderName }, harvester); builder.RegisterType <RecipeManager>().As <IRecipeManager>(); builder.RegisterType <RecipeHarvester>().As <IRecipeHarvester>(); builder.RegisterType <RecipeStepExecutor>().As <IRecipeStepExecutor>(); builder.RegisterType <StubStepQueue>().As <IRecipeStepQueue>().InstancePerLifetimeScope(); builder.RegisterType <StubRecipeScheduler>().As <IRecipeScheduler>(); builder.RegisterType <ExtensionManager>().As <IExtensionManager>(); builder.RegisterType <StubAppDataFolder>().As <IAppDataFolder>(); builder.RegisterType <StubClock>().As <IClock>(); builder.RegisterType <StubCacheManager>().As <ICacheManager>(); builder.RegisterType <StubParallelCacheContext>().As <IParallelCacheContext>(); builder.RegisterType <StubAsyncTokenProvider>().As <IAsyncTokenProvider>(); builder.RegisterInstance(_folders).As <IExtensionFolders>(); builder.RegisterInstance(new Mock <IRecipeExecuteEventHandler>().Object); builder.RegisterType <ExtensionManagerTests.StubLoaders>().As <IExtensionLoader>(); builder.RegisterType <RecipeParser>().As <IRecipeParser>(); builder.RegisterType <StubWebSiteFolder>().As <IWebSiteFolder>(); builder.RegisterType <CustomRecipeHandler>().As <IRecipeHandler>(); }
public IEnumerable <ExtensionDescriptor> AvailableExtensions() { foreach (var e in Manifests) { string name = e.Key; yield return(ExtensionHarvester.GetDescriptorForExtension("~/", name, _extensionType, Manifests[name])); } }
public void ModuleTxtShouldBeParsedAndReturnedAsYamlDocument() { var harvester = new ExtensionHarvester(new StubCacheManager(), new StubWebSiteFolder(), new Mock <ICriticalErrorProvider>().Object); IExtensionFolders folders = new ModuleFolders(new[] { _tempFolderName }, harvester); var sample1 = folders.AvailableExtensions().Single(d => d.Id == "Sample1"); Assert.That(sample1.Id, Is.Not.Empty); Assert.That(sample1.Author, Is.EqualTo("Bertrand Le Roy")); // Sample1 }
public void NamesFromFoldersWithModuleTxtShouldFallBackToIdIfNotGiven() { var harvester = new ExtensionHarvester(new StubCacheManager(), new StubWebSiteFolder(), new Mock <ICriticalErrorProvider>().Object); IExtensionFolders folders = new ModuleFolders(new[] { _tempFolderName }, harvester); var names = folders.AvailableExtensions().Select(d => d.Name); Assert.That(names.Count(), Is.EqualTo(5)); Assert.That(names, Has.Some.EqualTo("Le plug-in français")); // Sample1 Assert.That(names, Has.Some.EqualTo("This is another test.txt")); // Sample3 Assert.That(names, Has.Some.EqualTo("Sample4")); // Sample4 Assert.That(names, Has.Some.EqualTo("SampleSix")); // Sample6 Assert.That(names, Has.Some.EqualTo("Sample7")); // Sample7 }
public void PathsFromFoldersWithModuleTxtShouldFallBackAppropriatelyIfNotGiven() { var harvester = new ExtensionHarvester(new StubCacheManager(), new StubWebSiteFolder(), new Mock <ICriticalErrorProvider>().Object); IExtensionFolders folders = new ModuleFolders(new[] { _tempFolderName }, harvester); var paths = folders.AvailableExtensions().Select(d => d.Path); Assert.That(paths.Count(), Is.EqualTo(5)); Assert.That(paths, Has.Some.EqualTo("Sample1")); // Sample1 - Id, Name invalid URL segment Assert.That(paths, Has.Some.EqualTo("Sample3")); // Sample3 - Id, Name invalid URL segment Assert.That(paths, Has.Some.EqualTo("ThisIs.Sample4")); // Sample4 - Path Assert.That(paths, Has.Some.EqualTo("SampleSix")); // Sample6 - Name, no Path Assert.That(paths, Has.Some.EqualTo("Sample7")); // Sample7 - Id, no Name or Path }
public void IdsFromFoldersWithModuleTxtShouldBeListed() { var harvester = new ExtensionHarvester(new StubCacheManager(), new StubWebSiteFolder(), new Mock <ICriticalErrorProvider>().Object); IExtensionFolders folders = new ModuleFolders(new[] { _tempFolderName }, harvester); var ids = folders.AvailableExtensions().Select(d => d.Id); Assert.That(ids.Count(), Is.EqualTo(5)); Assert.That(ids, Has.Some.EqualTo("Sample1")); // Sample1 - obviously Assert.That(ids, Has.Some.EqualTo("Sample3")); // Sample3 Assert.That(ids, Has.Some.EqualTo("Sample4")); // Sample4 Assert.That(ids, Has.Some.EqualTo("Sample6")); // Sample6 Assert.That(ids, Has.Some.EqualTo("Sample7")); // Sample7 }
public void ModuleTxtShouldBeParsedAndReturnedAsYamlDocument() { var harvester = new ExtensionHarvester(new StubWebSiteFolder(), new StubLoggerFactory()); var options = new ExtensionHarvestingOptions(); options.ModuleLocationExpanders.Add(ModuleFolder(_tempFolderName)); var folders = new ExtensionLocator( new FakeOptions(options), harvester); var sample1 = folders.AvailableExtensions().Single(d => d.Id == "Sample1"); Assert.NotEmpty(sample1.Id); Assert.Equal("Bertrand Le Roy", sample1.Author); // Sample1 }
public void ModuleTxtShouldBeParsedAndReturnedAsYamlDocument() { var harvester = new ExtensionHarvester(new StubHostingEnvironment(), new NullLogger <ExtensionHarvester>()); var options = new ExtensionHarvestingOptions(); options.ExtensionLocationExpanders.Add(ModuleFolder(_subPath)); var folders = new ExtensionLocator( new FakeOptions(options), harvester); var sample1 = folders.AvailableExtensions().Single(d => d.Id == "Sample1"); Assert.NotEmpty(sample1.Id); Assert.Equal("Bertrand Le Roy", sample1.Author); // Sample1 }
public void ModuleTxtShouldBeParsedAndReturnedAsYamlDocument() { var harvester = new ExtensionHarvester(new OrchardFileSystem(" ", new PhysicalFileProvider("/"), new NullLogger <OrchardFileSystem>()), new NullLogger <ExtensionHarvester>()); var options = new ExtensionHarvestingOptions(); options.ExtensionLocationExpanders.Add(ModuleFolder(_tempFolderName)); var folders = new ExtensionLocator( new FakeOptions(options), harvester); var sample1 = folders.AvailableExtensions().Single(d => d.Id == "Sample1"); Assert.NotEmpty(sample1.Id); Assert.Equal("Bertrand Le Roy", sample1.Author); // Sample1 }
public IEnumerable <ExtensionDescriptor> AvailableExtensions() { if (_extensionTypes.Contains(DefaultExtensionTypes.Module)) { foreach (var e in Manifests) { string name = e.Key; yield return(ExtensionHarvester.GetDescriptorForExtension("~/", name, DefaultExtensionTypes.Module, Manifests[name])); } } if (_extensionTypes.Contains(DefaultExtensionTypes.Theme)) { foreach (var e in ThemeManifests) { string name = e.Key; yield return(ExtensionHarvester.GetDescriptorForExtension("~/", name, DefaultExtensionTypes.Theme, ThemeManifests[name])); } } }
public void IdsFromFoldersWithModuleTxtShouldBeListed() { var harvester = new ExtensionHarvester(new StubWebSiteFolder(), new StubLoggerFactory()); var options = new ExtensionHarvestingOptions(); options.ModuleLocationExpanders.Add(ModuleFolder(_tempFolderName)); var folders = new ExtensionLocator( new FakeOptions(options), harvester); var ids = folders.AvailableExtensions().Select(d => d.Id); Assert.Equal(5, ids.Count()); Assert.Contains("Sample1", ids); // Sample1 - obviously Assert.Contains("Sample3", ids); // Sample3 Assert.Contains("Sample4", ids); // Sample4 Assert.Contains("Sample6", ids); // Sample6 Assert.Contains("Sample7", ids); // Sample7 }
public void NamesFromFoldersWithModuleTxtShouldFallBackToIdIfNotGiven() { var harvester = new ExtensionHarvester(new StubWebSiteFolder(), new StubLoggerFactory()); var options = new ExtensionHarvestingOptions(); options.ModuleLocationExpanders.Add(ModuleFolder(_tempFolderName)); var folders = new ExtensionLocator( new FakeOptions(options), harvester); var names = folders.AvailableExtensions().Select(d => d.Name); Assert.Equal(5, names.Count()); Assert.Contains("Le plug-in français", names); // Sample1 Assert.Contains("This is another test.txt", names); // Sample3 Assert.Contains("Sample4", names); // Sample4 Assert.Contains("SampleSix", names); // Sample6 Assert.Contains("Sample7", names); // Sample7 }
public void PathsFromFoldersWithModuleTxtShouldFallBackAppropriatelyIfNotGiven() { var harvester = new ExtensionHarvester(new StubWebSiteFolder(), new StubLoggerFactory()); var options = new ExtensionHarvestingOptions(); options.ModuleLocationExpanders.Add(ModuleFolder(_tempFolderName)); var folders = new ExtensionLocator( new FakeOptions(options), harvester); var paths = folders.AvailableExtensions().Select(d => d.Path); Assert.Equal(5, paths.Count()); Assert.Contains("Sample1", paths); // Sample1 - Id, Name invalid URL segment Assert.Contains("Sample3", paths); // Sample3 - Id, Name invalid URL segment Assert.Contains("ThisIs.Sample4", paths); // Sample4 - Path Assert.Contains("SampleSix", paths); // Sample6 - Name, no Path Assert.Contains("Sample7", paths); // Sample7 - Id, no Name or Path }
public void IdsFromFoldersWithModuleTxtShouldBeListed() { var harvester = new ExtensionHarvester(new StubHostingEnvironment(), new NullLogger <ExtensionHarvester>()); var options = new ExtensionHarvestingOptions(); options.ExtensionLocationExpanders.Add(ModuleFolder(_subPath)); var folders = new ExtensionLocator( new FakeOptions(options), harvester); var ids = folders.AvailableExtensions().Select(d => d.Id); Assert.Equal(5, ids.Count()); Assert.Contains("Sample1", ids); // Sample1 - obviously Assert.Contains("Sample3", ids); // Sample3 Assert.Contains("Sample4", ids); // Sample4 Assert.Contains("Sample6", ids); // Sample6 Assert.Contains("Sample7", ids); // Sample7 }
public void IdsFromFoldersWithModuleTxtShouldBeListed() { var harvester = new ExtensionHarvester(new OrchardFileSystem(" ", new PhysicalFileProvider("/"), new NullLogger <OrchardFileSystem>()), new NullLogger <ExtensionHarvester>()); var options = new ExtensionHarvestingOptions(); options.ExtensionLocationExpanders.Add(ModuleFolder(_tempFolderName)); var folders = new ExtensionLocator( new FakeOptions(options), harvester); var ids = folders.AvailableExtensions().Select(d => d.Id); Assert.Equal(5, ids.Count()); Assert.Contains("Sample1", ids); // Sample1 - obviously Assert.Contains("Sample3", ids); // Sample3 Assert.Contains("Sample4", ids); // Sample4 Assert.Contains("Sample6", ids); // Sample6 Assert.Contains("Sample7", ids); // Sample7 }
public void NamesFromFoldersWithModuleTxtShouldFallBackToIdIfNotGiven() { var harvester = new ExtensionHarvester(new OrchardFileSystem(" ", new PhysicalFileProvider("/"), new NullLogger <OrchardFileSystem>()), new NullLogger <ExtensionHarvester>()); var options = new ExtensionHarvestingOptions(); options.ExtensionLocationExpanders.Add(ModuleFolder(_tempFolderName)); var folders = new ExtensionLocator( new FakeOptions(options), harvester); var names = folders.AvailableExtensions().Select(d => d.Name); Assert.Equal(5, names.Count()); Assert.Contains("Le plug-in français", names); // Sample1 Assert.Contains("This is another test.txt", names); // Sample3 Assert.Contains("Sample4", names); // Sample4 Assert.Contains("SampleSix", names); // Sample6 Assert.Contains("Sample7", names); // Sample7 }
public static ExtensionDescriptor GetExtensionDescriptor(this IPackage package, string extensionType) { IPackageFile packageFile = package.GetFiles().FirstOrDefault(file => { var fileName = Path.GetFileName(file.Path); return(fileName != null && fileName.Equals( DefaultExtensionTypes.IsModule(extensionType) ? "module.txt" : "theme.txt", StringComparison.OrdinalIgnoreCase)); }); if (packageFile != null) { var directoryName = Path.GetDirectoryName(packageFile.Path); if (directoryName != null) { string extensionId = Path.GetFileName(directoryName.TrimEnd('/', '\\')); using (var streamReader = new StreamReader(packageFile.GetStream())) { return(ExtensionHarvester.GetDescriptorForExtension("", extensionId, extensionType, streamReader.ReadToEnd())); } } } return(null); }