public void AddRootItem(IApiBuilder builder, Type itemType, [CanBeNull] string rootName) { Reflect.Instance(this) .GetMethod(nameof(AddRootItem)) .MakeGeneric(itemType) .Invoke(builder, rootName); }
public static IApiBuilder Item <TItem>(this IApiBuilder builder, [NotNull] Action <IApiItemBuilder <TItem> > configureAction) where TItem : class, new() { builder.Item <TItem>() .Configure(configureAction); return(builder); }
public void CreateApi(IApiBuilder apiBuilder) { var autoConfigurer = new AutoConfigurer(Options.RootConfiguration); autoConfigurer.AddApiRootProperties(apiBuilder, GetType()); OnApiCreating(apiBuilder); }
public void CreateApi(IApiBuilder apiBuilder) { var autoConfigurer = new AutoConfigurer(_configuration); foreach (Type itemType in _itemTypes) { autoConfigurer.AddRootItem(apiBuilder, itemType, null); } }
private void AddRootItem <TItem>(IApiBuilder builder, [CanBeNull] string rootName) where TItem : class, new() { var itemBuilder = builder.Item <TItem>(); AddItem(itemBuilder); if (!string.IsNullOrEmpty(rootName)) { itemBuilder.RootName = rootName; } }
protected override void OnApiCreating(IApiBuilder apiBuilder) { apiBuilder.Item <Team>(i => { i.Identifier(t => t.Name.Replace(" ", "").ToLower()) .HasName("key"); i.Field(t => t.Players) .IsCollection(b => { b.Identifier(p => p.SquadNumber); b.AutoConfigure(Options.RootConfiguration); }); }); }
public void AddApiRootProperties(IApiBuilder builder, Type contextType) { foreach (PropertyInfo property in contextType.GetProperties(BindingFlags.Public | BindingFlags.Instance)) { Type rootType = property.PropertyType.GetGenericSubclass(typeof(ApiRoot <>)); if (rootType == null) { continue; } Type itemType = rootType.GetGenericArguments()[0]; AddRootItem(builder, itemType, property.Name); } }
public override IApiBuilder Configure(IApiBuilder api) { api.WithScheme("https") .WithHost("reqres.in") .RequestContentType(RequestContentTypeEnum.Json); api.ForRequest() .WithPath(path => path.Contains("/api/users/2")) //.MethodType(HttpMethodEnum.GET) .AbortRequest(); //.BeginTamper() //.TamperFragment("test") //.TamperHeader("test", "test2") //.TamperMethodType(HttpMethodEnum.POST) //.TamperPath(path => path.Replace("/api/users/2", "/api/users/3")); return(api); }
protected override void OnApiCreating(IApiBuilder apiBuilder) { apiBuilder.Item <Player>(i => { i.Field(t => t.Name) .HasName("name"); i.Field(t => t.Alias) .HasName("alias"); i.Field(t => t.SquadNumber) .HasName("number"); i.Field(t => t.Age) .HasName("age"); }); apiBuilder.Item <Team>(i => { i.RootName = "teams"; i.Identifier(t => t.Name.Replace(" ", "").ToLower()) .HasName("key"); i.Field(t => t.Name) .HasName("name"); i.Field(t => t.Division) .HasName("division"); i.Field(t => t.Position) .HasName("position"); i.Field(t => t.Players) .HasName("players"); }); }
public Apis() { _good = new ApiBuilder <T>(); _bad = new ApiBuilder <T>(); _ugly = new ApiBuilder <T>(); }
protected virtual void OnApiCreating(IApiBuilder apiBuilder) { }
public abstract IApiBuilder Configure(IApiBuilder api);
//public ApiRoot<League> Leagues { get; set; } protected override void OnApiCreating(IApiBuilder apiBuilder) { apiBuilder.Item <League>(e => { e.Field(l => l.Name); e.Identifier(l => l.Name.Replace(" ", string.Empty).ToLower()); e.Field(l => l.Teams .Select(t => new { Team = t, Wins = t.Fixtures.Count(f => f.Fixture.Goals.Count(g => g.Player.Team == t) > f.Fixture.Goals.Count(g => g.Player.Team == t)), Draws = t.Fixtures.Count(f => f.Fixture.Goals.Count(g => g.Player.Team == t) == f.Fixture.Goals.Count(g => g.Player.Team == t)), Losses = t.Fixtures.Count(f => f.Fixture.Goals.Count(g => g.Player.Team == t) < f.Fixture.Goals.Count(g => g.Player.Team == t)), }) .Select(t => new TeamPosition { Points = (t.Wins * 3) + (t.Draws * 1), Team = t.Team.Name })) .HasName("Teams") .IsCollection(tp => { tp.Field(l => l.Points); tp.Field(l => l.Team); }); }); apiBuilder.Item <Team>(e => { e.Field(t => t.Name); e.Field(t => t.FoundedYear) .HasName("Founded"); e.Field(t => t.Players) .IsCollection(); e.Field(t => t.Fixtures) .IsCollection(ft => { ft.Identifier(f => f.FixtureId); ft.Field(f => f.IsHome) .AllowWrite((f, v) => { f.IsHome = v; var vsTeam = f.Fixture.Teams.FirstOrDefault(tt => tt.TeamId != f.TeamId); if (vsTeam != null) { vsTeam.IsHome = !v; } }) .HasName("Home"); ft.Field(f => f.Fixture.Teams.FirstOrDefault(tt => tt.TeamId != f.TeamId)) .AllowWrite((f, tt) => { f.Fixture.Teams.Add(tt); }) .HasName("VsTeam") .IsItem(t => { t.Field(tt => tt.TeamId) .HasName("Id") .AllowLocate() .AllowWrite(); }); ft.Field(f => f.Fixture.Goals) .HasName("Goals") .IsCollection(g => { }); ft.OnCreating(f => { f.Fixture = new Fixture { Teams = new List <FixtureTeam>(2) }; }); }); }); apiBuilder.Item <Player>(e => { e.Field(p => p.Name) .AllowWrite(); e.Field(p => p.SquadNumber) .HasName("Number"); e.Field(p => p.Goals) .IsCollection(g => { g.Field(h => h.Id); }); e.Field(p => p.Team) .IsItem(); }); }
public WebApiClientBuilder(IApiBuilder apiBuilder) { _apiBuilder = apiBuilder; }
public void CreateApi(IApiBuilder apiBuilder) { _onApiCreatingAction(apiBuilder); }