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