macks-ruby_protobuf 0.3.2.2 → 0.3.2.3
Sign up to get free protection for your applications and to get access to all the features.
- 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