Class: Protobuf::Field::BaseField
- Inherits:
-
Object
- Object
- Protobuf::Field::BaseField
- Defined in:
- lib/protobuf/message/field.rb
Direct Known Subclasses
Instance Attribute Summary collapse
-
#default ⇒ Object
Returns the value of attribute default.
-
#message_class ⇒ Object
Returns the value of attribute message_class.
-
#name ⇒ Object
Returns the value of attribute name.
-
#rule ⇒ Object
Returns the value of attribute rule.
-
#tag ⇒ Object
Returns the value of attribute tag.
-
#type ⇒ Object
Returns the value of attribute type.
Class Method Summary collapse
Instance Method Summary collapse
- #acceptable?(val) ⇒ Boolean
- #clear(message) ⇒ Object
- #default_value ⇒ Object
- #define_accessor(message_instance) ⇒ Object
- #define_getter(message_instance) ⇒ Object
- #define_setter(message_instance) ⇒ Object
- #descriptor ⇒ Object
- #error_message ⇒ Object
- #get(value) ⇒ Object
- #get_bytes(value) ⇒ Object
-
#initialize(message_class, rule, type, name, tag, opts = {}) ⇒ BaseField
constructor
A new instance of BaseField.
- #initialized?(message) ⇒ Boolean
- #max ⇒ Object
- #merge(message_instance, value) ⇒ Object
- #merge_array(message_instance, value) ⇒ Object
- #merge_value(message_instance, value) ⇒ Object
- #min ⇒ Object
- #optional? ⇒ Boolean
- #ready? ⇒ Boolean
- #repeated? ⇒ Boolean
- #required? ⇒ Boolean
- #set(message_instance, bytes) ⇒ Object
- #set_array(message_instance, bytes) ⇒ Object
- #set_bytes(message_instance, bytes) ⇒ Object
- #to_s ⇒ Object
- #typed_default_value(default = nil) ⇒ Object
Constructor Details
#initialize(message_class, rule, type, name, tag, opts = {}) ⇒ BaseField
35 36 37 38 39 |
# File 'lib/protobuf/message/field.rb', line 35 def initialize(, rule, type, name, tag, opts={}) , @rule, @type, @name, @tag, @default, @extension = , rule, type, name, tag, opts[:default], opts[:extension] = 'Type invalid' end |
Instance Attribute Details
#default ⇒ Object
Returns the value of attribute default.
29 30 31 |
# File 'lib/protobuf/message/field.rb', line 29 def default @default end |
#message_class ⇒ Object
Returns the value of attribute message_class.
29 30 31 |
# File 'lib/protobuf/message/field.rb', line 29 def end |
#name ⇒ Object
Returns the value of attribute name.
29 30 31 |
# File 'lib/protobuf/message/field.rb', line 29 def name @name end |
#rule ⇒ Object
Returns the value of attribute rule.
29 30 31 |
# File 'lib/protobuf/message/field.rb', line 29 def rule @rule end |
#tag ⇒ Object
Returns the value of attribute tag.
29 30 31 |
# File 'lib/protobuf/message/field.rb', line 29 def tag @tag end |
#type ⇒ Object
Returns the value of attribute type.
29 30 31 |
# File 'lib/protobuf/message/field.rb', line 29 def type @type end |
Class Method Details
.default ⇒ Object
26 |
# File 'lib/protobuf/message/field.rb', line 26 def default; nil end |
.descriptor ⇒ Object
22 23 24 |
# File 'lib/protobuf/message/field.rb', line 22 def descriptor @descriptor ||= Protobuf::Descriptor::FieldDescriptor.new end |
Instance Method Details
#acceptable?(val) ⇒ Boolean
160 161 162 |
# File 'lib/protobuf/message/field.rb', line 160 def acceptable?(val) true end |
#clear(message) ⇒ Object
58 59 60 61 62 63 64 |
# File 'lib/protobuf/message/field.rb', line 58 def clear() if repeated? [name].clear else .instance_variable_get(:@values).delete(name) end end |
#default_value ⇒ Object
66 67 68 69 70 71 72 73 74 75 76 77 |
# File 'lib/protobuf/message/field.rb', line 66 def default_value case rule when :repeated FieldArray.new self when :required nil when :optional typed_default_value default else raise InvalidRuleError end end |
#define_accessor(message_instance) ⇒ Object
83 84 85 86 87 |
# File 'lib/protobuf/message/field.rb', line 83 def define_accessor() .instance_variable_get(:@values)[name] = default_value if rule == :repeated define_getter define_setter unless rule == :repeated end |
#define_getter(message_instance) ⇒ Object
89 90 91 92 93 94 95 96 97 |
# File 'lib/protobuf/message/field.rb', line 89 def define_getter() field = self = (class << ; self; end) .class_eval do define_method(field.name) do @values[field.name] or field.default_value end end end |
#define_setter(message_instance) ⇒ Object
99 100 101 102 103 104 105 106 107 108 109 110 111 |
# File 'lib/protobuf/message/field.rb', line 99 def define_setter() field = self = (class << ; self; end) .class_eval do define_method("#{field.name}=") do |val| if val.nil? @values.delete(field.name) elsif field.acceptable? val @values[field.name] = val end end end end |
#descriptor ⇒ Object
31 32 33 |
# File 'lib/protobuf/message/field.rb', line 31 def descriptor @descriptor ||= Protobuf::Descriptor::FieldDescriptor.new self end |
#error_message ⇒ Object
164 165 166 |
# File 'lib/protobuf/message/field.rb', line 164 def end |
#get(value) ⇒ Object
129 130 131 |
# File 'lib/protobuf/message/field.rb', line 129 def get(value) get_bytes value end |
#get_bytes(value) ⇒ Object
133 134 135 |
# File 'lib/protobuf/message/field.rb', line 133 def get_bytes(value) raise NotImplementedError end |
#initialized?(message) ⇒ Boolean
43 44 45 46 47 48 49 50 51 52 53 54 55 56 |
# File 'lib/protobuf/message/field.rb', line 43 def initialized?() case rule when :required return false if [name].nil? return false if is_a?(Protobuf::Field::MessageField) and not [name].initialized? when :repeated return [name].inject(true) do |result, msg| result and msg.initialized? end when :optional return false if [name] and is_a?(Protobuf::Field::MessageField) and not [name].initialized? end true end |
#max ⇒ Object
157 |
# File 'lib/protobuf/message/field.rb', line 157 def max; self.class.max end |
#merge(message_instance, value) ⇒ Object
137 138 139 140 141 142 143 |
# File 'lib/protobuf/message/field.rb', line 137 def merge(, value) if repeated? merge_array , value else merge_value , value end end |
#merge_array(message_instance, value) ⇒ Object
145 146 147 |
# File 'lib/protobuf/message/field.rb', line 145 def merge_array(, value) [tag].concat value end |
#merge_value(message_instance, value) ⇒ Object
149 150 151 |
# File 'lib/protobuf/message/field.rb', line 149 def merge_value(, value) [tag] = value end |
#min ⇒ Object
158 |
# File 'lib/protobuf/message/field.rb', line 158 def min; self.class.min end |
#optional? ⇒ Boolean
155 |
# File 'lib/protobuf/message/field.rb', line 155 def optional?; rule == :optional end |
#ready? ⇒ Boolean
41 |
# File 'lib/protobuf/message/field.rb', line 41 def ready?; true end |
#repeated? ⇒ Boolean
153 |
# File 'lib/protobuf/message/field.rb', line 153 def repeated?; rule == :repeated end |
#required? ⇒ Boolean
154 |
# File 'lib/protobuf/message/field.rb', line 154 def required?; rule == :required end |
#set(message_instance, bytes) ⇒ Object
113 114 115 116 117 118 119 |
# File 'lib/protobuf/message/field.rb', line 113 def set(, bytes) if repeated? set_array , bytes else set_bytes , bytes end end |
#set_array(message_instance, bytes) ⇒ Object
121 122 123 |
# File 'lib/protobuf/message/field.rb', line 121 def set_array(, bytes) raise NotImplementedError end |
#set_bytes(message_instance, bytes) ⇒ Object
125 126 127 |
# File 'lib/protobuf/message/field.rb', line 125 def set_bytes(, bytes) raise NotImplementedError end |
#to_s ⇒ Object
168 169 170 |
# File 'lib/protobuf/message/field.rb', line 168 def to_s "#{rule} #{type} #{name} = #{tag} #{default ? "[default=#{default}]" : ''}" end |
#typed_default_value(default = nil) ⇒ Object
79 80 81 |
# File 'lib/protobuf/message/field.rb', line 79 def typed_default_value(default=nil) default or self.class.default end |