@@ -35,7 +35,7 @@ def self.default
3535 # Constructor
3636 #
3737
38- def initialize ( message_class , rule , type_class , name , tag , options )
38+ def initialize ( message_class , rule , type_class , name , tag , simple_name , options )
3939 @message_class = message_class
4040 @name = name
4141 @rule = rule
@@ -44,7 +44,7 @@ def initialize(message_class, rule, type_class, name, tag, options)
4444 @options = options
4545
4646 validate_packed_field if packed?
47- define_accessor
47+ define_accessor ( simple_name , name ) if simple_name
4848 tag_encoded
4949 end
5050
@@ -69,10 +69,12 @@ def default
6969 end
7070
7171 def default_value
72- @default_value ||= case
73- when optional? then typed_default_value
74- when repeated? then ::Protobuf ::Field ::FieldArray . new ( self ) . freeze
75- when required? then nil
72+ @default_value ||= if optional? || required?
73+ typed_default_value
74+ elsif repeated?
75+ ::Protobuf ::Field ::FieldArray . new ( self ) . freeze
76+ else
77+ fail "Unknown field label -- something went very wrong"
7678 end
7779 end
7880
@@ -122,10 +124,10 @@ def required?
122124
123125 # FIXME: need to cleanup (rename) this warthog of a method.
124126 def set ( message_instance , bytes )
125- return message_instance . __send__ ( setter , decode ( bytes ) ) unless repeated?
126- return message_instance . __send__ ( getter ) << decode ( bytes ) unless packed?
127+ return message_instance [ name ] = decode ( bytes ) unless repeated?
128+ return message_instance [ name ] << decode ( bytes ) unless packed?
127129
128- array = message_instance . __send__ ( getter )
130+ array = message_instance [ name ]
129131 stream = StringIO . new ( bytes )
130132
131133 if wire_type == ::Protobuf ::WireType ::VARINT
@@ -169,87 +171,23 @@ def wire_type
169171 # Private Instance Methods
170172 #
171173
172- def define_accessor
173- if repeated?
174- define_array_getter
175- define_array_setter
176- else
177- define_getter
178- define_setter
179- end
180- end
181-
182- def define_array_getter
183- field = self
184- method_name = field . getter
185-
174+ def define_accessor ( simple_field_name , fully_qualified_field_name )
186175 message_class . class_eval do
187- define_method ( method_name ) do
188- @values [ field . name ] ||= :: Protobuf :: Field :: FieldArray . new ( field )
176+ define_method ( " #{ simple_field_name } !" ) do
177+ @values [ fully_qualified_field_name ]
189178 end
190179 end
191180
192- ::Protobuf . field_deprecator . deprecate_method ( message_class , method_name ) if field . deprecated?
193- end
194-
195- def define_array_setter
196- field = self
197- method_name = field . setter
198-
199181 message_class . class_eval do
200- define_method ( method_name ) do |val |
201- if val . is_a? ( Array )
202- val = val . dup
203- val . compact!
204- else
205- fail TypeError , <<-TYPE_ERROR
206- Expected repeated value of type '#{ field . type_class } '
207- Got '#{ val . class } ' for repeated protobuf field #{ field . name }
208- TYPE_ERROR
209- end
210-
211- if val . nil? || ( val . respond_to? ( :empty? ) && val . empty? )
212- @values . delete ( field . name )
213- else
214- @values [ field . name ] ||= ::Protobuf ::Field ::FieldArray . new ( field )
215- @values [ field . name ] . replace ( val )
216- end
217- end
182+ define_method ( simple_field_name ) { self [ fully_qualified_field_name ] }
183+ define_method ( "#{ simple_field_name } =" ) { |v | self [ fully_qualified_field_name ] = v }
218184 end
219185
220- ::Protobuf . field_deprecator . deprecate_method ( message_class , method_name ) if field . deprecated?
221- end
222-
223- def define_getter
224- field = self
225- method_name = field . getter
226-
227- message_class . class_eval do
228- define_method ( method_name ) do
229- @values [ field . name ] || field . default_value
230- end
231- end
232-
233- ::Protobuf . field_deprecator . deprecate_method ( message_class , method_name ) if field . deprecated?
234- end
235-
236- def define_setter
237- field = self
238- method_name = field . setter
239-
240- message_class . class_eval do
241- define_method ( method_name ) do |val |
242- if val . nil? || ( val . respond_to? ( :empty? ) && val . empty? )
243- @values . delete ( field . name )
244- elsif field . acceptable? ( val )
245- @values [ field . name ] = field . coerce! ( val )
246- else
247- fail TypeError , "Unacceptable value #{ val } for field #{ field . name } of type #{ field . type_class } "
248- end
249- end
250- end
186+ return unless deprecated?
251187
252- ::Protobuf . field_deprecator . deprecate_method ( message_class , method_name ) if field . deprecated?
188+ ::Protobuf . field_deprecator . deprecate_method ( message_class , simple_field_name )
189+ ::Protobuf . field_deprecator . deprecate_method ( message_class , "#{ simple_field_name } !" )
190+ ::Protobuf . field_deprecator . deprecate_method ( message_class , "#{ simple_field_name } =" )
253191 end
254192
255193 def typed_default_value
0 commit comments