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.
@@ -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
- def define_accessor(message_instance)
84
- message_instance.instance_variable_get(:@values)[name] = default_value if rule == :repeated
85
- define_getter message_instance
86
- define_setter message_instance unless rule == :repeated
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(message_instance)
91
+ def define_getter
90
92
  field = self
91
- metaclass = (class << message_instance; self; end)
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(message_instance)
104
+ def define_setter
104
105
  field = self
105
- metaclass = (class << message_instance; self; end)
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
- fields.values.find {|field| field.name == name.to_sym}
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
- extension_fields.values.find {|field| field.name == name.to_sym}
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.define_accessor self
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.define_accessor self
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[field.name]
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
- ret[field.name] << (v.is_a?(Numeric) ? v : v.dup)
166
+ field_array << (v.is_a?(Numeric) ? v : v.dup)
160
167
  end
161
168
  else
162
- ret[field.name] = value.is_a?(Numeric) ? value : value.dup
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(&block)
299
- (fields.merge extension_fields).to_a.sort{|(t1, f1), (t2, f2)| t1 <=> t2}.each do |tag, field|
300
- block.call field, self[tag]
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
@@ -1,3 +1,3 @@
1
1
  class RubyProtobuf
2
- VERSION = '0.3.2.2'
2
+ VERSION = '0.3.2.3'
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: macks-ruby_protobuf
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.2.2
4
+ version: 0.3.2.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - MATSUYAMA Kengo