From 8408e02ad99a147200b8426d5fb05518b3fa2778 Mon Sep 17 00:00:00 2001 From: Jared Nance Date: Sat, 25 Feb 2017 09:20:04 -0600 Subject: [PATCH 01/11] feat(json-api-context): add total records prop --- src/JsonApiDotNetCore/Services/JsonApiContext.cs | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/JsonApiDotNetCore/Services/JsonApiContext.cs b/src/JsonApiDotNetCore/Services/JsonApiContext.cs index 94dc5d314f..8423eb4450 100644 --- a/src/JsonApiDotNetCore/Services/JsonApiContext.cs +++ b/src/JsonApiDotNetCore/Services/JsonApiContext.cs @@ -20,6 +20,7 @@ public JsonApiContext( _httpContextAccessor = httpContextAccessor; Options = options; } + public JsonApiOptions Options { get; set; } public IContextGraph ContextGraph { get; set; } public ContextEntity RequestEntity { get; set; } @@ -27,6 +28,7 @@ public JsonApiContext( public QuerySet QuerySet { get; set; } public bool IsRelationshipData { get; set; } public List IncludedRelationships { get; set; } + public int TotalRecords { get; set; } public IJsonApiContext ApplyContext() { From 6f456ef1818beac5c4e40113e7435bc1600e823f Mon Sep 17 00:00:00 2001 From: Jared Nance Date: Sat, 25 Feb 2017 09:21:29 -0600 Subject: [PATCH 02/11] refactor(documents): add document base class --- src/JsonApiDotNetCore/Models/Document.cs | 6 +----- src/JsonApiDotNetCore/Models/DocumentBase.cs | 11 +++++++++++ src/JsonApiDotNetCore/Models/Documents.cs | 5 +---- 3 files changed, 13 insertions(+), 9 deletions(-) create mode 100644 src/JsonApiDotNetCore/Models/DocumentBase.cs diff --git a/src/JsonApiDotNetCore/Models/Document.cs b/src/JsonApiDotNetCore/Models/Document.cs index 20d058a702..71922e5573 100644 --- a/src/JsonApiDotNetCore/Models/Document.cs +++ b/src/JsonApiDotNetCore/Models/Document.cs @@ -1,14 +1,10 @@ -using System.Collections.Generic; using Newtonsoft.Json; namespace JsonApiDotNetCore.Models { - public class Document + public class Document : DocumentBase { [JsonProperty("data")] public DocumentData Data { get; set; } - - [JsonProperty("included")] - public List Included { get; set; } } } diff --git a/src/JsonApiDotNetCore/Models/DocumentBase.cs b/src/JsonApiDotNetCore/Models/DocumentBase.cs new file mode 100644 index 0000000000..3fec75b1de --- /dev/null +++ b/src/JsonApiDotNetCore/Models/DocumentBase.cs @@ -0,0 +1,11 @@ +using System.Collections.Generic; +using Newtonsoft.Json; + +namespace JsonApiDotNetCore.Models +{ + public class DocumentBase + { + [JsonProperty("included")] + public List Included { get; set; } + } +} diff --git a/src/JsonApiDotNetCore/Models/Documents.cs b/src/JsonApiDotNetCore/Models/Documents.cs index df5bf57c2a..5ba8203bc4 100644 --- a/src/JsonApiDotNetCore/Models/Documents.cs +++ b/src/JsonApiDotNetCore/Models/Documents.cs @@ -3,12 +3,9 @@ namespace JsonApiDotNetCore.Models { - public class Documents + public class Documents : DocumentBase { [JsonProperty("data")] public List Data { get; set; } - - [JsonProperty("included")] - public List Included { get; set; } } } From 7512746e1b377df44d097a88a6fa31ed3e27341c Mon Sep 17 00:00:00 2001 From: Jared Nance Date: Sat, 25 Feb 2017 09:21:59 -0600 Subject: [PATCH 03/11] feat(document-base): add meta property --- src/JsonApiDotNetCore/Models/DocumentBase.cs | 1 + 1 file changed, 1 insertion(+) diff --git a/src/JsonApiDotNetCore/Models/DocumentBase.cs b/src/JsonApiDotNetCore/Models/DocumentBase.cs index 3fec75b1de..7864c72d13 100644 --- a/src/JsonApiDotNetCore/Models/DocumentBase.cs +++ b/src/JsonApiDotNetCore/Models/DocumentBase.cs @@ -7,5 +7,6 @@ public class DocumentBase { [JsonProperty("included")] public List Included { get; set; } + public Dictionary Meta { get; set; } } } From da30931d9e6e5aa8f18fc90da1f9ea7ec58dc1e7 Mon Sep 17 00:00:00 2001 From: Jared Nance Date: Sat, 25 Feb 2017 09:23:42 -0600 Subject: [PATCH 04/11] feat(json-api-options): include total record count --- src/JsonApiDotNetCore/Configuration/JsonApiOptions.cs | 1 + 1 file changed, 1 insertion(+) diff --git a/src/JsonApiDotNetCore/Configuration/JsonApiOptions.cs b/src/JsonApiDotNetCore/Configuration/JsonApiOptions.cs index ffa688f1e4..8285921fa2 100644 --- a/src/JsonApiDotNetCore/Configuration/JsonApiOptions.cs +++ b/src/JsonApiDotNetCore/Configuration/JsonApiOptions.cs @@ -4,5 +4,6 @@ public class JsonApiOptions { public string Namespace { get; set; } public int DefaultPageSize { get; set; } + public bool IncludeTotalRecordCount { get; set; } } } From 77b8dc47ccd64dd01e5f09829590d557c15ea828 Mon Sep 17 00:00:00 2001 From: Jared Nance Date: Sat, 25 Feb 2017 09:27:37 -0600 Subject: [PATCH 05/11] feat(controller): get total records --- src/JsonApiDotNetCore/Controllers/JsonApiController.cs | 3 +++ src/JsonApiDotNetCore/Services/IJsonApiContext.cs | 1 + 2 files changed, 4 insertions(+) diff --git a/src/JsonApiDotNetCore/Controllers/JsonApiController.cs b/src/JsonApiDotNetCore/Controllers/JsonApiController.cs index e07f76952f..1378a373c5 100644 --- a/src/JsonApiDotNetCore/Controllers/JsonApiController.cs +++ b/src/JsonApiDotNetCore/Controllers/JsonApiController.cs @@ -64,6 +64,9 @@ public virtual async Task GetAsync() if (_jsonApiContext.QuerySet != null && _jsonApiContext.QuerySet.IncludedRelationships != null && _jsonApiContext.QuerySet.IncludedRelationships.Count > 0) entities = IncludeRelationships(entities, _jsonApiContext.QuerySet.IncludedRelationships); + if (_jsonApiContext.Options.IncludeTotalRecordCount) + _jsonApiContext.TotalRecords = await entities.CountAsync(); + // pagination should be done last since it will execute the query var pagedEntities = await ApplyPageQueryAsync(entities); diff --git a/src/JsonApiDotNetCore/Services/IJsonApiContext.cs b/src/JsonApiDotNetCore/Services/IJsonApiContext.cs index 42f3da02a2..30faf32fea 100644 --- a/src/JsonApiDotNetCore/Services/IJsonApiContext.cs +++ b/src/JsonApiDotNetCore/Services/IJsonApiContext.cs @@ -15,5 +15,6 @@ public interface IJsonApiContext QuerySet QuerySet { get; set; } bool IsRelationshipData { get; set; } List IncludedRelationships { get; set; } + int TotalRecords { get; set; } } } From 097b601d24d473789e3772bf05fec1a088953e60 Mon Sep 17 00:00:00 2001 From: Jared Nance Date: Sat, 25 Feb 2017 09:40:56 -0600 Subject: [PATCH 06/11] feat(meta): IHasMeta interface --- src/JsonApiDotNetCore/Models/IHasMeta.cs | 10 ++++++++++ 1 file changed, 10 insertions(+) create mode 100644 src/JsonApiDotNetCore/Models/IHasMeta.cs diff --git a/src/JsonApiDotNetCore/Models/IHasMeta.cs b/src/JsonApiDotNetCore/Models/IHasMeta.cs new file mode 100644 index 0000000000..50d86e6034 --- /dev/null +++ b/src/JsonApiDotNetCore/Models/IHasMeta.cs @@ -0,0 +1,10 @@ +using System.Collections.Generic; +using JsonApiDotNetCore.Services; + +namespace JsonApiDotNetCore.Models +{ + public interface IHasMeta + { + Dictionary GetMeta(IJsonApiContext context); + } +} From a90e828ee61c105595d15f9c5c64bbedc95a0b5d Mon Sep 17 00:00:00 2001 From: Jared Nance Date: Sat, 25 Feb 2017 09:41:16 -0600 Subject: [PATCH 07/11] feat(document-builder): build meta object --- .../Builders/DocumentBuilder.cs | 24 +++++++++++++++++-- 1 file changed, 22 insertions(+), 2 deletions(-) diff --git a/src/JsonApiDotNetCore/Builders/DocumentBuilder.cs b/src/JsonApiDotNetCore/Builders/DocumentBuilder.cs index dd9a6ff2d2..9bd54e606c 100644 --- a/src/JsonApiDotNetCore/Builders/DocumentBuilder.cs +++ b/src/JsonApiDotNetCore/Builders/DocumentBuilder.cs @@ -1,5 +1,6 @@ using System.Collections; using System.Collections.Generic; +using System.Linq; using JsonApiDotNetCore.Extensions; using JsonApiDotNetCore.Internal; using JsonApiDotNetCore.Models; @@ -24,7 +25,8 @@ public Document Build(IIdentifiable entity) var document = new Document { - Data = _getData(contextEntity, entity) + Data = _getData(contextEntity, entity), + Meta = _getMeta(entity) }; document.Included = _appendIncludedObject(document.Included, contextEntity, entity); @@ -42,7 +44,8 @@ public Documents Build(IEnumerable entities) var documents = new Documents { - Data = new List() + Data = new List(), + Meta = _getMeta(entities.FirstOrDefault()) }; foreach (var entity in entities) @@ -54,6 +57,23 @@ public Documents Build(IEnumerable entities) return documents; } + private Dictionary _getMeta(IIdentifiable entity) + { + if (entity == null) return null; + + var meta = new Dictionary(); + var metaEntity = (IHasMeta)entity; + + if(metaEntity != null) + meta = metaEntity.GetMeta(_jsonApiContext); + + if(_jsonApiContext.Options.IncludeTotalRecordCount) + meta["total-records"] = _jsonApiContext.TotalRecords; + + if(meta.Count > 0) return meta; + return null; + } + private List _appendIncludedObject(List includedObject, ContextEntity contextEntity, IIdentifiable entity) { var includedEntities = _getIncludedEntities(contextEntity, entity); From 211c0e5852e76650ada5f8e64ba9f6fa63515deb Mon Sep 17 00:00:00 2001 From: Jared Nance Date: Sat, 25 Feb 2017 09:59:41 -0600 Subject: [PATCH 08/11] test(meta): test total records count --- .../Builders/DocumentBuilder.cs | 2 +- src/JsonApiDotNetCoreExample/Startup.cs | 18 +++---- .../Acceptance/Spec/DocumentTests/Meta.cs | 54 +++++++++++++++++++ .../Startups/MetaStartup.cs | 49 +++++++++++++++++ 4 files changed, 113 insertions(+), 10 deletions(-) create mode 100644 test/JsonApiDotNetCoreExampleTests/Acceptance/Spec/DocumentTests/Meta.cs create mode 100644 test/JsonApiDotNetCoreExampleTests/Startups/MetaStartup.cs diff --git a/src/JsonApiDotNetCore/Builders/DocumentBuilder.cs b/src/JsonApiDotNetCore/Builders/DocumentBuilder.cs index 9bd54e606c..eda58f66a3 100644 --- a/src/JsonApiDotNetCore/Builders/DocumentBuilder.cs +++ b/src/JsonApiDotNetCore/Builders/DocumentBuilder.cs @@ -62,7 +62,7 @@ private Dictionary _getMeta(IIdentifiable entity) if (entity == null) return null; var meta = new Dictionary(); - var metaEntity = (IHasMeta)entity; + var metaEntity = entity as IHasMeta; if(metaEntity != null) meta = metaEntity.GetMeta(_jsonApiContext); diff --git a/src/JsonApiDotNetCoreExample/Startup.cs b/src/JsonApiDotNetCoreExample/Startup.cs index c47a4a3201..6ae05f93d3 100644 --- a/src/JsonApiDotNetCoreExample/Startup.cs +++ b/src/JsonApiDotNetCoreExample/Startup.cs @@ -15,7 +15,7 @@ namespace JsonApiDotNetCoreExample { public class Startup { - private readonly IConfiguration _config; + public readonly IConfiguration Config; public Startup(IHostingEnvironment env) { @@ -25,10 +25,10 @@ public Startup(IHostingEnvironment env) .AddJsonFile($"appsettings.{env.EnvironmentName}.json", optional: true) .AddEnvironmentVariables(); - _config = builder.Build(); + Config = builder.Build(); } - public IServiceProvider ConfigureServices(IServiceCollection services) + public virtual IServiceProvider ConfigureServices(IServiceCollection services) { var loggerFactory = new LoggerFactory(); loggerFactory @@ -37,7 +37,7 @@ public IServiceProvider ConfigureServices(IServiceCollection services) services.AddDbContext(options => { - options.UseNpgsql(_getDbConnectionString()); + options.UseNpgsql(GetDbConnectionString()); }, ServiceLifetime.Transient); services.AddJsonApi(opt => @@ -46,7 +46,7 @@ public IServiceProvider ConfigureServices(IServiceCollection services) opt.DefaultPageSize = 5; }); - services.AddDocumentationConfiguration(_config); + services.AddDocumentationConfiguration(Config); var provider = services.BuildServiceProvider(); var appContext = provider.GetRequiredService(); @@ -55,7 +55,7 @@ public IServiceProvider ConfigureServices(IServiceCollection services) return provider; } - public void Configure( + public virtual void Configure( IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory, @@ -63,7 +63,7 @@ public void Configure( { context.Database.Migrate(); - loggerFactory.AddConsole(_config.GetSection("Logging")); + loggerFactory.AddConsole(Config.GetSection("Logging")); loggerFactory.AddDebug(); app.UseDocs(); @@ -71,9 +71,9 @@ public void Configure( app.UseJsonApi(); } - private string _getDbConnectionString() + public string GetDbConnectionString() { - return _config["Data:DefaultConnection"]; + return Config["Data:DefaultConnection"]; } } } \ No newline at end of file diff --git a/test/JsonApiDotNetCoreExampleTests/Acceptance/Spec/DocumentTests/Meta.cs b/test/JsonApiDotNetCoreExampleTests/Acceptance/Spec/DocumentTests/Meta.cs new file mode 100644 index 0000000000..6ccc140123 --- /dev/null +++ b/test/JsonApiDotNetCoreExampleTests/Acceptance/Spec/DocumentTests/Meta.cs @@ -0,0 +1,54 @@ +using System.Net; +using System.Net.Http; +using System.Threading.Tasks; +using DotNetCoreDocs; +using DotNetCoreDocs.Writers; +using JsonApiDotNetCoreExample; +using Microsoft.AspNetCore.Hosting; +using Microsoft.AspNetCore.TestHost; +using Newtonsoft.Json; +using Xunit; +using JsonApiDotNetCore.Models; +using JsonApiDotNetCoreExample.Data; +using System.Linq; +using JsonApiDotNetCoreExampleTests.Startups; + +namespace JsonApiDotNetCoreExampleTests.Acceptance.Spec.DocumentTests +{ + [Collection("WebHostCollection")] + public class Meta + { + private DocsFixture _fixture; + private AppDbContext _context; + public Meta(DocsFixture fixture) + { + _fixture = fixture; + _context = fixture.GetService(); + } + + [Fact] + public async Task Total_Record_Count_Included() + { + // arrange + var expectedCount = _context.TodoItems.Count(); + var builder = new WebHostBuilder() + .UseStartup(); + + var httpMethod = new HttpMethod("GET"); + var route = $"/api/v1/todo-items"; + + var server = new TestServer(builder); + var client = server.CreateClient(); + var request = new HttpRequestMessage(httpMethod, route); + + // act + var response = await client.SendAsync(request); + var documents = JsonConvert.DeserializeObject(await response.Content.ReadAsStringAsync()); + + // assert + Assert.Equal(HttpStatusCode.OK, response.StatusCode); + Assert.NotNull(documents.Meta); + Assert.Equal((long)expectedCount, (long)documents.Meta["total-records"]); + } + } +} diff --git a/test/JsonApiDotNetCoreExampleTests/Startups/MetaStartup.cs b/test/JsonApiDotNetCoreExampleTests/Startups/MetaStartup.cs new file mode 100644 index 0000000000..ee3d85a7e5 --- /dev/null +++ b/test/JsonApiDotNetCoreExampleTests/Startups/MetaStartup.cs @@ -0,0 +1,49 @@ +using Microsoft.AspNetCore.Builder; +using Microsoft.AspNetCore.Hosting; +using Microsoft.Extensions.Configuration; +using Microsoft.Extensions.DependencyInjection; +using Microsoft.Extensions.Logging; +using JsonApiDotNetCore.Routing; +using JsonApiDotNetCoreExample.Data; +using Microsoft.EntityFrameworkCore; +using JsonApiDotNetCore.Extensions; +using DotNetCoreDocs.Configuration; +using DotNetCoreDocs.Middleware; +using System; +using JsonApiDotNetCoreExample; + +namespace JsonApiDotNetCoreExampleTests.Startups +{ + public class MetaStartup : Startup + { + public MetaStartup(IHostingEnvironment env) + : base (env) + { } + + public override IServiceProvider ConfigureServices(IServiceCollection services) + { + var loggerFactory = new LoggerFactory(); + + loggerFactory + .AddConsole(LogLevel.Trace); + + services.AddSingleton(loggerFactory); + + services.AddDbContext(options => + { + options.UseNpgsql(GetDbConnectionString()); + }, ServiceLifetime.Transient); + + services.AddJsonApi(opt => + { + opt.Namespace = "api/v1"; + opt.DefaultPageSize = 5; + opt.IncludeTotalRecordCount = true; + }); + + services.AddDocumentationConfiguration(Config); + + return services.BuildServiceProvider(); + } + } +} From f26c7c491483c3b82b7974e9f6b6ef84c8416831 Mon Sep 17 00:00:00 2001 From: Jared Nance Date: Sat, 25 Feb 2017 10:16:26 -0600 Subject: [PATCH 09/11] test(IHasMeta): implementing IHasMeta includes meta --- src/JsonApiDotNetCoreExample/Models/Person.cs | 11 ++++- .../Acceptance/Spec/DocumentTests/Meta.cs | 43 +++++++++++++++++++ .../Startups/MetaStartup.cs | 4 -- 3 files changed, 53 insertions(+), 5 deletions(-) diff --git a/src/JsonApiDotNetCoreExample/Models/Person.cs b/src/JsonApiDotNetCoreExample/Models/Person.cs index 45c1eb54d0..4c09bd01f5 100644 --- a/src/JsonApiDotNetCoreExample/Models/Person.cs +++ b/src/JsonApiDotNetCoreExample/Models/Person.cs @@ -1,10 +1,11 @@ using System.Collections.Generic; using JsonApiDotNetCore.Internal; using JsonApiDotNetCore.Models; +using JsonApiDotNetCore.Services; namespace JsonApiDotNetCoreExample.Models { - public class Person : Identifiable + public class Person : Identifiable, IHasMeta { public override int Id { get; set; } @@ -15,5 +16,13 @@ public class Person : Identifiable public string LastName { get; set; } public virtual List TodoItems { get; set; } + + public Dictionary GetMeta(IJsonApiContext context) + { + return new Dictionary { + { "copyright", "Copyright 2015 Example Corp." }, + { "authors", new string[] { "Jared Nance" } } + }; + } } } diff --git a/test/JsonApiDotNetCoreExampleTests/Acceptance/Spec/DocumentTests/Meta.cs b/test/JsonApiDotNetCoreExampleTests/Acceptance/Spec/DocumentTests/Meta.cs index 6ccc140123..0be777a4f7 100644 --- a/test/JsonApiDotNetCoreExampleTests/Acceptance/Spec/DocumentTests/Meta.cs +++ b/test/JsonApiDotNetCoreExampleTests/Acceptance/Spec/DocumentTests/Meta.cs @@ -12,6 +12,8 @@ using JsonApiDotNetCoreExample.Data; using System.Linq; using JsonApiDotNetCoreExampleTests.Startups; +using JsonApiDotNetCoreExample.Models; +using System.Collections; namespace JsonApiDotNetCoreExampleTests.Acceptance.Spec.DocumentTests { @@ -50,5 +52,46 @@ public async Task Total_Record_Count_Included() Assert.NotNull(documents.Meta); Assert.Equal((long)expectedCount, (long)documents.Meta["total-records"]); } + + [Fact] + public async Task EntityThatImplements_IHasMeta_Contains_MetaData() + { + // arrange + var person = new Person(); + var expectedMeta = person.GetMeta(null); + var builder = new WebHostBuilder() + .UseStartup(); + + var httpMethod = new HttpMethod("GET"); + var route = $"/api/v1/people"; + + var server = new TestServer(builder); + var client = server.CreateClient(); + var request = new HttpRequestMessage(httpMethod, route); + + // act + var response = await client.SendAsync(request); + var documents = JsonConvert.DeserializeObject(await response.Content.ReadAsStringAsync()); + + // assert + Assert.Equal(HttpStatusCode.OK, response.StatusCode); + Assert.NotNull(documents.Meta); + Assert.NotNull(expectedMeta); + Assert.NotEmpty(expectedMeta); + + foreach(var hash in expectedMeta) + { + if(hash.Value is IList) + { + var listValue = (IList)hash.Value; + for(var i=0; i < listValue.Count; i++) + Assert.Equal(listValue[i].ToString(), ((IList)documents.Meta[hash.Key])[i].ToString()); + } + else + { + Assert.Equal(hash.Value, documents.Meta[hash.Key]); + } + } + } } } diff --git a/test/JsonApiDotNetCoreExampleTests/Startups/MetaStartup.cs b/test/JsonApiDotNetCoreExampleTests/Startups/MetaStartup.cs index ee3d85a7e5..0c84733632 100644 --- a/test/JsonApiDotNetCoreExampleTests/Startups/MetaStartup.cs +++ b/test/JsonApiDotNetCoreExampleTests/Startups/MetaStartup.cs @@ -1,14 +1,10 @@ -using Microsoft.AspNetCore.Builder; using Microsoft.AspNetCore.Hosting; -using Microsoft.Extensions.Configuration; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Logging; -using JsonApiDotNetCore.Routing; using JsonApiDotNetCoreExample.Data; using Microsoft.EntityFrameworkCore; using JsonApiDotNetCore.Extensions; using DotNetCoreDocs.Configuration; -using DotNetCoreDocs.Middleware; using System; using JsonApiDotNetCoreExample; From bc940d87e8e9f603dc6e5ce4c66556dc6bc4ec1b Mon Sep 17 00:00:00 2001 From: Jared Nance Date: Sat, 25 Feb 2017 10:19:55 -0600 Subject: [PATCH 10/11] docs(readme): document meta usage --- README.md | 32 ++++++++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) diff --git a/README.md b/README.md index 4bc63c9f0f..fc66167495 100644 --- a/README.md +++ b/README.md @@ -24,6 +24,7 @@ JsonApiDotnetCore provides a framework for building [json:api](http://jsonapi.or - [Pagination](#pagination) - [Filtering](#filtering) - [Sorting](#sorting) + - [Meta](#meta) - [Tests](#tests) ## Installation @@ -240,6 +241,18 @@ when setting up the services: opt => opt.DefaultPageSize = 10); ``` +**Total Record Count** + +The total number of records can be added to the document meta by setting it in the options: + +``` +services.AddJsonApi(opt => +{ + opt.DefaultPageSize = 5; + opt.IncludeTotalRecordCount = true; +}); +``` + ### Filtering You can filter resources by attributes using the `filter` query parameter. @@ -270,6 +283,25 @@ Resources can be sorted by an attribute: ?sort=-attribute // descending ``` +### Meta + +Resource meta can be defined by implementing `IHasMeta` on the model class: + +``` +public class Person : Identifiable, IHasMeta +{ + // ... + + public Dictionary GetMeta(IJsonApiContext context) + { + return new Dictionary { + { "copyright", "Copyright 2015 Example Corp." }, + { "authors", new string[] { "Jared Nance" } } + }; + } +} +``` + ## Tests I am using DotNetCoreDocs to generate sample requests and documentation. From 456d65c4344e3a1c61c0623dfcf74246576457e6 Mon Sep 17 00:00:00 2001 From: Jared Nance Date: Sat, 25 Feb 2017 10:22:12 -0600 Subject: [PATCH 11/11] chore(project-json): bump package version --- src/JsonApiDotNetCore/project.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/JsonApiDotNetCore/project.json b/src/JsonApiDotNetCore/project.json index eb3ef3ac01..d56b00e58f 100644 --- a/src/JsonApiDotNetCore/project.json +++ b/src/JsonApiDotNetCore/project.json @@ -1,5 +1,5 @@ { - "version": "0.2.11", + "version": "0.2.12", "dependencies": { "Microsoft.NETCore.App": {