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
-