ruby_protobuf 0.3.3 → 0.4.1
Sign up to get free protection for your applications and to get access to all the features.
- 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
|
-
|