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.
- data/History.txt +10 -2
- data/Manifest.txt +26 -12
- data/README.txt +6 -1
- data/Rakefile +51 -14
- data/TODO +15 -0
- data/VERSION +1 -0
- data/bin/rprotoc +11 -6
- data/lib/protobuf/common/exceptions.rb +11 -0
- data/lib/protobuf/common/util.rb +9 -0
- data/lib/protobuf/common/wire_type.rb +6 -6
- data/lib/protobuf/compiler/compiler.rb +16 -16
- data/lib/protobuf/compiler/nodes.rb +67 -65
- data/lib/protobuf/compiler/proto.y +31 -38
- data/lib/protobuf/compiler/proto_parser.rb +315 -294
- data/lib/protobuf/compiler/template/rpc_bin.erb +1 -1
- data/lib/protobuf/compiler/template/rpc_client.erb +1 -1
- data/lib/protobuf/compiler/template/rpc_service.erb +2 -2
- data/lib/protobuf/compiler/visitors.rb +45 -39
- data/lib/protobuf/descriptor/descriptor.proto +0 -0
- data/lib/protobuf/descriptor/descriptor.rb +11 -10
- data/lib/protobuf/descriptor/descriptor_builder.rb +6 -7
- data/lib/protobuf/descriptor/descriptor_proto.rb +51 -31
- data/lib/protobuf/descriptor/enum_descriptor.rb +5 -5
- data/lib/protobuf/descriptor/field_descriptor.rb +8 -9
- data/lib/protobuf/descriptor/file_descriptor.rb +0 -1
- data/lib/protobuf/message/decoder.rb +33 -35
- data/lib/protobuf/message/encoder.rb +23 -19
- data/lib/protobuf/message/enum.rb +43 -9
- data/lib/protobuf/message/field.rb +281 -193
- data/lib/protobuf/message/message.rb +166 -110
- data/lib/protobuf/message/protoable.rb +4 -3
- data/lib/protobuf/message/service.rb +1 -1
- data/lib/protobuf/rpc/client.rb +3 -3
- data/lib/protobuf/rpc/handler.rb +1 -1
- data/lib/protobuf/rpc/server.rb +8 -8
- data/lib/ruby_protobuf.rb +1 -1
- data/test/check_unbuild.rb +7 -7
- data/test/proto/addressbook.pb.rb +67 -0
- data/test/proto/addressbook.proto +2 -0
- data/test/proto/addressbook_base.pb.rb +59 -0
- data/test/proto/addressbook_base.proto +1 -1
- data/test/proto/addressbook_ext.pb.rb +21 -0
- data/test/proto/addressbook_ext.proto +2 -2
- data/test/{collision.rb → proto/collision.pb.rb} +0 -0
- data/test/{ext_collision.rb → proto/ext_collision.pb.rb} +1 -1
- data/test/{ext_range.rb → proto/ext_range.pb.rb} +4 -4
- data/test/proto/ext_range.proto +2 -2
- data/test/proto/float_default.proto +10 -0
- data/test/proto/lowercase.pb.rb +31 -0
- data/test/proto/lowercase.proto +9 -0
- data/test/{merge.rb → proto/merge.pb.rb} +2 -2
- data/test/proto/nested.pb.rb +31 -0
- data/test/proto/nested.proto +2 -0
- data/test/proto/optional_field.pb.rb +36 -0
- data/test/proto/optional_field.proto +12 -0
- data/test/proto/packed.pb.rb +23 -0
- data/test/proto/packed.proto +6 -0
- data/test/{types.rb → proto/types.pb.rb} +43 -1
- data/test/test_addressbook.rb +30 -17
- data/test/test_compiler.rb +79 -78
- data/test/test_descriptor.rb +12 -12
- data/test/test_enum_value.rb +41 -0
- data/test/test_extension.rb +10 -14
- data/test/test_lowercase.rb +11 -0
- data/test/test_message.rb +44 -41
- data/test/test_optional_field.rb +61 -38
- data/test/test_packed_field.rb +40 -0
- data/test/test_parse.rb +8 -8
- data/test/test_repeated_types.rb +29 -3
- data/test/test_serialize.rb +12 -12
- data/test/test_standard_message.rb +30 -30
- data/test/test_types.rb +95 -95
- metadata +69 -39
- data/test/addressbook.rb +0 -98
- data/test/addressbook_base.rb +0 -62
- data/test/addressbook_ext.rb +0 -12
- data/test/nested.rb +0 -25
- 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
|
@@ -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
|
File without changes
|
@@ -1,10 +1,10 @@
|
|
1
1
|
### Generated by rprotoc. DO NOT EDIT!
|
2
2
|
### <proto file: test/proto/ext_range.proto>
|
3
|
-
# message
|
3
|
+
# message ExtRangeTest {
|
4
4
|
# extensions 1 to 10;
|
5
5
|
# }
|
6
6
|
#
|
7
|
-
#
|
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
|
16
|
+
class ExtRangeTest < ::Protobuf::Message
|
17
17
|
defined_in __FILE__
|
18
18
|
extensions 1..10
|
19
19
|
end
|
20
|
-
class
|
20
|
+
class ExtRangeTest < ::Protobuf::Message
|
21
21
|
defined_in __FILE__
|
22
22
|
optional :string, :a, 11, :extension => true
|
23
23
|
end
|
data/test/proto/ext_range.proto
CHANGED
@@ -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
|
@@ -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
|
data/test/proto/nested.proto
CHANGED
@@ -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
|
@@ -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
|
data/test/test_addressbook.rb
CHANGED
@@ -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
|
9
|
+
assert_equal(Tutorial::Person::PhoneType::HOME, phone_number.type)
|
10
10
|
phone_number.type = Tutorial::Person::PhoneType::MOBILE
|
11
|
-
assert_equal
|
11
|
+
assert_equal(0, phone_number.type)
|
12
12
|
phone_number.type = Tutorial::Person::PhoneType::HOME
|
13
|
-
assert_equal
|
13
|
+
assert_equal(1, phone_number.type)
|
14
14
|
phone_number.type = Tutorial::Person::PhoneType::WORK
|
15
|
-
assert_equal
|
16
|
-
assert_raise
|
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
|
24
|
-
assert_nil
|
25
|
-
assert_equal
|
26
|
-
assert_equal
|
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
|
32
|
-
assert_instance_of
|
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
|
35
|
-
assert_raise
|
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
|
52
|
+
assert_equal(1, address_book.person.size)
|
39
53
|
address_book.person << Tutorial::Person.new
|
40
|
-
assert_equal
|
54
|
+
assert_equal(2, address_book.person.size)
|
41
55
|
end
|
42
56
|
end
|
43
|
-
|