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

- old
+ new

@@ -5,35 +5,41 @@ class FieldGenerator < Base ## # Constants # - PROTO_INFINITY_DEFAULT = /^inf$/i.freeze - PROTO_NEGATIVE_INFINITY_DEFAULT = /^-inf$/i.freeze - PROTO_NAN_DEFAULT = /^nan$/i.freeze + PROTO_INFINITY_DEFAULT = /^inf$/i + PROTO_NEGATIVE_INFINITY_DEFAULT = /^-inf$/i + PROTO_NAN_DEFAULT = /^nan$/i RUBY_INFINITY_DEFAULT = '::Float::INFINITY'.freeze RUBY_NEGATIVE_INFINITY_DEFAULT = '-::Float::INFINITY'.freeze RUBY_NAN_DEFAULT = '::Float::NAN'.freeze ## # Attributes # attr_reader :field_options def applicable_options - @applicable_options ||= field_options.map { |k, v| ":#{k} => #{v}" } + # Note on the strange use of `#inspect`: + # :boom.inspect #=> ":boom" + # :".boom.foo".inspect #=> ":\".boom.foo\"" + # An alternative to `#inspect` would be always adding double quotes, + # but the generatated code looks un-idiomatic: + # ":\"#{:boom}\"" #=> ":\"boom\"" <-- Note the unnecessary double quotes + @applicable_options ||= field_options.map { |k, v| "#{k.inspect} => #{v}" } end def default_value @default_value ||= begin if defaulted? case descriptor.type.name - when :TYPE_ENUM then + when :TYPE_ENUM enum_default_value - when :TYPE_STRING, :TYPE_BYTES then + when :TYPE_STRING, :TYPE_BYTES string_default_value - when :TYPE_FLOAT, :TYPE_DOUBLE then + when :TYPE_FLOAT, :TYPE_DOUBLE float_double_default_value else verbatim_default_value end end @@ -52,21 +58,21 @@ descriptor.respond_to_has_and_present?(:extendee) end def compile run_once(:compile) do - field_definition = [ "#{label} #{type_name}", name, number, applicable_options ] + field_definition = ["#{label} #{type_name}", name, number, applicable_options] puts field_definition.flatten.compact.join(', ') end end def label @label ||= descriptor.label.name.to_s.downcase.sub(/label_/, '') # required, optional, repeated end def name - @name ||= ":#{descriptor.name}" + @name ||= descriptor.name.to_sym.inspect end def number @number ||= descriptor.number end @@ -76,10 +82,17 @@ opts = {} opts[:default] = default_value if defaulted? opts[:packed] = 'true' if packed? opts[:deprecated] = 'true' if deprecated? opts[:extension] = 'true' if extension? + if descriptor.options + descriptor.options.each_field do |field_option| + next unless descriptor.options.field?(field_option.name) + option_value = descriptor.options[field_option.name] + opts[field_option.fully_qualified_name] = serialize_value(option_value) + end + end opts end end def packed? @@ -89,14 +102,14 @@ # Determine the field type def type_name @type_name ||= begin case descriptor.type.name when :TYPE_MESSAGE, :TYPE_ENUM, :TYPE_GROUP then - type_name = modulize(descriptor.type_name) + modulize(descriptor.type_name) else type_name = descriptor.type.name.to_s.downcase.sub(/type_/, '') - type_name = ":#{type_name}" + ":#{type_name}" end end end private @@ -117,16 +130,15 @@ verbatim_default_value end end def string_default_value - %Q{"#{verbatim_default_value.gsub(/'/, '\\\\\'')}"} + %("#{verbatim_default_value.gsub(/'/, '\\\\\'')}") end def verbatim_default_value descriptor.default_value end end end end -