macks-ruby_protobuf 0.3.2.2 → 0.3.2.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/lib/protobuf/compiler/proto.y +52 -34
- data/lib/protobuf/compiler/proto_parser.rb +606 -601
- data/lib/protobuf/message/field.rb +12 -10
- data/lib/protobuf/message/message.rb +18 -11
- data/lib/ruby_protobuf.rb +1 -1
- metadata +1 -1
@@ -36,6 +36,7 @@ module Protobuf
|
|
36
36
|
@message_class, @rule, @type, @name, @tag, @default, @extension =
|
37
37
|
message_class, rule, type, name, tag, opts[:default], opts[:extension]
|
38
38
|
@error_message = 'Type invalid'
|
39
|
+
define_accessor
|
39
40
|
end
|
40
41
|
|
41
42
|
def ready?; true end
|
@@ -80,16 +81,16 @@ module Protobuf
|
|
80
81
|
default or self.class.default
|
81
82
|
end
|
82
83
|
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
84
|
+
private
|
85
|
+
|
86
|
+
def define_accessor
|
87
|
+
define_getter
|
88
|
+
define_setter unless rule == :repeated
|
87
89
|
end
|
88
90
|
|
89
|
-
def define_getter
|
91
|
+
def define_getter
|
90
92
|
field = self
|
91
|
-
|
92
|
-
metaclass.class_eval do
|
93
|
+
@message_class.class_eval do
|
93
94
|
define_method(field.name) do
|
94
95
|
if @values.has_key?(field.name)
|
95
96
|
@values[field.name]
|
@@ -100,10 +101,9 @@ module Protobuf
|
|
100
101
|
end
|
101
102
|
end
|
102
103
|
|
103
|
-
def define_setter
|
104
|
+
def define_setter
|
104
105
|
field = self
|
105
|
-
|
106
|
-
metaclass.class_eval do
|
106
|
+
@message_class.class_eval do
|
107
107
|
define_method("#{field.name}=") do |val|
|
108
108
|
if val.nil?
|
109
109
|
@values.delete(field.name)
|
@@ -114,6 +114,8 @@ module Protobuf
|
|
114
114
|
end
|
115
115
|
end
|
116
116
|
|
117
|
+
public
|
118
|
+
|
117
119
|
# encoder/decoder related methods
|
118
120
|
|
119
121
|
def set(message_instance, bytes)
|
@@ -64,7 +64,8 @@ module Protobuf
|
|
64
64
|
end
|
65
65
|
|
66
66
|
def get_field_by_name(name)
|
67
|
-
|
67
|
+
name = name.to_sym
|
68
|
+
fields.values.find {|field| field.name == name}
|
68
69
|
end
|
69
70
|
|
70
71
|
def get_field_by_tag(tag)
|
@@ -81,7 +82,8 @@ module Protobuf
|
|
81
82
|
|
82
83
|
#TODO merge to get_field_by_name
|
83
84
|
def get_ext_field_by_name(name)
|
84
|
-
|
85
|
+
name = name.to_sym
|
86
|
+
extension_fields.values.find {|field| field.name == name}
|
85
87
|
end
|
86
88
|
|
87
89
|
#TODO merge to get_field_by_tag
|
@@ -106,12 +108,14 @@ module Protobuf
|
|
106
108
|
def initialize(values={})
|
107
109
|
@values = {}
|
108
110
|
|
109
|
-
fields.each do |tag, field|
|
111
|
+
self.class.fields.each do |tag, field|
|
110
112
|
unless field.ready?
|
111
113
|
field = field.setup
|
112
114
|
self.class.class_eval {@fields[tag] = field}
|
113
115
|
end
|
114
|
-
field.
|
116
|
+
if field.repeated?
|
117
|
+
@values[field.name] = Protobuf::Field::FieldArray.new(field)
|
118
|
+
end
|
115
119
|
end
|
116
120
|
|
117
121
|
# TODO
|
@@ -120,7 +124,9 @@ module Protobuf
|
|
120
124
|
field = field.setup
|
121
125
|
self.class.class_eval {@extension_fields[tag] = field}
|
122
126
|
end
|
123
|
-
field.
|
127
|
+
if field.repeated?
|
128
|
+
@values[field.name] = Protobuf::Field::FieldArray.new(field)
|
129
|
+
end
|
124
130
|
end
|
125
131
|
|
126
132
|
values.each {|tag, val| self[tag] = val}
|
@@ -140,7 +146,7 @@ module Protobuf
|
|
140
146
|
def ==(obj)
|
141
147
|
return false unless obj.is_a? self.class
|
142
148
|
each_field do |field, value|
|
143
|
-
return false unless value == obj
|
149
|
+
return false unless value == obj.send(field.name)
|
144
150
|
end
|
145
151
|
true
|
146
152
|
end
|
@@ -155,11 +161,12 @@ module Protobuf
|
|
155
161
|
ret = self.class.new
|
156
162
|
each_field do |field, value|
|
157
163
|
if field.repeated?
|
164
|
+
field_array = ret.send(field.name)
|
158
165
|
value.each do |v|
|
159
|
-
|
166
|
+
field_array << (v.is_a?(Numeric) ? v : v.dup)
|
160
167
|
end
|
161
168
|
else
|
162
|
-
ret
|
169
|
+
ret.send("#{field.name}=", value.is_a?(Numeric) ? value : value.dup)
|
163
170
|
end
|
164
171
|
end
|
165
172
|
ret
|
@@ -295,9 +302,9 @@ module Protobuf
|
|
295
302
|
def get_ext_field_by_tag(tag); self.class.get_ext_field_by_tag(tag) end
|
296
303
|
def get_ext_field(tag_or_name); self.class.get_ext_field(tag_or_name) end
|
297
304
|
|
298
|
-
def each_field
|
299
|
-
(fields.merge extension_fields).
|
300
|
-
|
305
|
+
def each_field
|
306
|
+
(fields.merge extension_fields).sort_by {|tag, field| tag}.each do |tag, field|
|
307
|
+
yield field, send(field.name)
|
301
308
|
end
|
302
309
|
end
|
303
310
|
end
|
data/lib/ruby_protobuf.rb
CHANGED