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);