ruby_protobuf 0.3.3 → 0.4.1

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.
Files changed (78) hide show
  1. data/History.txt +10 -2
  2. data/Manifest.txt +26 -12
  3. data/README.txt +6 -1
  4. data/Rakefile +51 -14
  5. data/TODO +15 -0
  6. data/VERSION +1 -0
  7. data/bin/rprotoc +11 -6
  8. data/lib/protobuf/common/exceptions.rb +11 -0
  9. data/lib/protobuf/common/util.rb +9 -0
  10. data/lib/protobuf/common/wire_type.rb +6 -6
  11. data/lib/protobuf/compiler/compiler.rb +16 -16
  12. data/lib/protobuf/compiler/nodes.rb +67 -65
  13. data/lib/protobuf/compiler/proto.y +31 -38
  14. data/lib/protobuf/compiler/proto_parser.rb +315 -294
  15. data/lib/protobuf/compiler/template/rpc_bin.erb +1 -1
  16. data/lib/protobuf/compiler/template/rpc_client.erb +1 -1
  17. data/lib/protobuf/compiler/template/rpc_service.erb +2 -2
  18. data/lib/protobuf/compiler/visitors.rb +45 -39
  19. data/lib/protobuf/descriptor/descriptor.proto +0 -0
  20. data/lib/protobuf/descriptor/descriptor.rb +11 -10
  21. data/lib/protobuf/descriptor/descriptor_builder.rb +6 -7
  22. data/lib/protobuf/descriptor/descriptor_proto.rb +51 -31
  23. data/lib/protobuf/descriptor/enum_descriptor.rb +5 -5
  24. data/lib/protobuf/descriptor/field_descriptor.rb +8 -9
  25. data/lib/protobuf/descriptor/file_descriptor.rb +0 -1
  26. data/lib/protobuf/message/decoder.rb +33 -35
  27. data/lib/protobuf/message/encoder.rb +23 -19
  28. data/lib/protobuf/message/enum.rb +43 -9
  29. data/lib/protobuf/message/field.rb +281 -193
  30. data/lib/protobuf/message/message.rb +166 -110
  31. data/lib/protobuf/message/protoable.rb +4 -3
  32. data/lib/protobuf/message/service.rb +1 -1
  33. data/lib/protobuf/rpc/client.rb +3 -3
  34. data/lib/protobuf/rpc/handler.rb +1 -1
  35. data/lib/protobuf/rpc/server.rb +8 -8
  36. data/lib/ruby_protobuf.rb +1 -1
  37. data/test/check_unbuild.rb +7 -7
  38. data/test/proto/addressbook.pb.rb +67 -0
  39. data/test/proto/addressbook.proto +2 -0
  40. data/test/proto/addressbook_base.pb.rb +59 -0
  41. data/test/proto/addressbook_base.proto +1 -1
  42. data/test/proto/addressbook_ext.pb.rb +21 -0
  43. data/test/proto/addressbook_ext.proto +2 -2
  44. data/test/{collision.rb → proto/collision.pb.rb} +0 -0
  45. data/test/{ext_collision.rb → proto/ext_collision.pb.rb} +1 -1
  46. data/test/{ext_range.rb → proto/ext_range.pb.rb} +4 -4
  47. data/test/proto/ext_range.proto +2 -2
  48. data/test/proto/float_default.proto +10 -0
  49. data/test/proto/lowercase.pb.rb +31 -0
  50. data/test/proto/lowercase.proto +9 -0
  51. data/test/{merge.rb → proto/merge.pb.rb} +2 -2
  52. data/test/proto/nested.pb.rb +31 -0
  53. data/test/proto/nested.proto +2 -0
  54. data/test/proto/optional_field.pb.rb +36 -0
  55. data/test/proto/optional_field.proto +12 -0
  56. data/test/proto/packed.pb.rb +23 -0
  57. data/test/proto/packed.proto +6 -0
  58. data/test/{types.rb → proto/types.pb.rb} +43 -1
  59. data/test/test_addressbook.rb +30 -17
  60. data/test/test_compiler.rb +79 -78
  61. data/test/test_descriptor.rb +12 -12
  62. data/test/test_enum_value.rb +41 -0
  63. data/test/test_extension.rb +10 -14
  64. data/test/test_lowercase.rb +11 -0
  65. data/test/test_message.rb +44 -41
  66. data/test/test_optional_field.rb +61 -38
  67. data/test/test_packed_field.rb +40 -0
  68. data/test/test_parse.rb +8 -8
  69. data/test/test_repeated_types.rb +29 -3
  70. data/test/test_serialize.rb +12 -12
  71. data/test/test_standard_message.rb +30 -30
  72. data/test/test_types.rb +95 -95
  73. metadata +69 -39
  74. data/test/addressbook.rb +0 -98
  75. data/test/addressbook_base.rb +0 -62
  76. data/test/addressbook_ext.rb +0 -12
  77. data/test/nested.rb +0 -25
  78. data/test/test_ruby_protobuf.rb +0 -1
@@ -0,0 +1,59 @@
1
+ ### Generated by rprotoc. DO NOT EDIT!
2
+ ### <proto file: test/proto/addressbook_base.proto>
3
+ # package tutorial_ext;
4
+ #
5
+ # message Person {
6
+ # required string name = 1;
7
+ # required int32 id = 2;
8
+ # optional string email = 3;
9
+ #
10
+ # enum PhoneType {
11
+ # MOBILE = 0;
12
+ # HOME = 1;
13
+ # WORK = 2;
14
+ # }
15
+ #
16
+ # message PhoneNumber {
17
+ # required string number = 1;
18
+ # optional PhoneType type = 2 [default = HOME];
19
+ # }
20
+ #
21
+ # repeated PhoneNumber phone = 4;
22
+ #
23
+ # extensions 100 to 200;
24
+ # }
25
+ #
26
+ # message AddressBook {
27
+ # repeated Person person = 1;
28
+ # }
29
+
30
+ require 'protobuf/message/message'
31
+ require 'protobuf/message/enum'
32
+ require 'protobuf/message/service'
33
+ require 'protobuf/message/extend'
34
+
35
+ module TutorialExt
36
+ class Person < ::Protobuf::Message
37
+ defined_in __FILE__
38
+ required :string, :name, 1
39
+ required :int32, :id, 2
40
+ optional :string, :email, 3
41
+ class PhoneType < ::Protobuf::Enum
42
+ defined_in __FILE__
43
+ define :MOBILE, 0
44
+ define :HOME, 1
45
+ define :WORK, 2
46
+ end
47
+ class PhoneNumber < ::Protobuf::Message
48
+ defined_in __FILE__
49
+ required :string, :number, 1
50
+ optional :PhoneType, :type, 2, :default => :HOME
51
+ end
52
+ repeated :PhoneNumber, :phone, 4
53
+ extensions 100..200
54
+ end
55
+ class AddressBook < ::Protobuf::Message
56
+ defined_in __FILE__
57
+ repeated :Person, :person, 1
58
+ end
59
+ end
@@ -1,4 +1,4 @@
1
- package tutorial;
1
+ package tutorial_ext;
2
2
 
3
3
  message Person {
4
4
  required string name = 1;
@@ -0,0 +1,21 @@
1
+ ### Generated by rprotoc. DO NOT EDIT!
2
+ ### <proto file: test/proto/addressbook_ext.proto>
3
+ # import "test/proto/addressbook_base.proto";
4
+ # package tutorial_ext;
5
+ #
6
+ # extend Person {
7
+ # optional int32 age = 100;
8
+ # }
9
+
10
+ require 'protobuf/message/message'
11
+ require 'protobuf/message/enum'
12
+ require 'protobuf/message/service'
13
+ require 'protobuf/message/extend'
14
+
15
+ require 'test/proto/addressbook_base.pb'
16
+ module TutorialExt
17
+ class Person < ::Protobuf::Message
18
+ defined_in __FILE__
19
+ optional :int32, :age, 100, :extension => true
20
+ end
21
+ end
@@ -1,5 +1,5 @@
1
- import "test/addressbook_base.proto";
2
- package tutorial;
1
+ import "test/proto/addressbook_base.proto";
2
+ package tutorial_ext;
3
3
 
4
4
  extend Person {
5
5
  optional int32 age = 100;
File without changes
@@ -22,4 +22,4 @@ class ExtCollisionTest < ::Protobuf::Message
22
22
  defined_in __FILE__
23
23
  optional :string, :a, 1
24
24
  optional :string, :b, 1
25
- end
25
+ end
@@ -1,10 +1,10 @@
1
1
  ### Generated by rprotoc. DO NOT EDIT!
2
2
  ### <proto file: test/proto/ext_range.proto>
3
- # message ExtCollisionTest {
3
+ # message ExtRangeTest {
4
4
  # extensions 1 to 10;
5
5
  # }
6
6
  #
7
- # message ExtCollisionTest {
7
+ # extend ExtRangeTest {
8
8
  # optional string a = 11;
9
9
  # }
10
10
 
@@ -13,11 +13,11 @@ require 'protobuf/message/enum'
13
13
  require 'protobuf/message/service'
14
14
  require 'protobuf/message/extend'
15
15
 
16
- class ExtCollisionTest < ::Protobuf::Message
16
+ class ExtRangeTest < ::Protobuf::Message
17
17
  defined_in __FILE__
18
18
  extensions 1..10
19
19
  end
20
- class ExtCollisionTest < ::Protobuf::Message
20
+ class ExtRangeTest < ::Protobuf::Message
21
21
  defined_in __FILE__
22
22
  optional :string, :a, 11, :extension => true
23
23
  end
@@ -1,7 +1,7 @@
1
- message ExtCollisionTest {
1
+ message ExtRangeTest {
2
2
  extensions 1 to 10;
3
3
  }
4
4
 
5
- extend ExtCollisionTest {
5
+ extend ExtRangeTest {
6
6
  optional string a = 11;
7
7
  }
@@ -0,0 +1,10 @@
1
+ message M {
2
+ optional float f = 1 [default = 4.2];
3
+ optional float g = 2 [default = -4.2];
4
+ optional float h = 3 [default = 4352];
5
+ optional float i = 4 [default = 23145.2 ];
6
+ optional float j = 5 [default = -5 ];
7
+ optional float k = 6 [default = +23 ];
8
+ optional float l = 7 [default = +23.42 ];
9
+ }
10
+
@@ -0,0 +1,31 @@
1
+ ### Generated by rprotoc. DO NOT EDIT!
2
+ ### <proto file: test/proto/lowercase.proto>
3
+ # package test.lowercase;
4
+ #
5
+ # message foo {
6
+ # message bar {
7
+ # }
8
+ # }
9
+ # message baaz {
10
+ # required foo.bar x = 1;
11
+ # }
12
+
13
+ require 'protobuf/message/message'
14
+ require 'protobuf/message/enum'
15
+ require 'protobuf/message/service'
16
+ require 'protobuf/message/extend'
17
+
18
+ module Test
19
+ module Lowercase
20
+ class Foo < ::Protobuf::Message
21
+ defined_in __FILE__
22
+ class Bar < ::Protobuf::Message
23
+ defined_in __FILE__
24
+ end
25
+ end
26
+ class Baaz < ::Protobuf::Message
27
+ defined_in __FILE__
28
+ required :'foo::bar', :x, 1
29
+ end
30
+ end
31
+ end
@@ -0,0 +1,9 @@
1
+ package test.lowercase;
2
+
3
+ message foo {
4
+ message bar {
5
+ }
6
+ }
7
+ message baaz {
8
+ required foo.bar x = 1;
9
+ }
@@ -1,5 +1,5 @@
1
1
  ### Generated by rprotoc. DO NOT EDIT!
2
- ### <proto file: test/merge.proto>
2
+ ### <proto file: test/proto/merge.proto>
3
3
  # package test;
4
4
  #
5
5
  # message MergeMessage {
@@ -37,4 +37,4 @@ module Test
37
37
  repeated :InnerMessage1, :repeate_message, 2
38
38
  required :InnerMessage2, :require_message, 3
39
39
  end
40
- end
40
+ end
@@ -0,0 +1,31 @@
1
+ ### Generated by rprotoc. DO NOT EDIT!
2
+ ### <proto file: test/proto/nested.proto>
3
+ # package test.nested;
4
+ #
5
+ # message Foo {
6
+ # message Bar {
7
+ # }
8
+ # }
9
+ # message Baaz {
10
+ # optional Foo.Bar x = 1;
11
+ # }
12
+
13
+ require 'protobuf/message/message'
14
+ require 'protobuf/message/enum'
15
+ require 'protobuf/message/service'
16
+ require 'protobuf/message/extend'
17
+
18
+ module Test
19
+ module Nested
20
+ class Foo < ::Protobuf::Message
21
+ defined_in __FILE__
22
+ class Bar < ::Protobuf::Message
23
+ defined_in __FILE__
24
+ end
25
+ end
26
+ class Baaz < ::Protobuf::Message
27
+ defined_in __FILE__
28
+ optional :'Foo::Bar', :x, 1
29
+ end
30
+ end
31
+ end
@@ -1,3 +1,5 @@
1
+ package test.nested;
2
+
1
3
  message Foo {
2
4
  message Bar {
3
5
  }
@@ -0,0 +1,36 @@
1
+ ### Generated by rprotoc. DO NOT EDIT!
2
+ ### <proto file: test/proto/optional_field.proto>
3
+ # package test.optional_field;
4
+ #
5
+ # message Message {
6
+ # enum Enum {
7
+ # A = 1;
8
+ # B = 2;
9
+ # }
10
+ # optional uint32 number = 1 [default = 20];
11
+ # optional string text = 2 [default = "default string"];
12
+ # optional Enum enum = 3 [default = B];
13
+ # optional int32 signed = 4 [default = -100];
14
+ # }
15
+
16
+ require 'protobuf/message/message'
17
+ require 'protobuf/message/enum'
18
+ require 'protobuf/message/service'
19
+ require 'protobuf/message/extend'
20
+
21
+ module Test
22
+ module OptionalField
23
+ class Message < ::Protobuf::Message
24
+ defined_in __FILE__
25
+ class Enum < ::Protobuf::Enum
26
+ defined_in __FILE__
27
+ define :A, 1
28
+ define :B, 2
29
+ end
30
+ optional :uint32, :number, 1, :default => 20
31
+ optional :string, :text, 2, :default => "default string"
32
+ optional :Enum, :enum, 3, :default => :B
33
+ optional :int32, :signed, 4, :default => -100
34
+ end
35
+ end
36
+ end
@@ -0,0 +1,12 @@
1
+ package test.optional_field;
2
+
3
+ message Message {
4
+ enum Enum {
5
+ A = 1;
6
+ B = 2;
7
+ }
8
+ optional uint32 number = 1 [default = 20];
9
+ optional string text = 2 [default = "default string"];
10
+ optional Enum enum = 3 [default = B];
11
+ optional int32 signed = 4 [default = -100];
12
+ }
@@ -0,0 +1,23 @@
1
+ ### Generated by rprotoc. DO NOT EDIT!
2
+ ### <proto file: test/proto/packed.proto>
3
+ # package test.packed_field;
4
+ #
5
+ # message Message {
6
+ # repeated int32 a = 1 [packed = true];
7
+ # repeated fixed32 b = 2 [packed = true];
8
+ # }
9
+
10
+ require 'protobuf/message/message'
11
+ require 'protobuf/message/enum'
12
+ require 'protobuf/message/service'
13
+ require 'protobuf/message/extend'
14
+
15
+ module Test
16
+ module PackedField
17
+ class Message < ::Protobuf::Message
18
+ defined_in __FILE__
19
+ repeated :int32, :a, 1, :packed => true
20
+ repeated :fixed32, :b, 2, :packed => true
21
+ end
22
+ end
23
+ end
@@ -0,0 +1,6 @@
1
+ package test.packed_field;
2
+
3
+ message Message {
4
+ repeated int32 a = 1 [packed = true];
5
+ repeated fixed32 b = 2 [packed = true];
6
+ }
@@ -1,5 +1,47 @@
1
+ ### Generated by rprotoc. DO NOT EDIT!
2
+ ### <proto file: test/proto/types.proto>
3
+ # package test.types;
4
+ #
5
+ # message TestTypes {
6
+ # required double type1 = 1;
7
+ # required float type2 = 2;
8
+ # required int32 type3 = 3;
9
+ # required int64 type4 = 4;
10
+ # required uint32 type5 = 5;
11
+ # required uint64 type6 = 6;
12
+ # required sint32 type7 = 7;
13
+ # required sint64 type8 = 8;
14
+ # required fixed32 type9 = 9;
15
+ # required fixed64 type10 = 10;
16
+ # required bool type11 = 11;
17
+ # required string type12 = 12;
18
+ # required bytes type13 = 13;
19
+ # required sfixed32 type14 = 14;
20
+ # required sfixed64 type15 = 15;
21
+ # }
22
+ #
23
+ # message RepeatedTypes {
24
+ # repeated double type1 = 1;
25
+ # repeated float type2 = 2;
26
+ # repeated int32 type3 = 3;
27
+ # repeated int64 type4 = 4;
28
+ # repeated uint32 type5 = 5;
29
+ # repeated uint64 type6 = 6;
30
+ # repeated sint32 type7 = 7;
31
+ # repeated sint64 type8 = 8;
32
+ # repeated fixed32 type9 = 9;
33
+ # repeated fixed64 type10 = 10;
34
+ # repeated bool type11 = 11;
35
+ # repeated string type12 = 12;
36
+ # repeated bytes type13 = 13;
37
+ # repeated sfixed32 type14 = 14;
38
+ # repeated sfixed64 type15 = 15;
39
+ # }
40
+
1
41
  require 'protobuf/message/message'
2
42
  require 'protobuf/message/enum'
43
+ require 'protobuf/message/service'
44
+ require 'protobuf/message/extend'
3
45
 
4
46
  module Test
5
47
  module Types
@@ -40,4 +82,4 @@ module Test
40
82
  repeated :sfixed64, :type15, 15
41
83
  end
42
84
  end
43
- end
85
+ end
@@ -1,43 +1,56 @@
1
1
  require 'test/unit'
2
2
  require 'protobuf/message/message'
3
3
  require 'protobuf/message/enum'
4
- require 'test/addressbook'
4
+ require 'test/proto/addressbook.pb'
5
5
 
6
6
  class AddressbookTest < Test::Unit::TestCase
7
7
  def test_enum
8
8
  phone_number = Tutorial::Person::PhoneNumber.new
9
- assert_equal Tutorial::Person::PhoneType::HOME, phone_number.type
9
+ assert_equal(Tutorial::Person::PhoneType::HOME, phone_number.type)
10
10
  phone_number.type = Tutorial::Person::PhoneType::MOBILE
11
- assert_equal 0, phone_number.type
11
+ assert_equal(0, phone_number.type)
12
12
  phone_number.type = Tutorial::Person::PhoneType::HOME
13
- assert_equal 1, phone_number.type
13
+ assert_equal(1, phone_number.type)
14
14
  phone_number.type = Tutorial::Person::PhoneType::WORK
15
- assert_equal 2, phone_number.type
16
- assert_raise TypeError do
15
+ assert_equal(2, phone_number.type)
16
+ assert_raise(TypeError) do
17
17
  phone_number.type = 3
18
18
  end
19
19
  end
20
20
 
21
+ def test_symbol_enum
22
+ phone_number = Tutorial::Person::PhoneNumber.new
23
+ assert_equal(Tutorial::Person::PhoneType::HOME, phone_number.type)
24
+ phone_number.type = :MOBILE
25
+ assert_equal(0, phone_number.type)
26
+ phone_number.type = :HOME
27
+ assert_equal(1, phone_number.type)
28
+ phone_number.type = :WORK
29
+ assert_equal(2, phone_number.type)
30
+ assert_raise(TypeError) do
31
+ phone_number.type = :UNKNOWN
32
+ end
33
+ end
34
+
21
35
  def test_initial_value
22
36
  person = Tutorial::Person.new
23
- assert_nil person.name
24
- assert_nil person.id
25
- assert_equal [], person.phone
26
- assert_equal '', person.email
37
+ assert_nil(person.name)
38
+ assert_nil(person.id)
39
+ assert_equal([], person.phone)
40
+ assert_equal('', person.email)
27
41
  end
28
42
 
29
43
  def test_repeatable
30
44
  address_book = Tutorial::AddressBook.new
31
- assert_equal [], address_book.person
32
- assert_instance_of Protobuf::Field::FieldArray, address_book.person
45
+ assert_equal([], address_book.person)
46
+ assert_instance_of(Protobuf::Field::FieldArray, address_book.person)
33
47
  address_book.person << Tutorial::Person.new
34
- assert_equal 1, address_book.person.size
35
- assert_raise TypeError do
48
+ assert_equal(1, address_book.person.size)
49
+ assert_raise(TypeError) do
36
50
  address_book.person << 1
37
51
  end
38
- assert_equal 1, address_book.person.size
52
+ assert_equal(1, address_book.person.size)
39
53
  address_book.person << Tutorial::Person.new
40
- assert_equal 2, address_book.person.size
54
+ assert_equal(2, address_book.person.size)
41
55
  end
42
56
  end
43
-