lib/tapioca/dsl/compilers/protobuf.rb in tapioca-0.10.2 vs lib/tapioca/dsl/compilers/protobuf.rb in tapioca-0.10.3

- old
+ new

@@ -93,10 +93,21 @@ descriptor = T.unsafe(constant).descriptor case descriptor when Google::Protobuf::EnumDescriptor descriptor.to_h.each do |sym, val| - klass.create_constant(sym.to_s, value: val.to_s) + # For each enum value, create a namespaced constant on the root rather than an un-namespaced + # constant within the class. This is because un-namespaced constants might conflict with reserved + # Ruby words, such as "BEGIN." By namespacing them, we avoid this problem. + # + # Invalid syntax: + # class Foo + # BEGIN = 3 + # end + # + # Valid syntax: + # Foo::BEGIN = 3 + root.create_constant("#{constant}::#{sym}", value: val.to_s) end klass.create_method( "lookup", parameters: [create_param("number", type: "Integer")],