44using Simplify . Web . Meta ;
55using Simplify . Web . Postman . Models ;
66
7- namespace Simplify . Web . Postman . Assembly . Collection . PartBuilders
7+ namespace Simplify . Web . Postman . Assembly . Collection . PartBuilders ;
8+
9+ /// <summary>
10+ /// Provides CollectionItems builder
11+ /// </summary>
12+ /// <seealso cref="ICollectionPartBuilder" />
13+ public class CollectionItemsBuilder : ICollectionPartBuilder
814{
915 /// <summary>
10- /// Provides CollectionItems builder
16+ /// Builds the specified model part.
1117 /// </summary>
12- /// <seealso cref="ICollectionPartBuilder" / >
13- public class CollectionItemsBuilder : ICollectionPartBuilder
18+ /// <param name="model">The model.</param >
19+ public void Build ( CollectionModel model )
1420 {
15- /// <summary>
16- /// Builds the specified model part.
17- /// </summary>
18- /// <param name="model">The model.</param>
19- public void Build ( CollectionModel model )
21+ foreach ( var item in ControllersMetaStore . Current . ControllersMetaData )
2022 {
21- foreach ( var item in ControllersMetaStore . Current . ControllersMetaData )
22- {
23- // Skip any route controllers
24- if ( item . ExecParameters == null )
25- continue ;
23+ // Skip any route controllers
24+ if ( item . ExecParameters == null )
25+ continue ;
2626
27- foreach ( var route in item . ExecParameters ! . Routes )
28- BuildCollectionItems ( model , 0 , BuildRequestCollectionItem ( item , route ) ) ;
29- }
27+ foreach ( var route in item . ExecParameters ! . Routes )
28+ BuildCollectionItems ( model , 0 , BuildRequestCollectionItem ( item , route ) ) ;
3029 }
30+ }
31+
32+ private static void BuildCollectionItems ( CollectionItem currentLevelContainer , int currentLevel , CollectionItem item )
33+ {
34+ var path = item . Request . Url . Path ;
3135
32- private static void BuildCollectionItems ( CollectionItem currentLevelContainer , int currentLevel , CollectionItem item )
36+ // If recursion reached request level or reached route parameter
37+ if ( currentLevel == path . Count || path [ currentLevel ] . StartsWith ( "{" ) )
3338 {
34- var path = item . Request . Url . Path ;
39+ if ( currentLevelContainer . Items == null )
40+ currentLevelContainer . Items = new List < CollectionItem > ( ) ;
3541
36- // If recursion reached request level or reached route parameter
37- if ( currentLevel == path . Count || path [ currentLevel ] . StartsWith ( "{" ) )
38- {
39- if ( currentLevelContainer . Items == null )
40- currentLevelContainer . Items = new List < CollectionItem > ( ) ;
42+ currentLevelContainer . Items . Add ( item ) ;
43+ return ;
44+ }
4145
42- currentLevelContainer . Items . Add ( item ) ;
43- return ;
44- }
46+ // If path recursion not reached request level
4547
46- // If path recursion not reached request level
48+ var containerName = BuildContainerName ( path [ currentLevel ] ) ;
4749
48- var containerName = BuildContainerName ( path [ currentLevel ] ) ;
50+ var container = currentLevelContainer . Items ? . FirstOrDefault ( x => x . Name == containerName ) ;
4951
50- var container = currentLevelContainer . Items ? . FirstOrDefault ( x => x . Name == containerName ) ;
52+ if ( container == null )
53+ {
54+ if ( currentLevelContainer . Items == null )
55+ currentLevelContainer . Items = new List < CollectionItem > ( ) ;
5156
52- if ( container == null )
57+ currentLevelContainer . Items . Add ( container = new CollectionItem
5358 {
54- if ( currentLevelContainer . Items == null )
55- currentLevelContainer . Items = new List < CollectionItem > ( ) ;
56-
57- currentLevelContainer . Items . Add ( container = new CollectionItem
58- {
59- Name = containerName ,
60- Items = new List < CollectionItem > ( )
61- } ) ;
62- }
63-
64- BuildCollectionItems ( container , currentLevel + 1 , item ) ;
59+ Name = containerName ,
60+ Items = new List < CollectionItem > ( )
61+ } ) ;
6562 }
6663
67- private static CollectionItem BuildRequestCollectionItem ( IControllerMetaData metaData , KeyValuePair < HttpMethod , string > route ) =>
68- new ( )
69- {
70- Name = BuildRequestName ( metaData ) ,
71- Request = RequestBuilder . Build ( metaData , route ) ,
72- Event = new List < Models . Event > { BasicTestsBuilder . Build ( ) }
73- } ;
74-
75- private static string BuildRequestName ( IControllerMetaData metaData ) => metaData . ControllerType . Name . Replace ( "Controller" , "" ) ;
76- private static string BuildContainerName ( string urlPart ) => CultureInfo . CurrentCulture . TextInfo . ToTitleCase ( urlPart . ToLower ( ) ) ;
64+ BuildCollectionItems ( container , currentLevel + 1 , item ) ;
7765 }
66+
67+ private static CollectionItem BuildRequestCollectionItem ( IControllerMetaData metaData , KeyValuePair < HttpMethod , string > route ) =>
68+ new ( )
69+ {
70+ Name = BuildRequestName ( metaData ) ,
71+ Request = RequestBuilder . Build ( metaData , route ) ,
72+ Event = new List < Models . Event > { BasicTestsBuilder . Build ( ) }
73+ } ;
74+
75+ private static string BuildRequestName ( IControllerMetaData metaData ) => metaData . ControllerType . Name . Replace ( "Controller" , "" ) ;
76+ private static string BuildContainerName ( string urlPart ) => CultureInfo . CurrentCulture . TextInfo . ToTitleCase ( urlPart . ToLower ( ) ) ;
7877}
0 commit comments