@@ -39,7 +39,9 @@ def camel_to_snake(value)
3939groups = Hash . new { |h , k | h [ k ] = { sources : [ ] , events : [ ] } }
4040
4141def collect_serialized ( field )
42- return [ ] unless field . is_a? ( Hash )
42+ unless field . is_a? ( Hash )
43+ raise "Expected field metadata Hash but got #{ field . inspect } "
44+ end
4345
4446 values = [ ]
4547 values << field [ "default_enum_serialized" ]
@@ -54,21 +56,29 @@ def collect_serialized(field)
5456 next unless fq_name . start_with? ( "LogStruct::Log::" )
5557
5658 fields = info [ "fields" ]
57- next unless fields . is_a? ( Hash )
59+ unless fields . is_a? ( Hash )
60+ raise "Struct #{ fq_name } missing fields metadata"
61+ end
5862
5963 event_field = fields [ "event" ]
64+ next unless event_field
65+
6066 event_values = collect_serialized ( event_field )
6167 next if event_values . empty?
6268
6369 log_type = fq_name . split ( "::" ) [ 2 ]
64- next unless log_type
70+ unless log_type
71+ raise "Unable to infer log type for #{ fq_name } "
72+ end
6573
6674 group = groups [ log_type ]
6775 group [ :events ] = ( group [ :events ] | event_values )
6876
6977 source_field = fields [ "source" ]
70- source_values = collect_serialized ( source_field )
71- group [ :sources ] = ( group [ :sources ] | source_values ) if source_values . any?
78+ if source_field
79+ source_values = collect_serialized ( source_field )
80+ group [ :sources ] = ( group [ :sources ] | source_values )
81+ end
7282end
7383
7484catalog_structs = groups . each_with_object ( { } ) do |( log_type , data ) , memo |
@@ -133,3 +143,22 @@ def go_string(str)
133143File . write ( gen_path , go )
134144
135145puts "Wrote provider catalog to #{ catalog_path } and #{ gen_path } "
146+
147+ def assert ( condition , message )
148+ raise message unless condition
149+ end
150+
151+ catalog_data = JSON . parse ( File . read ( catalog_path ) )
152+ structs = catalog_data . fetch ( "structs" )
153+
154+ refute_empty ( structs , "Struct catalog is empty" )
155+ assert ( structs . key? ( "GoodJob" ) , "Struct catalog missing GoodJob" )
156+ good_job = structs [ "GoodJob" ]
157+
158+ assert_includes ( good_job [ "allowed_events" ] , "enqueue" , "GoodJob missing enqueue event" )
159+ assert_equal ( "job" , good_job [ "fixed_source" ] , "GoodJob fixed source incorrect" )
160+
161+ go_contents = File . read ( gen_path )
162+
163+ assert_includes ( go_contents , "\" GoodJob\" : {Name: \" GoodJob\" " , "catalog_gen.go missing GoodJob entry" )
164+ assert_includes ( go_contents , "AllowedEvents: []string{\" enqueue\" " , "catalog_gen.go missing enqueue event" )
0 commit comments