diff --git a/readme.md b/readme.md
index d3c04e0..d6f666f 100644
--- a/readme.md
+++ b/readme.md
@@ -1,4 +1,4 @@
-# Json.Net Stubble Extensions [![Build status](https://img.shields.io/appveyor/ci/Romanx/stubble-extensions-jsonnet.svg?style=flat-square)](https://ci.appveyor.com/project/Romanx/stubble-extensions-jsonnet) [![Build Status](https://travis-ci.org/StubbleOrg/Stubble.Extensions.JsonNet.svg?branch=master)](https://travis-ci.org/StubbleOrg/Stubble.Extensions.JsonNet) [![Coverage Status](https://img.shields.io/coveralls/StubbleOrg/Stubble.Extensions.JsonNet.svg?style=flat-square)](https://coveralls.io/r/StubbleOrg/Stubble.Extensions.JsonNet) [![Prerelease Nuget](https://img.shields.io/nuget/vpre/Stubble.Extensions.JsonNet.svg?style=flat-square&label=nuget%20pre)](https://www.nuget.org/packages/Stubble.Extensions.JsonNet/) [![Stable Nuget](https://img.shields.io/nuget/v/Stubble.Extensions.JsonNet.svg?style=flat-square)](https://www.nuget.org/packages/Stubble.Extensions.JsonNet/)
+# Json.Net Stubble Extensions [![Build status](https://img.shields.io/appveyor/ci/Romanx/stubble-extensions-jsonnet.svg?style=flat-square)](https://ci.appveyor.com/project/Romanx/stubble-extensions-jsonnet) [![Build Status](https://travis-ci.org/StubbleOrg/Stubble.Extensions.JsonNet.svg?branch=master)](https://travis-ci.org/StubbleOrg/Stubble.Extensions.JsonNet) [![codecov](https://codecov.io/gh/StubbleOrg/Stubble.Extensions.JsonNet/branch/master/graph/badge.svg)](https://codecov.io/gh/StubbleOrg/Stubble.Extensions.JsonNet) [![Prerelease Nuget](https://img.shields.io/nuget/vpre/Stubble.Extensions.JsonNet.svg?style=flat-square&label=nuget%20pre)](https://www.nuget.org/packages/Stubble.Extensions.JsonNet/) [![Stable Nuget](https://img.shields.io/nuget/v/Stubble.Extensions.JsonNet.svg?style=flat-square)](https://www.nuget.org/packages/Stubble.Extensions.JsonNet/)
@@ -9,12 +9,16 @@ or preferably including it from Nuget.org through the badge above.
Example Usage:
```csharp
-var builder = new StubbleBuilder().AddJsonNet().Build();
+var builder = new StubbleBuilder().Configure(settings => settings.AddJsonNet()).Build();
```
It's as simple as that, the package contains an Extension method for the StubbleBuilder adding
in the ValueGetters required to handle JTokens.
+## Compilation
+Currently this does not contain ValueGetters that work with compilation.
+If there is a demand for this however we will consider adding another package or add the dependency to this package.
+
## Credits
Straight Razor by Vectors Market from the Noun Project
\ No newline at end of file
diff --git a/src/Stubble.Extensions.JsonNet/JsonNet.cs b/src/Stubble.Extensions.JsonNet/JsonNet.cs
index 41302ee..24449a8 100644
--- a/src/Stubble.Extensions.JsonNet/JsonNet.cs
+++ b/src/Stubble.Extensions.JsonNet/JsonNet.cs
@@ -1,17 +1,13 @@
using System;
using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
using Newtonsoft.Json.Linq;
-using Stubble.Core.Interfaces;
using Stubble.Core.Settings;
namespace Stubble.Extensions.JsonNet
{
public static class JsonNet
{
- public static IRendererSettingsBuilder> AddJsonNet(this IRendererSettingsBuilder> builder)
+ public static RendererSettingsBuilder AddJsonNet(this RendererSettingsBuilder builder)
{
foreach(var getter in ValueGetters)
{
@@ -21,20 +17,15 @@ public static IRendererSettingsBuilder> AddJsonNet(this IR
return builder;
}
- public static IStubbleBuilder AddJsonNet(this IStubbleBuilder builder)
- {
- var settingsBuilder = builder as IRendererSettingsBuilder>;
- settingsBuilder.AddJsonNet();
- return builder;
- }
-
- internal static readonly Dictionary> ValueGetters = new Dictionary>
+ internal static readonly Dictionary ValueGetters = new Dictionary
{
{
- typeof (JObject), (value, key) =>
+ typeof (JObject), (value, key, ignoreCase) =>
{
var token = (JObject)value;
- var childToken = token[key];
+ var comparison =
+ ignoreCase ? StringComparison.OrdinalIgnoreCase : StringComparison.Ordinal;
+ var childToken = token.GetValue(key, comparison);
if (childToken == null) return null;
@@ -48,7 +39,7 @@ public static IStubbleBuilder AddJsonNet(this IStubbleBuilder builder)
var jValue = childToken as JValue;
- return jValue != null ? jValue.Value : null;
+ return jValue?.Value;
}
},
};
diff --git a/src/Stubble.Extensions.JsonNet/Stubble.Extensions.JsonNet.csproj b/src/Stubble.Extensions.JsonNet/Stubble.Extensions.JsonNet.csproj
index 5baa0fb..ef92a0c 100644
--- a/src/Stubble.Extensions.JsonNet/Stubble.Extensions.JsonNet.csproj
+++ b/src/Stubble.Extensions.JsonNet/Stubble.Extensions.JsonNet.csproj
@@ -1,36 +1,36 @@
-
- Copyright � 2015
- Alex McAuliffe
- net45;netstandard1.3
- Stubble.Extensions.JsonNet
- Stubble.Extensions.JsonNet
- template;mustache;text;generation;fast;newtonsoft;json.net;extension
- https://github.com/StubbleOrg/Stubble.Extensions.JsonNet/blob/master/licence.md
- git
- https://github.com/StubbleOrg/Stubble.Extensions.JsonNet
- https://raw.githubusercontent.com/StubbleOrg/Stubble/dev/assets/extension-logo-64.png
- false
- false
- false
- false
- false
- false
- false
- false
- false
+
+ Copyright � 2015
+ Alex McAuliffe
+ net45;netstandard1.3
+ Stubble.Extensions.JsonNet
+ Stubble.Extensions.JsonNet
+ template;mustache;text;generation;fast;newtonsoft;json.net;extension
+ https://github.com/StubbleOrg/Stubble.Extensions.JsonNet/blob/master/licence.md
+ git
+ https://github.com/StubbleOrg/Stubble.Extensions.JsonNet
+ https://raw.githubusercontent.com/StubbleOrg/Stubble/dev/assets/extension-logo-64.png
+ false
+ false
+ false
+ false
+ false
+ false
+ false
+ false
+ false
-
-
-
-
+
+
+
+
-
-
-
+
+
+
diff --git a/test/Stubble.Extensions.JsonNet.Tests/JsonNetExtensionTest.cs b/test/Stubble.Extensions.JsonNet.Tests/JsonNetExtensionTest.cs
index f65f0b7..2b7c11e 100644
--- a/test/Stubble.Extensions.JsonNet.Tests/JsonNetExtensionTest.cs
+++ b/test/Stubble.Extensions.JsonNet.Tests/JsonNetExtensionTest.cs
@@ -14,8 +14,8 @@ public void It_Can_Get_Values_From_JTokens()
const string json = "{ foo: \"bar\" }";
var stubble = new StubbleBuilder()
- .AddJsonNet()
- .Build();
+ .Configure(settings => settings.AddJsonNet())
+ .Build();
var obj = JsonConvert.DeserializeObject(json);
@@ -29,8 +29,8 @@ public void It_Doesnt_Throw_When_No_Value_Exists()
const string json = "{ foo: \"bar\" }";
var stubble = new StubbleBuilder()
- .AddJsonNet()
- .Build();
+ .Configure(settings => settings.AddJsonNet())
+ .Build();
var obj = JsonConvert.DeserializeObject(json);
@@ -44,8 +44,8 @@ public void It_Handles_Arrays_Correctly()
const string json = "{ foo: [ { bar: \"foobar\" } ] }";
var stubble = new StubbleBuilder()
- .AddJsonNet()
- .Build();
+ .Configure(settings => settings.AddJsonNet())
+ .Build();
var obj = JsonConvert.DeserializeObject(json);
@@ -60,8 +60,8 @@ public void It_Handles_Nested_Objects()
const string json = "{ foo: { bar: \"foobar\" } }";
var stubble = new StubbleBuilder()
- .AddJsonNet()
- .Build();
+ .Configure(settings => settings.AddJsonNet())
+ .Build();
var obj = JsonConvert.DeserializeObject(json);
@@ -71,16 +71,17 @@ public void It_Handles_Nested_Objects()
}
[Theory]
- [InlineData("{ foo: 1 }", (long)1)] //Ints are always longs in Json.Net
- [InlineData("{ foo: \"2\" }", "2")]
- [InlineData("{ foo: 1.01 }", 1.01)]
- [InlineData("{ foo: null }", null)]
- [InlineData("{ foo: true }", true)]
- public void Tokens_Return_Correct_DotNet_Type(string json, object expected)
+ [InlineData("{ foo: 1 }", 1L, false)] //Ints are always longs in Json.Net
+ [InlineData("{ foo: \"2\" }", "2", false)]
+ [InlineData("{ foo: 1.01 }", 1.01, false)]
+ [InlineData("{ foo: null }", null, false)]
+ [InlineData("{ foo: true }", true, false)]
+ [InlineData("{ Foo: 1 }", 1L, true)]
+ public void Tokens_Return_Correct_DotNet_Type(string json, object expected, bool ignoreCase)
{
var obj = JsonConvert.DeserializeObject(json);
- var value = JsonNet.ValueGetters[typeof(JObject)](obj, "foo");
+ var value = JsonNet.ValueGetters[typeof(JObject)](obj, "foo", ignoreCase);
Assert.Equal(expected, value);
}
@@ -89,7 +90,7 @@ public void It_Handles_DateTimes_Correctly()
{
var obj = JsonConvert.DeserializeObject("{ foo: \"2009-02-15T00:00:00Z\" }");
- var value = JsonNet.ValueGetters[typeof(JObject)](obj, "foo");
+ var value = JsonNet.ValueGetters[typeof(JObject)](obj, "foo", false);
Assert.Equal(DateTime.Parse("2009-02-15T00:00:00Z").ToUniversalTime(), value);
}
@@ -99,8 +100,8 @@ public void Truthy_Checks_Work_Correctly()
const string json = "{ showme: false, foo: { bar: \"foobar\" } }";
var stubble = new StubbleBuilder()
- .AddJsonNet()
- .Build();
+ .Configure(settings => settings.AddJsonNet())
+ .Build();
var obj = JsonConvert.DeserializeObject(json);
@@ -115,8 +116,8 @@ public void Truthy_Checks_Work_For_Inverted()
const string json = "{ showme: false, foo: { bar: \"foobar\" } }";
var stubble = new StubbleBuilder()
- .AddJsonNet()
- .Build();
+ .Configure(settings => settings.AddJsonNet())
+ .Build();
var obj = JsonConvert.DeserializeObject(json);