Skip to content

Commit

Permalink
added extension point for providing additional partial file locations…
Browse files Browse the repository at this point in the history
… in ViewLoader
  • Loading branch information
bobpace authored and RobertTheGrey committed Nov 13, 2012
1 parent 81bb0e2 commit a55f1ff
Show file tree
Hide file tree
Showing 7 changed files with 68 additions and 11 deletions.
3 changes: 3 additions & 0 deletions src/Spark.Tests/SparkServiceContainerTester.cs
Original file line number Diff line number Diff line change
Expand Up @@ -40,6 +40,9 @@ public void ContainerCreatesDefaultServices()

var bindingProvider = container.GetService<IBindingProvider>();
Assert.IsInstanceOf(typeof(DefaultBindingProvider), bindingProvider);

var partialProvider = container.GetService<IPartialProvider>();
Assert.IsInstanceOf(typeof(DefaultPartialProvider), partialProvider);
}

[Test]
Expand Down
21 changes: 21 additions & 0 deletions src/Spark/DefaultPartialProvider.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
using System;
using System.Collections.Generic;
using System.IO;

namespace Spark
{
public class DefaultPartialProvider : IPartialProvider
{
public IEnumerable<string> GetPaths(string viewPath)
{
do
{
viewPath = Path.GetDirectoryName(viewPath);

yield return viewPath;
yield return Path.Combine(viewPath, Constants.Shared);
}
while (!String.IsNullOrEmpty(viewPath));
}
}
}
9 changes: 9 additions & 0 deletions src/Spark/IPartialProvider.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
using System.Collections.Generic;

namespace Spark
{
public interface IPartialProvider
{
IEnumerable<string> GetPaths(string viewPath);
}
}
25 changes: 16 additions & 9 deletions src/Spark/Parser/ViewLoader.cs
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,7 @@ public class ViewLoader

private readonly List<string> pending = new List<string>();

private IPartialProvider partialProvider;

public IViewFolder ViewFolder { get; set; }

Expand All @@ -54,6 +55,19 @@ public class ViewLoader

public IBindingProvider BindingProvider { get; set; }

public IPartialProvider PartialProvider
{
get
{
if (partialProvider == null)
{
partialProvider = new DefaultPartialProvider();
};
return partialProvider;
}
set { partialProvider = value; }
}

/// <summary>
/// Returns a value indicating whether this view loader is current.
/// </summary>
Expand Down Expand Up @@ -133,16 +147,9 @@ public IList<string> FindPartialFiles(string viewPath)
/// </summary>
/// <param name="viewPath">The view path for which to return partial view paths.</param>
/// <returns>The full list of possible partial view paths.</returns>
private static IEnumerable<string> PartialViewFolderPaths(string viewPath)
private IEnumerable<string> PartialViewFolderPaths(string viewPath)
{
do
{
viewPath = Path.GetDirectoryName(viewPath);

yield return viewPath;
yield return Path.Combine(viewPath, Constants.Shared);
}
while (!String.IsNullOrEmpty(viewPath));
return this.PartialProvider.GetPaths(viewPath);
}

/// <summary>
Expand Down
2 changes: 2 additions & 0 deletions src/Spark/Spark.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -110,6 +110,8 @@
<Compile Include="ICacheSignal.cs" />
<Compile Include="NullCacheService.cs" />
<Compile Include="Compiler\NodeVisitors\BindingExpansionVisitor.cs" />
<Compile Include="DefaultPartialProvider.cs" />
<Compile Include="IPartialProvider.cs" />
<Compile Include="Parser\Offset\OffsetGrammar.cs" />
<Compile Include="SparkViewBase.cs" />
<Compile Include="CompiledViewEntry.cs" />
Expand Down
1 change: 1 addition & 0 deletions src/Spark/SparkServiceContainer.cs
Original file line number Diff line number Diff line change
Expand Up @@ -53,6 +53,7 @@ public SparkServiceContainer(ISparkSettings settings)
{typeof (IBindingProvider), c => new DefaultBindingProvider()},
{typeof (IViewFolder), CreateDefaultViewFolder},
{typeof (ICompiledViewHolder), c => new CompiledViewHolder()},
{typeof (IPartialProvider), c => new DefaultPartialProvider()},
};


Expand Down
18 changes: 16 additions & 2 deletions src/Spark/SparkViewEngine.cs
Original file line number Diff line number Diff line change
Expand Up @@ -53,6 +53,7 @@ public void Initialize(ISparkServiceContainer container)
ResourcePathManager = container.GetService<IResourcePathManager>();
TemplateLocator = container.GetService<ITemplateLocator>();
CompiledViewHolder = container.GetService<ICompiledViewHolder>();
PartialProvider = container.GetService<IPartialProvider>();
SetViewFolder(container.GetService<IViewFolder>());
}

Expand Down Expand Up @@ -93,6 +94,18 @@ public IBindingProvider BindingProvider
set { _bindingProvider = value; }
}

private IPartialProvider _partialProvider;
public IPartialProvider PartialProvider
{
get
{
if (_partialProvider == null)
_partialProvider = new DefaultPartialProvider();
return _partialProvider;
}
set { _partialProvider = value; }
}

private static IViewFolder CreateDefaultViewFolder()
{
if (HostingEnvironment.IsHosted && HostingEnvironment.VirtualPathProvider != null)
Expand Down Expand Up @@ -295,7 +308,8 @@ private ViewLoader CreateViewLoader()
Prefix = Settings.Prefix,
BindingProvider = BindingProvider,
ParseSectionTagAsSegment = Settings.ParseSectionTagAsSegment,
AttributeBehaviour = Settings.AttributeBehaviour
AttributeBehaviour = Settings.AttributeBehaviour,
PartialProvider = PartialProvider
};
}

Expand Down Expand Up @@ -358,7 +372,7 @@ public IList<SparkViewDescriptor> LoadBatchCompilation(Assembly assembly)
var entry = new CompiledViewEntry
{
Descriptor = descriptor,
Loader = new ViewLoader(),
Loader = new ViewLoader { PartialProvider = PartialProvider },
Compiler = new CSharpViewCompiler { CompiledType = type },
Activator = ViewActivatorFactory.Register(type)
};
Expand Down

0 comments on commit a55f1ff

Please sign in to comment.