diff --git a/src/Orchard.Tests.Modules/Recipes/Services/FoldersData/Sample1/Recipes/cms.recipe.xml b/src/Orchard.Tests.Modules/Recipes/Services/FoldersData/Sample1/Recipes/cms.recipe.xml
index 736abab44..60a780329 100644
--- a/src/Orchard.Tests.Modules/Recipes/Services/FoldersData/Sample1/Recipes/cms.recipe.xml
+++ b/src/Orchard.Tests.Modules/Recipes/Services/FoldersData/Sample1/Recipes/cms.recipe.xml
@@ -1,19 +1,21 @@
-
- cms
- a sample Orchard recipe describing a cms
- orchard
- http://orchardproject.net
- tag1, tag2
- 1.1
-
+
+
+ cms
+ a sample Orchard recipe describing a cms
+ orchard
+ http://orchardproject.net
+ tag1, tag2
+ 1.1
+
+
-
+
-
-
+
+
@@ -23,26 +25,27 @@
-
-
+
+
command1
command2
command3
-
+
-
+
-
+
-
+
-
+
+
diff --git a/src/Orchard.Tests.Modules/Recipes/Services/RecipeManagerTests.cs b/src/Orchard.Tests.Modules/Recipes/Services/RecipeManagerTests.cs
index 52a775b08..a3f56e429 100644
--- a/src/Orchard.Tests.Modules/Recipes/Services/RecipeManagerTests.cs
+++ b/src/Orchard.Tests.Modules/Recipes/Services/RecipeManagerTests.cs
@@ -18,6 +18,7 @@ namespace Orchard.Tests.Modules.Recipes.Services {
public class RecipeManagerTests {
private IContainer _container;
private IRecipeManager _recipeManager;
+ private IRecipeHarvester _recipeHarvester;
private IRecipeParser _recipeParser;
private IExtensionFolders _folders;
@@ -61,6 +62,7 @@ namespace Orchard.Tests.Modules.Recipes.Services {
var builder = new ContainerBuilder();
_folders = new ModuleFolders(new[] { _tempFolderName }, new StubCacheManager(), new StubWebSiteFolder());
builder.RegisterType().As();
+ builder.RegisterType().As();
builder.RegisterType().As();
builder.RegisterType().As();
builder.RegisterInstance(_folders).As();
@@ -72,6 +74,7 @@ namespace Orchard.Tests.Modules.Recipes.Services {
_container = builder.Build();
_recipeManager = _container.Resolve();
_recipeParser = _container.Resolve();
+ _recipeHarvester = _container.Resolve();
}
[TearDown]
@@ -80,21 +83,21 @@ namespace Orchard.Tests.Modules.Recipes.Services {
}
[Test]
- public void DiscoverRecipesFailsToFindRecipesWhenCalledWithNotExistingExtension() {
- var recipes = (List) _recipeManager.DiscoverRecipes("cantfindme");
+ public void HarvestRecipesFailsToFindRecipesWhenCalledWithNotExistingExtension() {
+ var recipes = (List) _recipeHarvester.HarvestRecipes("cantfindme");
Assert.That(recipes.Count, Is.EqualTo(0));
}
[Test]
- public void DiscoverRecipesShouldDiscoverRecipeXmlFiles() {
- var recipes = (List)_recipeManager.DiscoverRecipes("Sample1");
+ public void HarvestRecipesShouldHarvestRecipeXmlFiles() {
+ var recipes = (List)_recipeHarvester.HarvestRecipes("Sample1");
Assert.That(recipes.Count, Is.EqualTo(1));
}
[Test]
public void ParseRecipeLoadsRecipeMetaDataIntoModel() {
- var recipes = (List) _recipeManager.DiscoverRecipes("Sample1");
+ var recipes = (List) _recipeHarvester.HarvestRecipes("Sample1");
Assert.That(recipes.Count, Is.EqualTo(1));
var sampleRecipe = recipes[0];
@@ -108,7 +111,7 @@ namespace Orchard.Tests.Modules.Recipes.Services {
[Test]
public void ParseRecipeLoadsRecipeStepsIntoModel() {
- var recipes = (List)_recipeManager.DiscoverRecipes("Sample1");
+ var recipes = (List)_recipeHarvester.HarvestRecipes("Sample1");
Assert.That(recipes.Count, Is.EqualTo(1));
var sampleRecipe = recipes[0];
@@ -124,7 +127,7 @@ namespace Orchard.Tests.Modules.Recipes.Services {
[Test]
public void ExecuteInvokesHandlersWithSteps() {
- var recipes = (List)_recipeManager.DiscoverRecipes("Sample1");
+ var recipes = (List)_recipeHarvester.HarvestRecipes("Sample1");
Assert.That(recipes.Count, Is.EqualTo(1));
var sampleRecipe = recipes[0];
diff --git a/src/Orchard.Web/Modules/Orchard.Recipes/Module.txt b/src/Orchard.Web/Modules/Orchard.Recipes/Module.txt
index ec7abe498..c889105c1 100644
--- a/src/Orchard.Web/Modules/Orchard.Recipes/Module.txt
+++ b/src/Orchard.Web/Modules/Orchard.Recipes/Module.txt
@@ -7,6 +7,6 @@ OrchardVersion: 1.0.20
Description: Provides Orchard Recipes.
Features:
Orchard.Recipes:
- Name: Recipes
+ Name: Recipes
Description: Implementation of Orchard recipes.
Category: Core
diff --git a/src/Orchard.Web/Modules/Orchard.Recipes/Orchard.Recipes.csproj b/src/Orchard.Web/Modules/Orchard.Recipes/Orchard.Recipes.csproj
index 119a0768d..6eb208952 100644
--- a/src/Orchard.Web/Modules/Orchard.Recipes/Orchard.Recipes.csproj
+++ b/src/Orchard.Web/Modules/Orchard.Recipes/Orchard.Recipes.csproj
@@ -55,11 +55,12 @@
-
+
+
diff --git a/src/Orchard.Web/Modules/Orchard.Recipes/Properties/AssemblyInfo.cs b/src/Orchard.Web/Modules/Orchard.Recipes/Properties/AssemblyInfo.cs
index 0e105fa09..7cb7a79a6 100644
--- a/src/Orchard.Web/Modules/Orchard.Recipes/Properties/AssemblyInfo.cs
+++ b/src/Orchard.Web/Modules/Orchard.Recipes/Properties/AssemblyInfo.cs
@@ -1,6 +1,6 @@
using System.Reflection;
-using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
+using System.Security;
// General Information about an assembly is controlled through the following
// set of attributes. Change these attribute values to modify the information
@@ -8,9 +8,8 @@ using System.Runtime.InteropServices;
[assembly: AssemblyTitle("Orchard.Recipes")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
-[assembly: AssemblyCompany("MSIT")]
-[assembly: AssemblyProduct("Orchard.Recipes")]
-[assembly: AssemblyCopyright("Copyright © MSIT 2011")]
+[assembly: AssemblyProduct("Orchard")]
+[assembly: AssemblyCopyright("Copyright © Outercurve Foundation 2009")]
[assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")]
@@ -31,5 +30,6 @@ using System.Runtime.InteropServices;
//
// You can specify all the values or you can default the Revision and Build Numbers
// by using the '*' as shown below:
-[assembly: AssemblyVersion("1.0.0.0")]
-[assembly: AssemblyFileVersion("1.0.0.0")]
+[assembly: AssemblyVersion("1.0.20")]
+[assembly: AssemblyFileVersion("1.0.20")]
+[assembly: SecurityTransparent]
\ No newline at end of file
diff --git a/src/Orchard.Web/Modules/Orchard.Recipes/RecipeHandlers/MetaDataRecipeHandler.cs b/src/Orchard.Web/Modules/Orchard.Recipes/RecipeHandlers/MetaDataRecipeHandler.cs
index f93c034c5..29c59faf2 100644
--- a/src/Orchard.Web/Modules/Orchard.Recipes/RecipeHandlers/MetaDataRecipeHandler.cs
+++ b/src/Orchard.Web/Modules/Orchard.Recipes/RecipeHandlers/MetaDataRecipeHandler.cs
@@ -4,8 +4,8 @@ using Orchard.Recipes.Models;
using Orchard.Recipes.Services;
namespace Orchard.Recipes.RecipeHandlers {
- public class MetaDataRecipeHandler : IRecipeHandler {
- public MetaDataRecipeHandler() {
+ public class MetadataRecipeHandler : IRecipeHandler {
+ public MetadataRecipeHandler() {
Logger = NullLogger.Instance;
T = NullLocalizer.Instance;
}
@@ -13,7 +13,7 @@ namespace Orchard.Recipes.RecipeHandlers {
public Localizer T { get; set; }
ILogger Logger { get; set; }
- // handles the step
+ // handles the step
public void ExecuteRecipeStep(RecipeContext recipeContext) {
}
}
diff --git a/src/Orchard.Web/Modules/Orchard.Recipes/Services/RecipeHarvester.cs b/src/Orchard.Web/Modules/Orchard.Recipes/Services/RecipeHarvester.cs
new file mode 100644
index 000000000..1664e417e
--- /dev/null
+++ b/src/Orchard.Web/Modules/Orchard.Recipes/Services/RecipeHarvester.cs
@@ -0,0 +1,50 @@
+using System;
+using System.Collections.Generic;
+using System.IO;
+using System.Linq;
+using Orchard.Environment.Extensions;
+using Orchard.FileSystems.WebSite;
+using Orchard.Localization;
+using Orchard.Logging;
+using Orchard.Recipes.Models;
+
+namespace Orchard.Recipes.Services {
+ public class RecipeHarvester : IRecipeHarvester {
+ private readonly IExtensionManager _extensionManager;
+ private readonly IWebSiteFolder _webSiteFolder;
+ private readonly IRecipeParser _recipeParser;
+
+ public RecipeHarvester(
+ IExtensionManager extensionManager,
+ IWebSiteFolder webSiteFolder,
+ IRecipeParser recipeParser) {
+ _extensionManager = extensionManager;
+ _webSiteFolder = webSiteFolder;
+ _recipeParser = recipeParser;
+
+ Logger = NullLogger.Instance;
+ T = NullLocalizer.Instance;
+ }
+
+ public Localizer T { get; set; }
+ ILogger Logger { get; set; }
+
+ public IEnumerable HarvestRecipes(string extensionName) {
+ var recipes = new List();
+ var extension = _extensionManager.GetExtension(extensionName);
+ if (extension != null) {
+ var recipeLocation = Path.Combine(extension.Location, extensionName, "Recipes");
+ var recipeFiles = _webSiteFolder.ListFiles(recipeLocation, true);
+ recipes.AddRange(
+ from recipeFile in recipeFiles
+ where recipeFile.EndsWith(".recipe.xml", StringComparison.OrdinalIgnoreCase)
+ select _recipeParser.ParseRecipe(_webSiteFolder.ReadFile(recipeFile)));
+ }
+ else {
+ Logger.Error("Could not discover recipes because module '{0}' was not found.", extensionName);
+ }
+
+ return recipes;
+ }
+ }
+}
\ No newline at end of file
diff --git a/src/Orchard.Web/Modules/Orchard.Recipes/Services/RecipeManager.cs b/src/Orchard.Web/Modules/Orchard.Recipes/Services/RecipeManager.cs
index d06aa3922..da1e4fdba 100644
--- a/src/Orchard.Web/Modules/Orchard.Recipes/Services/RecipeManager.cs
+++ b/src/Orchard.Web/Modules/Orchard.Recipes/Services/RecipeManager.cs
@@ -1,27 +1,13 @@
using System.Collections.Generic;
-using System.IO;
-using System.Linq;
-using Orchard.Environment.Extensions;
-using Orchard.FileSystems.WebSite;
using Orchard.Localization;
using Orchard.Logging;
using Orchard.Recipes.Models;
namespace Orchard.Recipes.Services {
public class RecipeManager : IRecipeManager {
- private readonly IExtensionManager _extensionManager;
- private readonly IWebSiteFolder _webSiteFolder;
- private readonly IRecipeParser _recipeParser;
private readonly IEnumerable _recipeHandlers;
- public RecipeManager(
- IExtensionManager extensionManager,
- IWebSiteFolder webSiteFolder,
- IRecipeParser recipeParser,
- IEnumerable recipeHandlers) {
- _extensionManager = extensionManager;
- _webSiteFolder = webSiteFolder;
- _recipeParser = recipeParser;
+ public RecipeManager(IEnumerable recipeHandlers) {
_recipeHandlers = recipeHandlers;
Logger = NullLogger.Instance;
@@ -36,6 +22,7 @@ namespace Orchard.Recipes.Services {
// TODO: Run each step inside a transaction boundary.
// TODO: Output should go into a report.
+ // TODO: Eventually return a guid.tostring("n") execution id
foreach (var recipeStep in recipe.RecipeSteps) {
recipeContext.RecipeStep = recipeStep;
recipeContext.Executed = false;
@@ -47,23 +34,5 @@ namespace Orchard.Recipes.Services {
}
}
}
-
- public IEnumerable DiscoverRecipes(string extensionName) {
- var recipes = new List();
- var extension = _extensionManager.GetExtension(extensionName);
- if (extension != null) {
- var recipeLocation = Path.Combine(extension.Location, extensionName, "Recipes");
- var recipeFiles = _webSiteFolder.ListFiles(recipeLocation, true);
- recipes.AddRange(
- from recipeFile in recipeFiles
- where recipeFile.EndsWith(".recipe.xml")
- select _recipeParser.ParseRecipe(_webSiteFolder.ReadFile(recipeFile)));
- }
- else {
- Logger.Error("Could not discover recipes because module '{0}' was not found.", extensionName);
- }
-
- return recipes;
- }
}
}
\ No newline at end of file
diff --git a/src/Orchard.Web/Modules/Orchard.Recipes/Services/RecipeParser.cs b/src/Orchard.Web/Modules/Orchard.Recipes/Services/RecipeParser.cs
index 83f2c0578..aaa175b01 100644
--- a/src/Orchard.Web/Modules/Orchard.Recipes/Services/RecipeParser.cs
+++ b/src/Orchard.Web/Modules/Orchard.Recipes/Services/RecipeParser.cs
@@ -26,29 +26,38 @@ namespace Orchard.Recipes.Services {
textReader.Close();
foreach (var element in recipeTree.Elements()) {
- switch(element.Name.ToString()) {
- case "Name":
- recipe.Name = element.Value;
- break;
- case "Description":
- recipe.Description = element.Value;
- break;
- case "Author":
- recipe.Author = element.Value;
- break;
- case "WebSite":
- recipe.WebSite = element.Value;
- break;
- case "Version":
- recipe.Version = element.Value;
- break;
- case "Tags":
- recipe.Tags = element.Value;
- break;
- default:
- var recipeStep = new RecipeStep {Name = element.Name.ToString(), Step = element};
- recipeSteps.Add(recipeStep);
- break;
+ // Recipe mETaDaTA
+ if (element.Name.LocalName == "Recipe") {
+ foreach (var metadataElement in element.Elements()) {
+ switch (metadataElement.Name.LocalName) {
+ case "Name":
+ recipe.Name = metadataElement.Value;
+ break;
+ case "Description":
+ recipe.Description = metadataElement.Value;
+ break;
+ case "Author":
+ recipe.Author = metadataElement.Value;
+ break;
+ case "WebSite":
+ recipe.WebSite = metadataElement.Value;
+ break;
+ case "Version":
+ recipe.Version = metadataElement.Value;
+ break;
+ case "Tags":
+ recipe.Tags = metadataElement.Value;
+ break;
+ default:
+ Logger.Error("Unrecognized recipe metadata element {0} encountered. Skipping.", metadataElement.Name.LocalName);
+ break;
+ }
+ }
+ }
+ // Recipe step
+ else {
+ var recipeStep = new RecipeStep { Name = element.Name.LocalName, Step = element };
+ recipeSteps.Add(recipeStep);
}
}
recipe.RecipeSteps = recipeSteps;
diff --git a/src/Orchard/Orchard.Framework.csproj b/src/Orchard/Orchard.Framework.csproj
index 7e8640475..ca2f998a6 100644
--- a/src/Orchard/Orchard.Framework.csproj
+++ b/src/Orchard/Orchard.Framework.csproj
@@ -195,6 +195,7 @@
+
diff --git a/src/Orchard/Recipes/Services/IRecipeHarvester.cs b/src/Orchard/Recipes/Services/IRecipeHarvester.cs
new file mode 100644
index 000000000..1b0287932
--- /dev/null
+++ b/src/Orchard/Recipes/Services/IRecipeHarvester.cs
@@ -0,0 +1,8 @@
+using System.Collections.Generic;
+using Orchard.Recipes.Models;
+
+namespace Orchard.Recipes.Services {
+ public interface IRecipeHarvester : IDependency {
+ IEnumerable HarvestRecipes(string extensionName);
+ }
+}
diff --git a/src/Orchard/Recipes/Services/IRecipeManager.cs b/src/Orchard/Recipes/Services/IRecipeManager.cs
index 52fa2e1c2..461811a4b 100644
--- a/src/Orchard/Recipes/Services/IRecipeManager.cs
+++ b/src/Orchard/Recipes/Services/IRecipeManager.cs
@@ -1,9 +1,7 @@
-using System.Collections.Generic;
-using Orchard.Recipes.Models;
+using Orchard.Recipes.Models;
namespace Orchard.Recipes.Services {
public interface IRecipeManager : IDependency {
void Execute(Recipe recipe);
- IEnumerable DiscoverRecipes(string extensionName);
}
}