lib/protobuf/generators/base.rb in protobuffy-3.6.0 vs lib/protobuf/generators/base.rb in protobuffy-4.0.0

- old
+ new

@@ -13,20 +13,14 @@ if unique_tags.size < tags.size ::Protobuf::CodeGenerator.fatal("#{type_name} object has duplicate tags. Expected #{unique_tags.size} tags, but got #{tags.size}. Suppress with PB_NO_TAG_WARNINGS=1.") end unless ENV.key?('PB_NO_TAG_WARNINGS') - range = (tags.min)..(tags.max) - if range.respond_to?(:size) - expected_size = range.size - else - expected_size = range.to_a.size - end - + expected_size = tags.max - tags.min + 1 if tags.size < expected_size ::Protobuf::CodeGenerator.print_tag_warning_suppress - ::Protobuf::CodeGenerator.warn("#{type_name} object should have #{expected_size} tags (#{range.begin}..#{range.end}), but found #{tags.size} tags.") + ::Protobuf::CodeGenerator.warn("#{type_name} object should have #{expected_size} tags (#{tags.min}..#{tags.max}), but found #{tags.size} tags.") end end end attr_reader :descriptor, :namespace, :options @@ -40,32 +34,52 @@ def fully_qualified_type_namespace ".#{type_namespace.join('.')}" end - def run_once(label, &block) + def run_once(label) tracker_ivar = "@_#{label}_compiled" value_ivar = "@_#{label}_compiled_value" if instance_variable_get(tracker_ivar) return instance_variable_get(value_ivar) - else - return_value = block.call - instance_variable_set(tracker_ivar, true) - instance_variable_set(value_ivar, return_value) - return return_value end + + return_value = yield + instance_variable_set(tracker_ivar, true) + instance_variable_set(value_ivar, return_value) + return_value end def to_s compile print_contents # see Printable end def type_namespace - @type_namespace ||= @namespace + [ descriptor.name ] + @type_namespace ||= @namespace + [descriptor.name] end + def serialize_value(value) + case value + when Message + fields = value.each_field.map do |field, inner_value| + next unless value.field?(field.name) + serialized_inner_value = serialize_value(inner_value) + "#{field.fully_qualified_name.inspect} => #{serialized_inner_value}" + end.compact + "{ #{fields.join(', ')} }" + when Enum + "::#{value.parent_class}::#{value.name}" + when String + value.inspect + when nil + "nil" + when Array + '[' + value.map { |x| serialize_value(x) }.join(', ') + ']' + else + value + end + end end end end -