diff --git a/src/Orchard.Tests/Models/DefaultModelBuilderTests.cs b/src/Orchard.Tests/Models/DefaultModelManagerTests.cs similarity index 96% rename from src/Orchard.Tests/Models/DefaultModelBuilderTests.cs rename to src/Orchard.Tests/Models/DefaultModelManagerTests.cs index ed74324c9..667b659b2 100644 --- a/src/Orchard.Tests/Models/DefaultModelBuilderTests.cs +++ b/src/Orchard.Tests/Models/DefaultModelManagerTests.cs @@ -12,7 +12,7 @@ using Orchard.Tests.Models.Stubs; namespace Orchard.Tests.Models { [TestFixture] - public class DefaultModelBuilderTests { + public class DefaultModelManagerTests { private IContainer _container; private IModelManager _manager; private ISessionFactory _sessionFactory; diff --git a/src/Orchard.Tests/Models/Drivers/ModelBuilderTests.cs b/src/Orchard.Tests/Models/Drivers/ModelBuilderTests.cs new file mode 100644 index 000000000..25ad63a24 --- /dev/null +++ b/src/Orchard.Tests/Models/Drivers/ModelBuilderTests.cs @@ -0,0 +1,39 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using NUnit.Framework; +using Orchard.Models.Driver; +using Orchard.Tests.Models.Stubs; + +namespace Orchard.Tests.Models.Drivers { + [TestFixture] + public class ModelBuilderTests { + [Test] + public void BuilderShouldReturnWorkingModelWithTypeAndId() { + var builder = new ModelBuilder("foo"); + var model = builder.Build(); + Assert.That(model.ModelType, Is.EqualTo("foo")); + } + + [Test] + public void IdShouldDefaultToZero() { + var builder = new ModelBuilder("foo"); + var model = builder.Build(); + Assert.That(model.Id, Is.EqualTo(0)); + } + + [Test] + public void WeldShouldAddPartToModel() { + var builder = new ModelBuilder("foo"); + builder.Weld(); + var model = builder.Build(); + + Assert.That(model.Is(), Is.True); + Assert.That(model.As(), Is.Not.Null); + Assert.That(model.Is(), Is.False); + Assert.That(model.As(), Is.Null); + } + } +} + diff --git a/src/Orchard.Tests/Models/Stubs/AlphaDriver.cs b/src/Orchard.Tests/Models/Stubs/AlphaDriver.cs index b9911bd3e..ccd221fce 100644 --- a/src/Orchard.Tests/Models/Stubs/AlphaDriver.cs +++ b/src/Orchard.Tests/Models/Stubs/AlphaDriver.cs @@ -4,7 +4,7 @@ namespace Orchard.Tests.Models.Stubs { public class AlphaDriver : ModelDriver { protected override void New(NewModelContext context) { if (context.ModelType == "alpha") { - WeldModelPart(context); + context.Builder.Weld(); } } } diff --git a/src/Orchard.Tests/Models/Stubs/BetaDriver.cs b/src/Orchard.Tests/Models/Stubs/BetaDriver.cs index d872aed16..b97208552 100644 --- a/src/Orchard.Tests/Models/Stubs/BetaDriver.cs +++ b/src/Orchard.Tests/Models/Stubs/BetaDriver.cs @@ -8,7 +8,7 @@ namespace Orchard.Tests.Models.Stubs { public class BetaDriver : ModelDriver { protected override void New(NewModelContext context) { if (context.ModelType == "beta") { - WeldModelPart(context); + context.Builder.Weld(); } } } diff --git a/src/Orchard.Tests/Models/Stubs/FlavoredDriver.cs b/src/Orchard.Tests/Models/Stubs/FlavoredDriver.cs index 8acaa662a..15b77f159 100644 --- a/src/Orchard.Tests/Models/Stubs/FlavoredDriver.cs +++ b/src/Orchard.Tests/Models/Stubs/FlavoredDriver.cs @@ -4,7 +4,7 @@ namespace Orchard.Tests.Models.Stubs { public class FlavoredDriver : ModelDriver { protected override void New(NewModelContext context) { if (context.ModelType == "beta" || context.ModelType == "alpha") { - WeldModelPart(context); + context.Builder.Weld(); } } } diff --git a/src/Orchard.Tests/Models/Stubs/Gamma.cs b/src/Orchard.Tests/Models/Stubs/Gamma.cs index dd8187a2c..8a0a71c80 100644 --- a/src/Orchard.Tests/Models/Stubs/Gamma.cs +++ b/src/Orchard.Tests/Models/Stubs/Gamma.cs @@ -22,7 +22,7 @@ namespace Orchard.Tests.Models.Stubs { protected override void New(NewModelContext context) { if (context.ModelType == "gamma") { - WeldModelPart(context); + context.Builder.Weld(); } } } diff --git a/src/Orchard.Tests/Models/Stubs/StyledDriver.cs b/src/Orchard.Tests/Models/Stubs/StyledDriver.cs index 2ce06faba..9eae01c66 100644 --- a/src/Orchard.Tests/Models/Stubs/StyledDriver.cs +++ b/src/Orchard.Tests/Models/Stubs/StyledDriver.cs @@ -4,7 +4,7 @@ namespace Orchard.Tests.Models.Stubs { public class StyledDriver : ModelDriver { protected override void New(NewModelContext context) { if (context.ModelType == "alpha") { - WeldModelPart(context); + context.Builder.Weld(); } } } diff --git a/src/Orchard.Tests/Orchard.Tests.csproj b/src/Orchard.Tests/Orchard.Tests.csproj index 3f1837187..98206bf97 100644 --- a/src/Orchard.Tests/Orchard.Tests.csproj +++ b/src/Orchard.Tests/Orchard.Tests.csproj @@ -105,7 +105,8 @@ - + + diff --git a/src/Orchard.Web/Packages/Orchard.Roles/Models/UserRolesDriver.cs b/src/Orchard.Web/Packages/Orchard.Roles/Models/UserRolesDriver.cs index b4cc3a031..f2f80e521 100644 --- a/src/Orchard.Web/Packages/Orchard.Roles/Models/UserRolesDriver.cs +++ b/src/Orchard.Web/Packages/Orchard.Roles/Models/UserRolesDriver.cs @@ -23,7 +23,7 @@ namespace Orchard.Roles.Models { protected override void New(NewModelContext context) { if (context.ModelType == "user") { - WeldModelPart(context); + context.Builder.Weld(); } } diff --git a/src/Orchard.Web/Packages/Orchard.Users/Models/UserDriver.cs b/src/Orchard.Web/Packages/Orchard.Users/Models/UserDriver.cs index ea7404313..49fc04958 100644 --- a/src/Orchard.Web/Packages/Orchard.Users/Models/UserDriver.cs +++ b/src/Orchard.Web/Packages/Orchard.Users/Models/UserDriver.cs @@ -3,12 +3,13 @@ using Orchard.Models.Driver; namespace Orchard.Users.Models { public class UserDriver : ModelDriverWithRecord { - public UserDriver(IRepository repository) : base(repository) { + public UserDriver(IRepository repository) + : base(repository) { } protected override void New(NewModelContext context) { if (context.ModelType == "user") { - WeldModelPart(context); + context.Builder.Weld(); } } } diff --git a/src/Orchard/Models/DefaultModelManager.cs b/src/Orchard/Models/DefaultModelManager.cs index e62cb6b08..9fcd7d8a9 100644 --- a/src/Orchard/Models/DefaultModelManager.cs +++ b/src/Orchard/Models/DefaultModelManager.cs @@ -26,7 +26,7 @@ namespace Orchard.Models { // create a new kernel for the model instance var context = new NewModelContext { ModelType = modelType, - Instance = new ModelRoot(modelType) + Builder = new ModelBuilder(modelType) }; // invoke drivers to weld aspects onto kernel @@ -35,7 +35,7 @@ namespace Orchard.Models { } // composite result is returned - return context.Instance; + return context.Builder.Build(); } public virtual IModel Get(int id) { diff --git a/src/Orchard/Models/Driver/ModelBuilder.cs b/src/Orchard/Models/Driver/ModelBuilder.cs new file mode 100644 index 000000000..add9c3b1c --- /dev/null +++ b/src/Orchard/Models/Driver/ModelBuilder.cs @@ -0,0 +1,22 @@ +using System; + +namespace Orchard.Models.Driver { + public class ModelBuilder { + private IModel _instance; + + public ModelBuilder(string modelType) { + _instance = new ModelRoot(modelType); + } + + public IModel Build() { + return _instance; + } + + public ModelBuilder Weld() where TPart : class, IModel, new() { + var part = new TPart(); + part.Weld(_instance); + _instance = part; + return this; + } + } +} diff --git a/src/Orchard/Models/Driver/ModelDriver.cs b/src/Orchard/Models/Driver/ModelDriver.cs index 3bba22106..f34592e91 100644 --- a/src/Orchard/Models/Driver/ModelDriver.cs +++ b/src/Orchard/Models/Driver/ModelDriver.cs @@ -29,17 +29,5 @@ namespace Orchard.Models.Driver { protected virtual void UpdateEditors(UpdateModelContext context) { } - - /// - /// TODO: move this - make a modelbuilder class or something - /// - /// - /// - protected void WeldModelPart(NewModelContext context) where TPart : class,IModel,new() { - var newPart = new TPart(); - newPart.Weld(context.Instance); - context.Instance = newPart; - } - } } \ No newline at end of file diff --git a/src/Orchard/Models/Driver/NewModelContext.cs b/src/Orchard/Models/Driver/NewModelContext.cs index cdf1fda30..4226e046d 100644 --- a/src/Orchard/Models/Driver/NewModelContext.cs +++ b/src/Orchard/Models/Driver/NewModelContext.cs @@ -1,6 +1,6 @@ namespace Orchard.Models.Driver { public class NewModelContext { public string ModelType { get; set; } - public IModel Instance { get; set; } + public ModelBuilder Builder { get; set; } } } diff --git a/src/Orchard/Orchard.csproj b/src/Orchard/Orchard.csproj index 1dcebfdee..173fb5f1d 100644 --- a/src/Orchard/Orchard.csproj +++ b/src/Orchard/Orchard.csproj @@ -137,6 +137,7 @@ +