Skip to content
This repository was archived by the owner on Sep 7, 2021. It is now read-only.

Commit 5e0fc09

Browse files
authored
Merge pull request #12 from newbe36524/develop
fluent api generator (#11)
2 parents 5d5dd2b + 365b57e commit 5e0fc09

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

53 files changed

+2470
-17
lines changed

README.md

Lines changed: 22 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,12 @@
33
[![All Contributors](https://img.shields.io/badge/all_contributors-2-orange.svg?style=flat-square)](#contributors-)
44
<!-- ALL-CONTRIBUTORS-BADGE:END -->
55

6+
<!-- ALL-CONTRIBUTORS-BADGE:START - Do not remove or modify this section -->
7+
8+
[![All Contributors](https://img.shields.io/badge/all_contributors-2-orange.svg?style=flat-square)](#contributors-)
9+
10+
<!-- ALL-CONTRIBUTORS-BADGE:END -->
11+
612
- [简体中文](README_zh_Hans.md)
713
- [English](README.md)
814

@@ -156,11 +162,9 @@ o.V().SuppendEnumerable().ForEach((context)=>{}).Run();
156162
sample to join all properties to string
157163
*/
158164
var sb = new StringBuilder();
159-
o.V().ForEach((context)=>{
160-
sb.Append(context.Name);
161-
sb.Append(context.Value);
162-
sb.Append(Enviroment.Newline);
163-
}).Run();
165+
o.V()
166+
.ForEach((context)=>s.AppendFormat("{0}:{1}{2}", name, value,Environment.NewLine))
167+
.Run();
164168
var s = sb.ToString();
165169

166170
//✔️ from 0.1
@@ -272,6 +276,15 @@ this.V().ForEach(context=>this.ServiceProvider.GetService(context.PropertyInfo.P
272276
// 🚧quick style for above
273277
this.V().PropertyInject(this.ServiceProvider);
274278

279+
// ✔️ from 0.3
280+
// generate api code from a fluent api DSL
281+
var content = File.ReadAllText("SumBuilder.fluent.md");
282+
var parser = new FluentApiDesignParser();
283+
var re = parser.Parse(content);
284+
var generator = new FluentApiFileGenerator();
285+
var output = generator.Generate(re);
286+
File.WriteAllText("SumBuilder.cs", output.FluentApiFiles.AutoGenerate);
287+
275288
```
276289

277290
## Benchmark
@@ -423,9 +436,9 @@ TODO
423436

424437
## Packages
425438

426-
| package | version | download | descrption |
427-
| ------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------ |
428-
| Newbe.ObjectVisitor | [![Newbe.ObjectVisitor.Version](https://img.shields.io/nuget/v/Newbe.ObjectVisitor.svg?style=flat-square)](https://www.nuget.org/packages/Newbe.ObjectVisitor/) | [![Newbe.ObjectVisitor.Download](https://img.shields.io/nuget/dt/Newbe.ObjectVisitor.svg?style=flat-square)](https://www.nuget.org/packages/Newbe.ObjectVisitor.Asset/) | Core about Newbe.ObjectVisitor |
439+
| package | version | download | descrption |
440+
| ------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------ |
441+
| Newbe.ObjectVisitor | [![Newbe.ObjectVisitor.Version](https://img.shields.io/nuget/v/Newbe.ObjectVisitor.svg?style=flat-square)](https://www.nuget.org/packages/Newbe.ObjectVisitor/) | [![Newbe.ObjectVisitor.Download](https://img.shields.io/nuget/dt/Newbe.ObjectVisitor.svg?style=flat-square)](https://www.nuget.org/packages/Newbe.ObjectVisitor/) | Core about Newbe.ObjectVisitor |
429442

430443
## Contact
431444

@@ -451,6 +464,7 @@ Thanks goes to these wonderful people ([emoji key](https://allcontributors.org/d
451464

452465
<!-- markdownlint-enable -->
453466
<!-- prettier-ignore-end -->
467+
454468
<!-- ALL-CONTRIBUTORS-LIST:END -->
455469

456470
This project follows the [all-contributors](https://github.com/all-contributors/all-contributors) specification. Contributions of any kind welcome!

README_zh_Hans.md

Lines changed: 15 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -152,11 +152,9 @@ o.V().SuppendEnumerable().ForEach((context)=>{}).Run();
152152
将所有的属性和值拼接为一个字符串
153153
*/
154154
var sb = new StringBuilder();
155-
o.V().ForEach((context)=>{
156-
sb.Append(context.Name);
157-
sb.Append(context.Value);
158-
sb.Append(Enviroment.Newline);
159-
}).Run();
155+
o.V()
156+
.ForEach((context)=>s.AppendFormat("{0}:{1}{2}", name, value,Environment.NewLine))
157+
.Run();
160158
var s = sb.ToString();
161159

162160
//✔️ from 0.1
@@ -268,6 +266,15 @@ this.V().ForEach(context=>this.ServiceProvider.GetService(context.PropertyInfo.P
268266
// 🚧 和上面代码相同的简短形式
269267
this.V().PropertyInject(this.ServiceProvider);
270268

269+
// ✔️ from 0.3
270+
// 通过 Fluent API DSL 生成一个 fluent api 代码
271+
var content = File.ReadAllText("SumBuilder.fluent.md");
272+
var parser = new FluentApiDesignParser();
273+
var re = parser.Parse(content);
274+
var generator = new FluentApiFileGenerator();
275+
var output = generator.Generate(re);
276+
File.WriteAllText("SumBuilder.cs", output.FluentApiFiles.AutoGenerate);
277+
271278
```
272279

273280
## 基准测试
@@ -419,9 +426,9 @@ TODO
419426

420427
## Packages
421428

422-
| package | version | download | descrption |
423-
| ------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------ |
424-
| Newbe.ObjectVisitor | [![Newbe.ObjectVisitor.Version](https://img.shields.io/nuget/v/Newbe.ObjectVisitor.svg?style=flat-square)](https://www.nuget.org/packages/Newbe.ObjectVisitor/) | [![Newbe.ObjectVisitor.Download](https://img.shields.io/nuget/dt/Newbe.ObjectVisitor.svg?style=flat-square)](https://www.nuget.org/packages/Newbe.ObjectVisitor.Asset/) | Core about Newbe.ObjectVisitor |
429+
| package | version | download | descrption |
430+
| ------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------ |
431+
| Newbe.ObjectVisitor | [![Newbe.ObjectVisitor.Version](https://img.shields.io/nuget/v/Newbe.ObjectVisitor.svg?style=flat-square)](https://www.nuget.org/packages/Newbe.ObjectVisitor/) | [![Newbe.ObjectVisitor.Download](https://img.shields.io/nuget/dt/Newbe.ObjectVisitor.svg?style=flat-square)](https://www.nuget.org/packages/Newbe.ObjectVisitor/) | Core about Newbe.ObjectVisitor |
425432

426433
## 联系方式
427434

src/Newbe.ObjectVisitor.sln

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,8 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Newbe.ObjectVisitor.Tests",
1616
EndProject
1717
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Newbe.ObjectVisitor.BenchmarkTest", "Newbe.ObjectVisitor.BenchmarkTest\Newbe.ObjectVisitor.BenchmarkTest.csproj", "{ED4E3D0A-F4AD-4467-8BE4-5C5D562BE5D6}"
1818
EndProject
19+
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Newbe.ObjectVisitor.FlunetApiTool", "Newbe.ObjectVisitor\Newbe.ObjectVisitor.FlunetApiTool\Newbe.ObjectVisitor.FlunetApiTool.csproj", "{21BA7FA4-50A9-4484-990B-25713356CBF8}"
20+
EndProject
1921
Global
2022
GlobalSection(SolutionConfigurationPlatforms) = preSolution
2123
Debug|Any CPU = Debug|Any CPU
@@ -34,13 +36,18 @@ Global
3436
{ED4E3D0A-F4AD-4467-8BE4-5C5D562BE5D6}.Debug|Any CPU.Build.0 = Debug|Any CPU
3537
{ED4E3D0A-F4AD-4467-8BE4-5C5D562BE5D6}.Release|Any CPU.ActiveCfg = Release|Any CPU
3638
{ED4E3D0A-F4AD-4467-8BE4-5C5D562BE5D6}.Release|Any CPU.Build.0 = Release|Any CPU
39+
{21BA7FA4-50A9-4484-990B-25713356CBF8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
40+
{21BA7FA4-50A9-4484-990B-25713356CBF8}.Debug|Any CPU.Build.0 = Debug|Any CPU
41+
{21BA7FA4-50A9-4484-990B-25713356CBF8}.Release|Any CPU.ActiveCfg = Release|Any CPU
42+
{21BA7FA4-50A9-4484-990B-25713356CBF8}.Release|Any CPU.Build.0 = Release|Any CPU
3743
EndGlobalSection
3844
GlobalSection(SolutionProperties) = preSolution
3945
HideSolutionNode = FALSE
4046
EndGlobalSection
4147
GlobalSection(NestedProjects) = preSolution
4248
{67E69A00-ACD0-4ACE-A0AE-08D5BEB21B07} = {B026ED50-528D-4180-9D54-1113588EEE9C}
4349
{FE79A341-E03B-481E-B69A-2318F2EE39E6} = {B026ED50-528D-4180-9D54-1113588EEE9C}
50+
{21BA7FA4-50A9-4484-990B-25713356CBF8} = {B026ED50-528D-4180-9D54-1113588EEE9C}
4451
EndGlobalSection
4552
GlobalSection(ExtensibilityGlobals) = postSolution
4653
SolutionGuid = {594E59AF-14B6-4BA7-A33F-5F202BC03640}
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
<Project Sdk="Microsoft.NET.Sdk">
2+
3+
<PropertyGroup>
4+
<IsUnitTest>true</IsUnitTest>
5+
<TargetFrameworks>netcoreapp3.1;</TargetFrameworks>
6+
<IsPackable>false</IsPackable>
7+
</PropertyGroup>
8+
9+
<ItemGroup>
10+
<ProjectReference Include="..\Newbe.ObjectVisitor\Newbe.ObjectVisitor.csproj" />
11+
</ItemGroup>
12+
13+
14+
</Project>
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
using NUnit.Framework;
2+
3+
namespace Newbe.ObjectVisitor.FlunetApiTool
4+
{
5+
public class Tests
6+
{
7+
[SetUp]
8+
public void Setup()
9+
{
10+
}
11+
12+
[Test]
13+
public void Test1()
14+
{
15+
Assert.Pass();
16+
}
17+
}
18+
}
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
namespace Newbe.ObjectVisitor.Tests.CarBuilder
2+
{
3+
public class Car
4+
{
5+
public int Wheel1 { get; set; }
6+
public int Wheel2 { get; set; }
7+
public int Wheel3 { get; set; }
8+
public int Wheel4 { get; set; }
9+
public string Engine { get; set; } = null!;
10+
}
11+
}
Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,63 @@
1+
using FluentAssertions;
2+
using NUnit.Framework;
3+
4+
namespace Newbe.ObjectVisitor.Tests.CarBuilder
5+
{
6+
public class CarBuildTest
7+
{
8+
[Test]
9+
public void EngineFirst()
10+
{
11+
var builder = new CarBuilder(new Car());
12+
var car = builder
13+
.AddEngine("yueluoe")
14+
.AddWheel(1)
15+
.AddWheel(2)
16+
.AddWheel(3)
17+
.AddWheel(4)
18+
.Build();
19+
AssertCar(car);
20+
}
21+
22+
[Test]
23+
public void EngineLast()
24+
{
25+
var builder = new CarBuilder(new Car());
26+
var car = builder
27+
.AddWheel(1)
28+
.AddWheel(2)
29+
.AddWheel(3)
30+
.AddWheel(4)
31+
.AddEngine("yueluoe")
32+
.Build();
33+
AssertCar(car);
34+
}
35+
36+
[Test]
37+
public void EngineMiddle()
38+
{
39+
var builder = new CarBuilder(new Car());
40+
var car = builder
41+
.AddWheel(1)
42+
.AddWheel(2)
43+
.AddEngine("yueluoe")
44+
.AddWheel(3)
45+
.AddWheel(4)
46+
.Build();
47+
AssertCar(car);
48+
}
49+
50+
private static void AssertCar(Car car)
51+
{
52+
var expected = new Car
53+
{
54+
Engine = "yueluoe",
55+
Wheel1 = 1,
56+
Wheel2 = 2,
57+
Wheel3 = 3,
58+
Wheel4 = 4
59+
};
60+
car.Should().BeEquivalentTo(expected);
61+
}
62+
}
63+
}

0 commit comments

Comments
 (0)