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
-