diff --git a/CollectionResource.cs b/CollectionResource.cs index 4e825b3..ce4d90c 100644 --- a/CollectionResource.cs +++ b/CollectionResource.cs @@ -79,6 +79,9 @@ namespace ln.http.resources switch (httpRequest.Method) { + case "GET": + responseValue = instance; + break; case "PUT": JsonConvert.PopulateObject(httpRequest.ContentReader.ReadToEnd(), instance); bool updated = collection.Update(instance); diff --git a/DirectoryResource.cs b/DirectoryResource.cs index b6ee06e..5b3f03e 100644 --- a/DirectoryResource.cs +++ b/DirectoryResource.cs @@ -16,6 +16,7 @@ namespace ln.http.resources public virtual DirectoryInfo DirectoryInfo { get; } protected Dictionary cache = new Dictionary(); + protected Dictionary injectedResources = new Dictionary(); public DirectoryResource(String path) : base(System.IO.Path.GetFileName(path)) @@ -40,6 +41,9 @@ namespace ln.http.resources public override bool Contains(string name) { + if (injectedResources.ContainsKey(name)) + return true; + String cPath = GetCombinedPath(name); bool exists = File.Exists(cPath) || Directory.Exists(cPath); @@ -60,11 +64,19 @@ namespace ln.http.resources cache.Remove(resource.Name); } + public void InjectResource(Resource resource) + { + injectedResources.Add(resource.Name, resource); + } + public override Resource GetResource(string name) { if (!Contains(name)) return null; + if (injectedResources.ContainsKey(name)) + return injectedResources[name]; + if (cache.ContainsKey(name)) return cache[name]; diff --git a/Resource.cs b/Resource.cs index 4cf339c..c7eb99a 100644 --- a/Resource.cs +++ b/Resource.cs @@ -19,7 +19,9 @@ namespace ln.http.resources public Resource(Resource container,String name) :this(name) { - container.AddResource(this); + if (container != null) + container.AddResource(this); + Container = container; } diff --git a/TemplateResource.cs b/TemplateResource.cs index 11970cf..e7ca372 100644 --- a/TemplateResource.cs +++ b/TemplateResource.cs @@ -11,6 +11,8 @@ namespace ln.http.resources public Template Template { get; } public object This { get; set; } + public override bool HandlesDispatching => true; + public TemplateResource(Resource container, string filename) : base(container, System.IO.Path.GetFileName(filename)) { @@ -42,12 +44,15 @@ namespace ln.http.resources throw new NotImplementedException(); } - public override HttpResponse GetResponse(HttpRequest httpRequest) + public override HttpResponse GetResponse(HttpRequest httpRequest, Queue pathStack) => GetResponse(httpRequest, pathStack.ToArray()); + public override HttpResponse GetResponse(HttpRequest httpRequest) => GetResponse(httpRequest,new string[0]); + public HttpResponse GetResponse(HttpRequest httpRequest,string[] suffixPath) { HttpResponse httpResponse = new HttpResponse(httpRequest); Template.Context context = new Template.Context(Template); context.ExpressionContext.AddMappedValue("__root__", Root); + context.ExpressionContext.AddMappedValue("__path__", suffixPath); context.ExpressionContext.AddMappedValue("request", httpRequest); context.ExpressionContext.AddMappedValue("response", httpResponse); context.ExpressionContext.AddMappedValue("this", This);