@@ -71,22 +71,27 @@ def initialize(manifest)
7171 end
7272
7373 def render_html_list ( data )
74- html = ""
74+ html = +""
75+
76+ is_rendered_as_a_collection = rendered_as_collection? ( data )
77+
78+ html << "<ul>" if is_rendered_as_a_collection
79+
7580 case data
7681 when ::Hash
77- html << "<ul>"
7882 data . each do |key , value |
79- html << "<li>#{ key } "
80- html << render_html_list ( value )
81- html << "</li>"
83+ html << render_list_child ( value , key )
8284 end
83- html << "</ul>"
8485 when ::Array
85- data . each do |item |
86- html << render_html_list ( item )
86+ if is_rendered_as_a_collection
87+ data . each do |item |
88+ html << render_list_child ( item )
89+ end
90+ else
91+ data = data . map { |item | render_html_list ( item ) }
92+ html << "[#{ data . join ( ", " ) } ]"
8793 end
8894 when Manifest ::Attributes
89- html << "<ul>"
9095 data . relevant_manifest . each_pair do |key , value |
9196 if key . to_s == "type"
9297 next
@@ -96,60 +101,77 @@ def render_html_list(data)
96101 key = :attributes
97102 value = data . attribute_declarations
98103 end
99- html << "<li>#{ key } "
100- html << render_html_list ( value )
101- html << "</li>"
104+
105+ html << render_list_child ( value , key )
102106 end
103- html << "</ul>"
104107 when Manifest ::Array
105- html << "<ul>"
106108 data . relevant_manifest . each_pair do |key , value |
107109 next if key == :element_type_declaration
108110
109111 if key . to_s == "type"
110112 value = root_manifest . lookup_path ( key , value )
111113 end
112- html << "<li>#{ key } "
113- html << render_html_list ( value )
114- html << "</li>"
114+ html << render_list_child ( value , key )
115115 end
116+
116117 html << render_html_list ( { element_type : data . element_type } )
117- html << "</ul>"
118118 when Manifest ::TypeDeclaration
119119 manifest = data . relevant_manifest
120- html << "<ul>"
120+
121121 if manifest . is_a? ( ::Symbol )
122- html << "<li>"
123122 html << foobara_reference_link ( data . to_type )
124- html << "</li>"
125123 else
126124 data . relevant_manifest . each_pair do |key , value |
127125 if key . to_s == "type"
128126 value = root_manifest . lookup_path ( key , value )
129127 end
130- html << "<li>#{ key } "
131- html << render_html_list ( value )
132- html << "</li>"
128+
129+ html << render_list_child ( value , key )
133130 end
134131 end
135- html << "</ul>"
136132 when Manifest ::Type , Manifest ::Command , Manifest ::Error
137- html << "<ul>"
138- html << "<li>"
139133 html << foobara_reference_link ( data )
140- html << "</li>"
141- html << "</ul>"
142134 when Manifest ::PossibleError
143135 html << render_html_list ( data . error )
144136 else
145- html << "<ul>"
146- html << "<li>#{ data } </li>"
147- html << "</ul>"
137+ html << case data
138+ when Numeric , TrueClass , FalseClass , NilClass
139+ data . inspect
140+ when ::String
141+ data
142+ when ::Symbol , ::Time
143+ data . to_s
144+ else
145+ # :nocov:
146+ raise "Not sure how to render #{ data . class } "
147+ # :nocov:
148+ end
148149 end
149150
151+ html << "</ul>" if is_rendered_as_a_collection
152+
150153 html
151154 end
152155
156+ def rendered_as_collection? ( data )
157+ if data . is_a? ( ::Array )
158+ data . size > 5 || data . any? { |element | rendered_as_collection? ( element ) }
159+ elsif data . is_a? ( Manifest ::TypeDeclaration )
160+ !data . relevant_manifest . is_a? ( ::Symbol )
161+ else
162+ [
163+ ::Hash ,
164+ Manifest ::Attributes ,
165+ Manifest ::Array
166+ ] . any? { |klass | data . is_a? ( klass ) }
167+ end
168+ end
169+
170+ def render_list_child ( child , label = nil )
171+ label = "#{ label } :" if label
172+ "<li>#{ label } \n #{ render_html_list ( child ) } \n </li>"
173+ end
174+
153175 def foobara_reference_link ( manifest )
154176 path = "/help/#{ manifest . reference } "
155177
0 commit comments