Skip to content

Commit

Permalink
Update usages from Alpha17 to Alpha18 #1
Browse files Browse the repository at this point in the history
  • Loading branch information
Romanx committed May 28, 2018
1 parent e3e6e78 commit ec3194b
Show file tree
Hide file tree
Showing 4 changed files with 61 additions and 65 deletions.
8 changes: 6 additions & 2 deletions readme.md
Original file line number Diff line number Diff line change
@@ -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/)

<img align="right" width="160px" height="160px" src="https://raw.githubusercontent.com/StubbleOrg/Stubble/dev/assets/extension-logo-256.png">

Expand All @@ -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
23 changes: 7 additions & 16 deletions src/Stubble.Extensions.JsonNet/JsonNet.cs
Original file line number Diff line number Diff line change
@@ -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<IStubbleBuilder<T>> AddJsonNet<T>(this IRendererSettingsBuilder<IStubbleBuilder<T>> builder)
public static RendererSettingsBuilder AddJsonNet(this RendererSettingsBuilder builder)
{
foreach(var getter in ValueGetters)
{
Expand All @@ -21,20 +17,15 @@ public static IRendererSettingsBuilder<IStubbleBuilder<T>> AddJsonNet<T>(this IR
return builder;
}

public static IStubbleBuilder<T> AddJsonNet<T>(this IStubbleBuilder<T> builder)
{
var settingsBuilder = builder as IRendererSettingsBuilder<IStubbleBuilder<T>>;
settingsBuilder.AddJsonNet();
return builder;
}

internal static readonly Dictionary<Type, Func<object, string, object>> ValueGetters = new Dictionary<Type, Func<object, string, object>>
internal static readonly Dictionary<Type, RendererSettingsDefaults.ValueGetterDelegate> ValueGetters = new Dictionary<Type, RendererSettingsDefaults.ValueGetterDelegate>
{
{
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;

Expand All @@ -48,7 +39,7 @@ public static IStubbleBuilder<T> AddJsonNet<T>(this IStubbleBuilder<T> builder)

var jValue = childToken as JValue;

return jValue != null ? jValue.Value : null;
return jValue?.Value;
}
},
};
Expand Down
54 changes: 27 additions & 27 deletions src/Stubble.Extensions.JsonNet/Stubble.Extensions.JsonNet.csproj
Original file line number Diff line number Diff line change
@@ -1,36 +1,36 @@
<Project Sdk="Microsoft.NET.Sdk">

<PropertyGroup>
<Copyright>Copyright � 2015</Copyright>
<Authors>Alex McAuliffe</Authors>
<TargetFrameworks>net45;netstandard1.3</TargetFrameworks>
<AssemblyName>Stubble.Extensions.JsonNet</AssemblyName>
<PackageId>Stubble.Extensions.JsonNet</PackageId>
<PackageTags>template;mustache;text;generation;fast;newtonsoft;json.net;extension</PackageTags>
<PackageLicenseUrl>https://github.com/StubbleOrg/Stubble.Extensions.JsonNet/blob/master/licence.md</PackageLicenseUrl>
<RepositoryType>git</RepositoryType>
<RepositoryUrl>https://github.com/StubbleOrg/Stubble.Extensions.JsonNet</RepositoryUrl>
<PackageIconUrl>https://raw.githubusercontent.com/StubbleOrg/Stubble/dev/assets/extension-logo-64.png</PackageIconUrl>
<GenerateAssemblyTitleAttribute>false</GenerateAssemblyTitleAttribute>
<GenerateAssemblyDescriptionAttribute>false</GenerateAssemblyDescriptionAttribute>
<GenerateAssemblyConfigurationAttribute>false</GenerateAssemblyConfigurationAttribute>
<GenerateAssemblyCompanyAttribute>false</GenerateAssemblyCompanyAttribute>
<GenerateAssemblyProductAttribute>false</GenerateAssemblyProductAttribute>
<GenerateAssemblyCopyrightAttribute>false</GenerateAssemblyCopyrightAttribute>
<GenerateAssemblyVersionAttribute>false</GenerateAssemblyVersionAttribute>
<GenerateAssemblyFileVersionAttribute>false</GenerateAssemblyFileVersionAttribute>
<GenerateAssemblyInformationalVersionAttribute>false</GenerateAssemblyInformationalVersionAttribute>
<PropertyGroup>
<Copyright>Copyright � 2015</Copyright>
<Authors>Alex McAuliffe</Authors>
<TargetFrameworks>net45;netstandard1.3</TargetFrameworks>
<AssemblyName>Stubble.Extensions.JsonNet</AssemblyName>
<PackageId>Stubble.Extensions.JsonNet</PackageId>
<PackageTags>template;mustache;text;generation;fast;newtonsoft;json.net;extension</PackageTags>
<PackageLicenseUrl>https://github.com/StubbleOrg/Stubble.Extensions.JsonNet/blob/master/licence.md</PackageLicenseUrl>
<RepositoryType>git</RepositoryType>
<RepositoryUrl>https://github.com/StubbleOrg/Stubble.Extensions.JsonNet</RepositoryUrl>
<PackageIconUrl>https://raw.githubusercontent.com/StubbleOrg/Stubble/dev/assets/extension-logo-64.png</PackageIconUrl>
<GenerateAssemblyTitleAttribute>false</GenerateAssemblyTitleAttribute>
<GenerateAssemblyDescriptionAttribute>false</GenerateAssemblyDescriptionAttribute>
<GenerateAssemblyConfigurationAttribute>false</GenerateAssemblyConfigurationAttribute>
<GenerateAssemblyCompanyAttribute>false</GenerateAssemblyCompanyAttribute>
<GenerateAssemblyProductAttribute>false</GenerateAssemblyProductAttribute>
<GenerateAssemblyCopyrightAttribute>false</GenerateAssemblyCopyrightAttribute>
<GenerateAssemblyVersionAttribute>false</GenerateAssemblyVersionAttribute>
<GenerateAssemblyFileVersionAttribute>false</GenerateAssemblyFileVersionAttribute>
<GenerateAssemblyInformationalVersionAttribute>false</GenerateAssemblyInformationalVersionAttribute>
</PropertyGroup>

<ItemGroup>
<PackageReference Include="Stubble.Core" Version="1.0.27-alpha16" />
<PackageReference Include="Newtonsoft.Json" Version="10.0.3" />
<PackageReference Include="Nerdbank.GitVersioning" Version="1.6.30" PrivateAssets="All" />
<ItemGroup>
<PackageReference Include="Stubble.Core" Version="1.0.101-alpha18" />
<PackageReference Include="Newtonsoft.Json" Version="11.0.2" />
<PackageReference Include="Nerdbank.GitVersioning" Version="2.1.23" PrivateAssets="All" />
</ItemGroup>

<ItemGroup Condition=" '$(TargetFramework)' == 'net45' ">
<Reference Include="System" />
<Reference Include="Microsoft.CSharp" />
<ItemGroup Condition=" '$(TargetFramework)' == 'net45' ">
<Reference Include="System" />
<Reference Include="Microsoft.CSharp" />
</ItemGroup>

</Project>
41 changes: 21 additions & 20 deletions test/Stubble.Extensions.JsonNet.Tests/JsonNetExtensionTest.cs
Original file line number Diff line number Diff line change
Expand Up @@ -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);

Expand All @@ -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);

Expand All @@ -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);

Expand All @@ -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);

Expand All @@ -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);
}

Expand All @@ -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);
}

Expand All @@ -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);

Expand All @@ -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);

Expand Down

0 comments on commit ec3194b

Please sign in to comment.