Module: Protobuf::Message::Fields::ClassMethods
- Defined in:
- lib/protobuf/message/fields.rb
Instance Method Summary collapse
-
#all_fields ⇒ Object
Field Access Methods.
- #define_field(rule, type_class, field_name, tag, options) ⇒ Object
- #extension_fields ⇒ Object
- #extension_ranges ⇒ Object
- #extension_tag?(tag) ⇒ Boolean
-
#extensions(range) ⇒ Object
Define an extension range.
- #field_store ⇒ Object
- #field_tag?(tag, allow_extension = false) ⇒ Boolean
- #fields ⇒ Object
- #get_extension_field(name_or_tag) ⇒ Object
- #get_field(name_or_tag, allow_extension = false) ⇒ Object
-
#optional(type_class, name, tag, options = {}) ⇒ Object
Define an optional field.
- #raise_if_name_collision(field_name) ⇒ Object
- #raise_if_tag_collision(tag, field_name) ⇒ Object
-
#repeated(type_class, name, tag, options = {}) ⇒ Object
Define a repeated field.
-
#required(type_class, name, tag, options = {}) ⇒ Object
Define a required field.
Instance Method Details
#all_fields ⇒ Object
Field Access Methods
53 54 55 |
# 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) ⇒ Object
98 99 100 101 102 103 104 105 106 107 108 109 |
# File 'lib/protobuf/message/fields.rb', line 98 def define_field(rule, type_class, field_name, tag, ) raise_if_tag_collision(tag, field_name) raise_if_name_collision(field_name) field = ::Protobuf::Field.build(self, rule, type_class, field_name, tag, ) field_store[field_name] = field field_store[tag] = field define_method("#{field_name}!") do @values[field_name] end end |
#extension_fields ⇒ Object
57 58 59 |
# File 'lib/protobuf/message/fields.rb', line 57 def extension_fields @extension_fields ||= all_fields.select(&:extension?) end |
#extension_ranges ⇒ Object
61 62 63 |
# File 'lib/protobuf/message/fields.rb', line 61 def extension_ranges @extension_ranges ||= [] end |
#extension_tag?(tag) ⇒ Boolean
65 66 67 |
# 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) ⇒ Object
Define an extension range.
46 47 48 |
# File 'lib/protobuf/message/fields.rb', line 46 def extensions(range) extension_ranges << range end |
#field_store ⇒ Object
69 70 71 |
# File 'lib/protobuf/message/fields.rb', line 69 def field_store @field_store ||= {} end |
#field_tag?(tag, allow_extension = false) ⇒ Boolean
77 78 79 |
# 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 ⇒ Object
73 74 75 |
# File 'lib/protobuf/message/fields.rb', line 73 def fields @fields ||= all_fields.reject(&:extension?) end |
#get_extension_field(name_or_tag) ⇒ Object
81 82 83 84 85 |
# 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) ⇒ Object
87 88 89 90 91 92 93 94 95 96 |
# 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 = {}) ⇒ Object
Define an optional field.
28 29 30 |
# File 'lib/protobuf/message/fields.rb', line 28 def optional(type_class, name, tag, = {}) define_field(:optional, type_class, name, tag, ) end |
#raise_if_name_collision(field_name) ⇒ Object
117 118 119 120 121 |
# 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) ⇒ Object
111 112 113 114 115 |
# 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 = {}) ⇒ Object
Define a repeated field.
34 35 36 |
# File 'lib/protobuf/message/fields.rb', line 34 def repeated(type_class, name, tag, = {}) define_field(:repeated, type_class, name, tag, ) end |
#required(type_class, name, tag, options = {}) ⇒ Object
Define a required field.
40 41 42 |
# File 'lib/protobuf/message/fields.rb', line 40 def required(type_class, name, tag, = {}) define_field(:required, type_class, name, tag, ) end |