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.
@@ -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