module Protobuf::Message::Fields::ClassMethods
Public Instance Methods
all_fields()
click to toggle source
Field
Access Methods
# File lib/protobuf/message/fields.rb, line 53 def all_fields @all_fields ||= field_store.values.uniq.sort_by(&:tag) end
define_field(rule, type_class, field_name, tag, options)
click to toggle source
# File lib/protobuf/message/fields.rb, line 98 def define_field(rule, type_class, field_name, tag, options) raise_if_tag_collision(tag, field_name) raise_if_name_collision(field_name) field = ::Protobuf::Field.build(self, rule, type_class, field_name, tag, options) field_store[field_name] = field field_store[tag] = field define_method("#{field_name}!") do @values[field_name] end end
extension_fields()
click to toggle source
# File lib/protobuf/message/fields.rb, line 57 def extension_fields @extension_fields ||= all_fields.select(&:extension?) end
extension_ranges()
click to toggle source
# File lib/protobuf/message/fields.rb, line 61 def extension_ranges @extension_ranges ||= [] end
extension_tag?(tag)
click to toggle source
# File lib/protobuf/message/fields.rb, line 65 def extension_tag?(tag) tag.respond_to?(:to_i) && get_extension_field(tag).present? end
extensions(range)
click to toggle source
Define an extension range.
# File lib/protobuf/message/fields.rb, line 46 def extensions(range) extension_ranges << range end
field_store()
click to toggle source
# File lib/protobuf/message/fields.rb, line 69 def field_store @field_store ||= {} end
field_tag?(tag, allow_extension = false)
click to toggle source
# File lib/protobuf/message/fields.rb, line 77 def field_tag?(tag, allow_extension = false) tag.respond_to?(:to_i) && get_field(tag, allow_extension).present? end
fields()
click to toggle source
# File lib/protobuf/message/fields.rb, line 73 def fields @fields ||= all_fields.reject(&:extension?) end
get_extension_field(name_or_tag)
click to toggle source
# File lib/protobuf/message/fields.rb, line 81 def get_extension_field(name_or_tag) name_or_tag = name_or_tag.to_sym if name_or_tag.respond_to?(:to_sym) field = field_store[name_or_tag] field if field.try(:extension?) { false } end
get_field(name_or_tag, allow_extension = false)
click to toggle source
# File lib/protobuf/message/fields.rb, line 87 def get_field(name_or_tag, allow_extension = false) name_or_tag = name_or_tag.to_sym if name_or_tag.respond_to?(:to_sym) field = field_store[name_or_tag] if field && (allow_extension || !field.extension?) field else nil end end
optional(type_class, name, tag, options = {})
click to toggle source
Define an optional field.
# File lib/protobuf/message/fields.rb, line 28 def optional(type_class, name, tag, options = {}) define_field(:optional, type_class, name, tag, options) end
raise_if_name_collision(field_name)
click to toggle source
# File lib/protobuf/message/fields.rb, line 117 def raise_if_name_collision(field_name) if get_field(field_name, true) fail DuplicateFieldNameError, %(Field name #{field_name} has already been used in "#{name}".) end end
raise_if_tag_collision(tag, field_name)
click to toggle source
# File lib/protobuf/message/fields.rb, line 111 def raise_if_tag_collision(tag, field_name) if get_field(tag, true) fail TagCollisionError, %(Field number #{tag} has already been used in "#{name}" by field "#{field_name}".) end end
repeated(type_class, name, tag, options = {})
click to toggle source
Define a repeated field.
# File lib/protobuf/message/fields.rb, line 34 def repeated(type_class, name, tag, options = {}) define_field(:repeated, type_class, name, tag, options) end
required(type_class, name, tag, options = {})
click to toggle source
Define a required field.
# File lib/protobuf/message/fields.rb, line 40 def required(type_class, name, tag, options = {}) define_field(:required, type_class, name, tag, options) end
Private Instance Methods
inherit_fields!(subclass)
click to toggle source
# File lib/protobuf/message/fields.rb, line 123 def inherit_fields!(subclass) instance_variables.each do |iv| subclass.instance_variable_set(iv, instance_variable_get(iv)) end end