ruby_protobuf 0.4.5 → 0.4.6

Sign up to get free protection for your applications and to get access to all the features.
@@ -7,28 +7,43 @@ module Protobuf
7
7
 
8
8
  module_function
9
9
 
10
+ READ_METHODS = [
11
+ :read_varint, # 0: Varint
12
+ :read_fixed64, # 1: 64 bit
13
+ :read_length_delimited, # 2: Length-delimited
14
+ :read_start_group, # 3: Start group
15
+ :read_end_group, # 4: End group
16
+ :read_fixed32, # 5: 32 bit
17
+ ]
18
+
10
19
  # Read bytes from +stream+ and pass to +message+ object.
11
20
  def decode(stream, message)
12
21
  until stream.eof?
13
22
  tag, wire_type = read_key(stream)
14
- bytes =
15
- case wire_type
16
- when WireType::VARINT
17
- read_varint(stream)
18
- when WireType::FIXED64
19
- read_fixed64(stream)
20
- when WireType::LENGTH_DELIMITED
21
- read_length_delimited(stream)
22
- when WireType::START_GROUP
23
- read_start_group(stream)
24
- when WireType::END_GROUP
25
- read_end_group(stream)
26
- when WireType::FIXED32
27
- read_fixed32(stream)
23
+ field = message.get_field_by_tag(tag)
24
+
25
+ method = READ_METHODS[wire_type]
26
+ raise InvalidWireType, "Unknown wire type: #{wire_type}" unless method
27
+ value = send(method, stream)
28
+
29
+ if field.nil?
30
+ # ignore unknown field
31
+ elsif field.repeated?
32
+ array = message.__send__(field.name)
33
+ if wire_type == WireType::LENGTH_DELIMITED && WireType::PACKABLE_TYPES.include?(field.wire_type)
34
+ # packed
35
+ s = StringIO.new(value)
36
+ m = READ_METHODS[field.wire_type]
37
+ until s.eof?
38
+ array << field.decode(send(m, s))
39
+ end
28
40
  else
29
- raise InvalidWireType, wire_type
41
+ # non-packed
42
+ array << field.decode(value)
30
43
  end
31
- message.set_field(tag, bytes)
44
+ else
45
+ message.__send__("#{field.name}=", field.decode(value))
46
+ end
32
47
  end
33
48
  message
34
49
  end
@@ -14,6 +14,7 @@ module Protobuf
14
14
  next unless message.has_field?(field.name)
15
15
 
16
16
  if field.repeated?
17
+ next if value.empty?
17
18
  if field.packed?
18
19
  key = (field.tag << 3) | WireType::LENGTH_DELIMITED
19
20
  packed_value = value.map {|val| field.encode(val) }.join
@@ -36,7 +36,7 @@ module Protobuf
36
36
  nil
37
37
  end
38
38
 
39
- attr_reader :message_class, :rule, :type, :name, :tag, :default
39
+ attr_reader :message_class, :rule, :type, :name, :tag, :default, :extension
40
40
  attr_reader :default_value
41
41
 
42
42
  def descriptor
@@ -53,7 +53,7 @@ module Protobuf
53
53
  unless options.empty?
54
54
  warn "WARNING: Invalid options: #{options.inspect} (in #{@message_class.name.split('::').last}.#{@name})"
55
55
  end
56
- if packed? && ! [WireType::VARINT, WireType::FIXED32, WireType::FIXED64].include?(wire_type)
56
+ if packed? && ! WireType::PACKABLE_TYPES.include?(wire_type)
57
57
  raise "Can't use packed encoding for `#{@type}' type"
58
58
  end
59
59
 
@@ -70,7 +70,7 @@ module Protobuf
70
70
  define_accessor
71
71
  end
72
72
 
73
- def ready?
73
+ def ready? # :nodoc:
74
74
  true
75
75
  end
76
76
 
@@ -86,30 +86,6 @@ module Protobuf
86
86
  end
87
87
  end
88
88
 
89
- # Decode +bytes+ and pass to +message_instance+.
90
- def set(message_instance, bytes)
91
- if packed?
92
- array = message_instance.__send__(@name)
93
- method = \
94
- case wire_type
95
- when WireType::FIXED32 then :read_fixed32
96
- when WireType::FIXED64 then :read_fixed64
97
- when WireType::VARINT then :read_varint
98
- end
99
- stream = StringIO.new(bytes)
100
- until stream.eof?
101
- array << decode(Decoder.__send__(method, stream))
102
- end
103
- else
104
- value = decode(bytes)
105
- if repeated?
106
- message_instance.__send__(@name) << value
107
- else
108
- message_instance.__send__("#{@name}=", value)
109
- end
110
- end
111
- end
112
-
113
89
  # Decode +bytes+ and return a field value.
114
90
  def decode(bytes)
115
91
  raise NotImplementedError, "#{self.class.name}\#decode"
@@ -146,7 +122,7 @@ module Protobuf
146
122
 
147
123
  # Is this a packed repeated field?
148
124
  def packed?
149
- !!@packed
125
+ @packed
150
126
  end
151
127
 
152
128
  # Upper limit for this field.
@@ -240,7 +216,7 @@ module Protobuf
240
216
  message_class, rule, type, name, tag, options
241
217
  end
242
218
 
243
- def ready?
219
+ def ready? # :nodoc:
244
220
  false
245
221
  end
246
222
 
@@ -338,7 +314,6 @@ module Protobuf
338
314
  end
339
315
 
340
316
  def decode(bytes)
341
- bytes.force_encoding(Encoding::ASCII_8BIT) if bytes.respond_to?(:force_encoding)
342
317
  bytes
343
318
  end
344
319
 
@@ -346,7 +321,7 @@ module Protobuf
346
321
  if value.respond_to?(:force_encoding)
347
322
  # Ruby 1.9
348
323
  result = VarintField.encode(value.bytesize)
349
- result << value.dup.force_encoding(Encoding::ASCII_8BIT)
324
+ result << value.dup.force_encoding(Encoding::BINARY)
350
325
  else
351
326
  # Ruby 1.8
352
327
  result = VarintField.encode(value.size)
@@ -592,7 +567,7 @@ module Protobuf
592
567
  end
593
568
 
594
569
  def decode(value)
595
- value == 1
570
+ value != 0
596
571
  end
597
572
 
598
573
  def encode(value)
@@ -652,7 +627,7 @@ module Protobuf
652
627
  class EnumField < VarintField
653
628
  def acceptable?(val)
654
629
  case val
655
- when Symbol
630
+ when Symbol, String
656
631
  raise TypeError unless @type.const_defined?(val)
657
632
  when EnumValue
658
633
  raise TypeError if val.parent_class != @type
@@ -683,9 +658,9 @@ module Protobuf
683
658
  if val.nil?
684
659
  @values.delete(field.name)
685
660
  else
686
- val = \
661
+ enum_value = \
687
662
  case val
688
- when Symbol
663
+ when Symbol, String
689
664
  field.type.const_get(val) rescue nil
690
665
  when Integer
691
666
  field.type.const_get(field.type.name_by_value(val)) rescue nil
@@ -693,9 +668,9 @@ module Protobuf
693
668
  raise TypeError, "Invalid value: #{val.inspect}" if val.parent_class != field.type
694
669
  val
695
670
  end
696
- raise TypeError, "Invalid value: #{val.inspect}" unless val
671
+ raise TypeError, "Invalid value: #{val.inspect}" unless enum_value
697
672
 
698
- @values[field.name] = val
673
+ @values[field.name] = enum_value
699
674
  end
700
675
  end
701
676
  end
@@ -1,4 +1,3 @@
1
- require 'pp'
2
1
  require 'stringio'
3
2
  require 'protobuf/descriptor/descriptor'
4
3
  require 'protobuf/message/decoder'
@@ -11,27 +10,12 @@ module Protobuf
11
10
 
12
11
  class Message
13
12
 
14
- class ExtensionFields < Hash
15
- def initialize(key_range=0..-1)
16
- @key_range = key_range
17
- end
18
-
19
- def []=(key, value)
20
- raise RangeError, "#{key} is not in #{@key_range}" unless @key_range.include?(key)
21
- super
22
- end
23
-
24
- def include_tag?(tag)
25
- @key_range.include?(tag)
26
- end
27
- end
28
-
29
13
  class <<self
30
14
  include Protoable
31
15
 
32
16
  # Reserve field numbers for extensions. Don't use this method directly.
33
17
  def extensions(range)
34
- @extension_fields = ExtensionFields.new(range)
18
+ @extension_tag = range
35
19
  end
36
20
 
37
21
  # Define a required field. Don't use this method directly.
@@ -51,15 +35,18 @@ module Protobuf
51
35
 
52
36
  # Define a field. Don't use this method directly.
53
37
  def define_field(rule, type, fname, tag, options)
54
- field_hash = options[:extension] ? extension_fields : fields
55
- if field_hash.keys.include?(tag)
56
- raise TagCollisionError, %!{Field number #{tag} has already been used in "#{self.name}" by field "#{fname}".!
38
+ if options[:extension] && ! extension_tag?(tag)
39
+ raise RangeError, "#{tag} is not in #{@extension_tag}"
40
+ end
41
+
42
+ if fields.include?(tag)
43
+ raise TagCollisionError, "Field tag #{tag} has already been used."
57
44
  end
58
- field_hash[tag] = Field.build(self, rule, type, fname, tag, options)
45
+ fields[tag] = Field.build(self, rule, type, fname, tag, options)
59
46
  end
60
47
 
61
48
  def extension_tag?(tag)
62
- extension_fields.include_tag?(tag)
49
+ @extension_tag.include?(tag)
63
50
  end
64
51
 
65
52
  # A collection of field object.
@@ -67,11 +54,6 @@ module Protobuf
67
54
  @fields ||= {}
68
55
  end
69
56
 
70
- # An extension field object.
71
- def extension_fields
72
- @extension_fields ||= ExtensionFields.new
73
- end
74
-
75
57
  # Find a field object by +name+.
76
58
  def get_field_by_name(name)
77
59
  name = name.to_sym
@@ -92,26 +74,6 @@ module Protobuf
92
74
  end
93
75
  end
94
76
 
95
- #TODO merge to get_field_by_name
96
- def get_ext_field_by_name(name)
97
- name = name.to_sym
98
- extension_fields.values.find {|field| field.name == name}
99
- end
100
-
101
- #TODO merge to get_field_by_tag
102
- def get_ext_field_by_tag(tag)
103
- extension_fields[tag]
104
- end
105
-
106
- #TODO merge to get_field
107
- def get_ext_field(tag_or_name)
108
- case tag_or_name
109
- when Integer then get_ext_field_by_tag(tag_or_name)
110
- when String, Symbol then get_ext_field_by_name(tag_or_name)
111
- else raise TypeError, tag_or_name.class
112
- end
113
- end
114
-
115
77
  def descriptor
116
78
  @descriptor ||= Descriptor::Descriptor.new(self)
117
79
  end
@@ -120,7 +82,7 @@ module Protobuf
120
82
  def initialize(values={})
121
83
  @values = {}
122
84
 
123
- self.class.fields.to_a.each do |tag, field|
85
+ self.class.fields.dup.each do |tag, field|
124
86
  unless field.ready?
125
87
  field = field.setup
126
88
  self.class.fields[tag] = field
@@ -130,27 +92,15 @@ module Protobuf
130
92
  end
131
93
  end
132
94
 
133
- # TODO
134
- self.class.extension_fields.to_a.each do |tag, field|
135
- unless field.ready?
136
- field = field.setup
137
- self.class.extension_fields[tag] = field
138
- end
139
- if field.repeated?
140
- @values[field.name] = Field::FieldArray.new(field)
141
- end
142
- end
143
-
144
- values.each {|tag, val| self[tag] = val}
95
+ values.each {|name, val| self.__send__("#{name}=", val)}
145
96
  end
146
97
 
147
98
  def initialized?
148
- fields.all? {|tag, field| field.initialized?(self) } && \
149
- extension_fields.all? {|tag, field| field.initialized?(self) }
99
+ fields.all? {|tag, field| field.initialized?(self) }
150
100
  end
151
101
 
152
102
  def has_field?(tag_or_name)
153
- field = get_field(tag_or_name) || get_ext_field(tag_or_name)
103
+ field = get_field(tag_or_name)
154
104
  raise ArgumentError, "unknown field: #{tag_or_name.inspect}" unless field
155
105
  @values.has_key?(field.name)
156
106
  end
@@ -263,7 +213,7 @@ module Protobuf
263
213
  io = StringIO.new(string)
264
214
  serialize_to(io)
265
215
  result = io.string
266
- result.force_encoding(Encoding::ASCII_8BIT) if result.respond_to?(:force_encoding)
216
+ result.force_encoding(Encoding::BINARY) if result.respond_to?(:force_encoding)
267
217
  result
268
218
  end
269
219
  alias to_s serialize_to_string
@@ -283,23 +233,11 @@ module Protobuf
283
233
  end
284
234
 
285
235
  def merge_from(message)
286
- # TODO
287
- fields.each {|tag, field| merge_field(tag, message.__send__(field.name))}
288
- extension_fields.each {|tag, field| merge_field(tag, message.__send__(field.name))}
289
- end
290
-
291
- def set_field(tag, bytes)
292
- field = (get_field_by_tag(tag) || get_ext_field_by_tag(tag))
293
- field.set(self, bytes) if field
294
- end
295
-
296
- def merge_field(tag, value)
297
- #get_field_by_tag(tag).merge self, bytes #TODO
298
- (get_field_by_tag(tag) || get_ext_field_by_tag(tag)).merge(self, value)
236
+ fields.each {|tag, field| field.merge(self, message.__send__(field.name))}
299
237
  end
300
238
 
301
239
  def [](tag_or_name)
302
- if field = get_field(tag_or_name) || get_ext_field(tag_or_name)
240
+ if field = get_field(tag_or_name)
303
241
  __send__(field.name)
304
242
  else
305
243
  raise NoMethodError, "No such field: #{tag_or_name.inspect}"
@@ -307,7 +245,7 @@ module Protobuf
307
245
  end
308
246
 
309
247
  def []=(tag_or_name, value)
310
- if field = get_field(tag_or_name) || get_ext_field(tag_or_name)
248
+ if field = get_field(tag_or_name)
311
249
  __send__("#{field.name}=", value)
312
250
  else
313
251
  raise NoMethodError, "No such field: #{tag_or_name.inspect}"
@@ -334,32 +272,34 @@ module Protobuf
334
272
  self.class.get_field(tag_or_name)
335
273
  end
336
274
 
337
- # Returns extension fields. See Message#fields method.
338
- def extension_fields
339
- self.class.extension_fields
340
- end
341
-
342
- def get_ext_field_by_name(name) # :nodoc:
343
- self.class.get_ext_field_by_name(name)
344
- end
345
-
346
- def get_ext_field_by_tag(tag) # :nodoc:
347
- self.class.get_ext_field_by_tag(tag)
348
- end
349
-
350
- def get_ext_field(tag_or_name) # :nodoc:
351
- self.class.get_ext_field(tag_or_name)
352
- end
353
-
354
275
  # Iterate over a field collection.
355
276
  # message.each_field do |field_object, value|
356
277
  # # do something
357
278
  # end
358
279
  def each_field
359
- fields.merge(extension_fields).sort_by {|tag, _| tag}.each do |_, field|
280
+ @sorted_fields ||= fields.sort_by {|tag, _| tag}
281
+ @sorted_fields.each do |_, field|
360
282
  value = __send__(field.name)
361
283
  yield(field, value)
362
284
  end
363
285
  end
286
+
287
+ def to_hash
288
+ hash = {}
289
+ each_field do |field, value|
290
+ next unless has_field?(field.tag)
291
+ case value
292
+ when Array
293
+ next if value.empty?
294
+ hash[field.name] = value.map {|val| val.is_a?(Message) ? val.to_hash : val}
295
+ when Message
296
+ hash[field.name] = value.to_hash
297
+ else
298
+ hash[field.name] = value
299
+ end
300
+ end
301
+ hash
302
+ end
303
+
364
304
  end
365
305
  end
@@ -8,12 +8,12 @@
8
8
  # }
9
9
  # message InnerMessage2 {
10
10
  # required string name = 1;
11
- # repeated InnerMessage1 repeate_message = 2;
11
+ # repeated InnerMessage1 repeated_message = 2;
12
12
  # }
13
13
  #
14
14
  # required string name = 1;
15
- # repeated InnerMessage1 repeate_message = 2;
16
- # required InnerMessage2 require_message = 3;
15
+ # repeated InnerMessage1 repeated_message = 2;
16
+ # required InnerMessage2 required_message = 3;
17
17
  # }
18
18
 
19
19
  require 'protobuf/message/message'
@@ -31,10 +31,10 @@ module Test
31
31
  class InnerMessage2 < ::Protobuf::Message
32
32
  defined_in __FILE__
33
33
  required :string, :name, 1
34
- repeated :InnerMessage1, :repeate_message, 2
34
+ repeated :InnerMessage1, :repeated_message, 2
35
35
  end
36
36
  required :string, :name, 1
37
- repeated :InnerMessage1, :repeate_message, 2
38
- required :InnerMessage2, :require_message, 3
37
+ repeated :InnerMessage1, :repeated_message, 2
38
+ required :InnerMessage2, :required_message, 3
39
39
  end
40
40
  end
@@ -6,10 +6,10 @@ message MergeMessage {
6
6
  }
7
7
  message InnerMessage2 {
8
8
  required string name = 1;
9
- repeated InnerMessage1 repeate_message = 2;
9
+ repeated InnerMessage1 repeated_message = 2;
10
10
  }
11
11
 
12
12
  required string name = 1;
13
- repeated InnerMessage1 repeate_message = 2;
14
- required InnerMessage2 require_message = 3;
13
+ repeated InnerMessage1 repeated_message = 2;
14
+ required InnerMessage2 required_message = 3;
15
15
  }
@@ -30,9 +30,10 @@ class EnumValueTest < Test::Unit::TestCase
30
30
  assert_equal(1, phone_number.type)
31
31
 
32
32
  phone_number.type = :HOME
33
- assert_kind_of(Protobuf::EnumValue, phone_number.type)
34
33
  assert_equal(Tutorial::Person::PhoneType::HOME, phone_number.type)
35
- assert_equal(1, phone_number.type)
34
+
35
+ phone_number.type = 'HOME'
36
+ assert_equal(Tutorial::Person::PhoneType::HOME, phone_number.type)
36
37
 
37
38
  assert_raise(TypeError) do
38
39
  phone_number.type = TutorialExt::Person::PhoneType::HOME
@@ -3,8 +3,8 @@ require 'test/proto/addressbook_ext.pb'
3
3
 
4
4
  class ExtensionTest < Test::Unit::TestCase
5
5
  def test_accessor
6
- assert(TutorialExt::Person.extension_fields.to_a.map{|t, f| f.name}.include?(:age))
7
6
  person = TutorialExt::Person.new
7
+ assert(TutorialExt::Person.get_field(:age).extension)
8
8
  assert_nothing_raised {person.age = 100}
9
9
  assert_equal(100, person.age)
10
10
  end
data/test/test_message.rb CHANGED
@@ -32,26 +32,32 @@ class MessageTest < Test::Unit::TestCase
32
32
  end
33
33
 
34
34
  def test_initialize_with_hash
35
- person = Tutorial::Person.new(:name => 'Jiro', :id => 300, :email => 'jiro@ema.il')
35
+ hash = { :name => 'Jiro', :id => 300, :email => 'jiro@ema.il' }
36
+ person = Tutorial::Person.new(hash)
36
37
  assert_equal('Jiro', person.name)
37
38
  assert_equal(300, person.id)
38
39
  assert_equal('jiro@ema.il', person.email)
40
+ assert_equal(hash, person.to_hash)
39
41
 
40
42
  # initialize with array of hash
41
- person = Tutorial::Person.new(:phone => [{:number => 'phone1'}, {:number => 'phone2'}])
43
+ hash = { :phone => [{:number => 'phone1'}, {:number => 'phone2'}] }
44
+ person = Tutorial::Person.new(hash)
42
45
  assert_equal('phone1', person.phone[0].number)
43
46
  assert_equal('phone2', person.phone[1].number)
47
+ assert_equal(hash, person.to_hash)
44
48
 
45
49
  # initalize with hash in hash
46
- message = Test::MergeMessage.new(:require_message => { :name => 'name1', :repeate_message => [{:name => 'name2'}] })
47
- assert_equal('name1', message.require_message.name)
48
- assert_equal('name2', message.require_message.repeate_message[0].name)
49
-
50
- message.require_message = { :name => 'name21' }
51
- message.require_message.repeate_message = [ {:name => 'name22'} ]
52
- assert_equal('name21', message.require_message.name)
53
- assert_equal('name22', message.require_message.repeate_message[0].name)
54
- assert_equal(1, message.require_message.repeate_message.size)
50
+ hash = { :required_message => { :name => 'name1', :repeated_message => [{:name => 'name2'}] } }
51
+ message = Test::MergeMessage.new(hash)
52
+ assert_equal('name1', message.required_message.name)
53
+ assert_equal('name2', message.required_message.repeated_message[0].name)
54
+ assert_equal(hash, message.to_hash)
55
+
56
+ message.required_message = { :name => 'name21' }
57
+ message.required_message.repeated_message = [ {:name => 'name22'} ]
58
+ assert_equal('name21', message.required_message.name)
59
+ assert_equal('name22', message.required_message.repeated_message[0].name)
60
+ assert_equal(1, message.required_message.repeated_message.size)
55
61
  end
56
62
 
57
63
  def test_defined_filenames
@@ -106,23 +112,23 @@ message AddressBook {
106
112
 
107
113
  def test_merge_field
108
114
  inner_message1_2 = Test::MergeMessage::InnerMessage2.new(:name => 'name12')
109
- inner_message1_2.repeate_message << Test::MergeMessage::InnerMessage1.new(:name => 'name121')
110
- message1 = Test::MergeMessage.new(:name => 'name1', :require_message => inner_message1_2)
111
- message1.repeate_message << Test::MergeMessage::InnerMessage1.new(:name => 'name11')
115
+ inner_message1_2.repeated_message << Test::MergeMessage::InnerMessage1.new(:name => 'name121')
116
+ message1 = Test::MergeMessage.new(:name => 'name1', :required_message => inner_message1_2)
117
+ message1.repeated_message << Test::MergeMessage::InnerMessage1.new(:name => 'name11')
112
118
 
113
119
  inner_message2_2 = Test::MergeMessage::InnerMessage2.new(:name => 'name22')
114
- inner_message2_2.repeate_message << Test::MergeMessage::InnerMessage1.new(:name => 'name221')
115
- message2 = Test::MergeMessage.new(:name => 'name2', :require_message => inner_message2_2)
116
- message2.repeate_message << Test::MergeMessage::InnerMessage1.new(:name => 'name21')
120
+ inner_message2_2.repeated_message << Test::MergeMessage::InnerMessage1.new(:name => 'name221')
121
+ message2 = Test::MergeMessage.new(:name => 'name2', :required_message => inner_message2_2)
122
+ message2.repeated_message << Test::MergeMessage::InnerMessage1.new(:name => 'name21')
117
123
 
118
124
  message1.merge_from(message2)
119
125
  assert_equal('name2', message1.name)
120
- assert_equal(2, message1.repeate_message.size)
121
- assert_equal('name11', message1.repeate_message[0].name)
122
- assert_equal('name21', message1.repeate_message[1].name)
123
- assert_equal('name22', message1.require_message.name)
124
- assert_equal(2, message1.require_message.repeate_message.size)
125
- assert_equal('name121', message1.require_message.repeate_message[0].name)
126
- assert_equal('name221', message1.require_message.repeate_message[1].name)
126
+ assert_equal(2, message1.repeated_message.size)
127
+ assert_equal('name11', message1.repeated_message[0].name)
128
+ assert_equal('name21', message1.repeated_message[1].name)
129
+ assert_equal('name22', message1.required_message.name)
130
+ assert_equal(2, message1.required_message.repeated_message.size)
131
+ assert_equal('name121', message1.required_message.repeated_message[0].name)
132
+ assert_equal('name221', message1.required_message.repeated_message[1].name)
127
133
  end
128
134
  end
@@ -37,4 +37,9 @@ class PackedFieldTest < Test::Unit::TestCase
37
37
  end
38
38
  end
39
39
 
40
+ def test_empty_packed_field
41
+ message = Test::PackedField::Message.new
42
+ assert_equal('', message.to_s)
43
+ end
44
+
40
45
  end
metadata CHANGED
@@ -5,8 +5,8 @@ version: !ruby/object:Gem::Version
5
5
  segments:
6
6
  - 0
7
7
  - 4
8
- - 5
9
- version: 0.4.5
8
+ - 6
9
+ version: 0.4.6
10
10
  platform: ruby
11
11
  authors:
12
12
  - MATSUYAMA Kengo
@@ -14,7 +14,7 @@ autorequire:
14
14
  bindir: bin
15
15
  cert_chain: []
16
16
 
17
- date: 2010-07-17 00:00:00 +09:00
17
+ date: 2010-09-12 00:00:00 +09:00
18
18
  default_executable: rprotoc
19
19
  dependencies: []
20
20
 
@@ -147,38 +147,33 @@ signing_key:
147
147
  specification_version: 3
148
148
  summary: Protocol Buffers for Ruby
149
149
  test_files:
150
+ - test/check_unbuild.rb
151
+ - test/test_descriptor.rb
152
+ - test/test_optional_field.rb
153
+ - test/proto/merge.pb.rb
154
+ - test/proto/ext_collision.pb.rb
155
+ - test/proto/lowercase.pb.rb
156
+ - test/proto/addressbook_base.pb.rb
150
157
  - test/proto/packed.pb.rb
151
- - test/proto/types.pb.rb
158
+ - test/proto/optional_field.pb.rb
152
159
  - test/proto/addressbook.pb.rb
153
- - test/proto/ext_range.pb.rb
160
+ - test/proto/addressbook_ext.pb.rb
154
161
  - test/proto/nested.pb.rb
155
- - test/proto/client_search.rb
156
- - test/proto/addressbook_base.pb.rb
157
- - test/proto/rpc.pb.rb
158
- - test/proto/address_book_service.rb
162
+ - test/proto/ext_range.pb.rb
163
+ - test/proto/types.pb.rb
159
164
  - test/proto/collision.pb.rb
160
- - test/proto/optional_field.pb.rb
161
- - test/proto/merge.pb.rb
162
- - test/proto/addressbook_ext.pb.rb
163
- - test/proto/client_add.rb
164
- - test/proto/float_default.pb.rb
165
- - test/proto/lowercase.pb.rb
166
- - test/proto/ext_collision.pb.rb
167
- - test/test_compiler.rb
168
- - test/test_parse.rb
169
- - test/test_addressbook.rb
170
- - test/test_extension.rb
171
- - test/test_lowercase.rb
172
- - test/test_standard_message.rb
173
165
  - test/test_enum_value.rb
174
- - test/test_message.rb
175
- - test/test_types.rb
176
166
  - test/test_repeated_types.rb
177
- - test/test_descriptor.rb
178
- - test/test_optional_field.rb
179
- - test/test_packed_field.rb
167
+ - test/test_types.rb
168
+ - test/test_extension.rb
180
169
  - test/test_serialize.rb
181
- - test/check_unbuild.rb
182
- - examples/addressbook.pb.rb
170
+ - test/test_standard_message.rb
171
+ - test/test_packed_field.rb
172
+ - test/test_lowercase.rb
173
+ - test/test_compiler.rb
174
+ - test/test_message.rb
175
+ - test/test_parse.rb
176
+ - test/test_addressbook.rb
183
177
  - examples/writing_a_message.rb
184
178
  - examples/reading_a_message.rb
179
+ - examples/addressbook.pb.rb