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
@@ -1,9 +1,9 @@
1
1
  class Protobuf::ProtoParser
2
2
  rule
3
3
  proto : proto_item
4
- { result = Protobuf::Node::ProtoNode.new val }
4
+ { result = Protobuf::Node::ProtoNode.new(val) }
5
5
  | proto proto_item
6
- { result.children << val[1] }
6
+ { result.children << val[1] if val[1]}
7
7
 
8
8
  proto_item : message
9
9
  | extend
@@ -12,14 +12,13 @@ rule
12
12
  | package
13
13
  | option
14
14
  | service
15
- | ';'
16
- { }
15
+ | ';' { result = nil }
17
16
 
18
17
  import : 'import' STRING_LITERAL ';'
19
- { result = Protobuf::Node::ImportNode.new val[1] }
18
+ { result = Protobuf::Node::ImportNode.new(val[1]) }
20
19
 
21
20
  package : 'package' IDENT dot_ident_list ';'
22
- { result = Protobuf::Node::PackageNode.new val[2].unshift(val[1]) }
21
+ { result = Protobuf::Node::PackageNode.new(val[2].unshift(val[1])) }
23
22
 
24
23
  dot_ident_list :
25
24
  { result = [] }
@@ -33,52 +32,49 @@ rule
33
32
  { result = [val[1].unshift(val[0]), val[3]] }
34
33
 
35
34
  message : 'message' IDENT message_body
36
- { result = Protobuf::Node::MessageNode.new val[1], val[2] }
35
+ { result = Protobuf::Node::MessageNode.new(val[1], val[2]) }
37
36
 
38
37
  extend : 'extend' user_type '{' extend_body_list '}'
39
- { result = Protobuf::Node::ExtendNode.new val[1], val[3] }
38
+ { result = Protobuf::Node::ExtendNode.new(val[1], val[3]) }
40
39
 
41
- extend_body_list :
40
+ extend_body_list :
42
41
  { result = [] }
43
42
  | extend_body_list extend_body
44
- { result << val[1] }
43
+ { result << val[1] if val[1] }
45
44
 
46
45
  extend_body : field
47
46
  | group
48
- | ';'
49
- { }
47
+ | ';' { result = nil }
50
48
 
51
49
  enum : 'enum' IDENT '{' enum_body_list '}'
52
- { result = Protobuf::Node::EnumNode.new val[1], val[3] }
50
+ { result = Protobuf::Node::EnumNode.new(val[1], val[3]) }
53
51
 
54
52
  enum_body_list :
55
53
  { result = [] }
56
54
  | enum_body_list enum_body
57
- { result << val[1] }
55
+ { result << val[1] if val[1] }
58
56
 
59
57
  enum_body : option
60
58
  | enum_field
61
- | ';'
62
- { }
59
+ | ';' { result = nil }
63
60
 
64
61
  enum_field : IDENT '=' integer_literal ';'
65
- { result = Protobuf::Node::EnumFieldNode.new val[0], val[2] }
62
+ { result = Protobuf::Node::EnumFieldNode.new(val[0], val[2]) }
66
63
 
67
64
  service : 'service' IDENT '{' service_body_list '}'
68
- { result = Protobuf::Node::ServiceNode.new val[1], val[3] }
65
+ { result = Protobuf::Node::ServiceNode.new(val[1], val[3]) }
69
66
 
70
67
  service_body_list :
71
68
  { result = [] }
72
69
  | service_body_list service_body
73
- { result << val[1] }
70
+ { result << val[1] if val[1] }
74
71
 
75
72
  service_body : option
76
73
  | rpc
77
- | ';'
78
- { }
74
+ | ';' { result = nil}
79
75
 
80
76
  rpc : 'rpc' IDENT '(' rpc_arg ')' 'returns' '(' rpc_arg ')' ';'
81
- { result = Protobuf::Node::RpcNode.new val[1], val[3], val[7] }
77
+ { result = Protobuf::Node::RpcNode.new(val[1], val[3], val[7]) }
82
78
 
83
79
  rpc_arg :
84
80
  | user_type
@@ -89,7 +85,7 @@ rule
89
85
  message_body_body_list :
90
86
  { result = [] }
91
87
  | message_body_body_list message_body_body
92
- { result << val[1] }
88
+ { result << val[1] if val[1] }
93
89
 
94
90
  message_body_body : field
95
91
  | enum
@@ -98,16 +94,15 @@ rule
98
94
  | extensions
99
95
  | group
100
96
  | option
101
- | ';'
102
- { }
97
+ | ';' { result = nil }
103
98
 
104
- group : label 'group' CAMEL_IDENT '=' integer_literal message_body
105
- { result = Protobuf::Node::GroupNode.new val[0], val[2], val[4], val[5] }
99
+ group : label 'group' IDENT '=' integer_literal message_body
100
+ { result = Protobuf::Node::GroupNode.new(val[0], val[2], val[4], val[5]) }
106
101
 
107
102
  field : label type field_name '=' integer_literal ';'
108
- { result = Protobuf::Node::FieldNode.new val[0], val[1], val[2], val[4] }
103
+ { result = Protobuf::Node::FieldNode.new(val[0], val[1], val[2], val[4]) }
109
104
  | label type field_name '=' integer_literal '[' field_option_list ']' ';'
110
- { result = Protobuf::Node::FieldNode.new val[0], val[1], val[2], val[4], val[6] }
105
+ { result = Protobuf::Node::FieldNode.new(val[0], val[1], val[2], val[4], val[6]) }
111
106
 
112
107
  field_name : IDENT | "required" | "optional" | "repeated" | "import" | "package" | "option" | "message" | "extend" | "enum" | "service" | "rpc" | "returns" | "group" | "default" | "extensions" | "to" | "max" | "double" | "float" | "int32" | "int64" | "uint32" | "uint64" | "sint32" | "sint64" | "fixed32" | "fixed64" | "sfixed32" | "sfixed64" | "bool" | "string" | "bytes"
113
108
 
@@ -121,19 +116,19 @@ rule
121
116
  { result = [:default, val[2]] }
122
117
 
123
118
  extensions : 'extensions' extension comma_extension_list ';'
124
- { result = Protobuf::Node::ExtensionsNode.new val[2].unshift(val[1]) }
119
+ { result = Protobuf::Node::ExtensionsNode.new(val[2].unshift(val[1])) }
125
120
 
126
- comma_extension_list :
121
+ comma_extension_list :
127
122
  { result = [] }
128
123
  | ',' extension
129
124
  { result << val[1] }
130
125
 
131
126
  extension : integer_literal
132
- { result = Protobuf::Node::ExtensionRangeNode.new val[0] }
127
+ { result = Protobuf::Node::ExtensionRangeNode.new(val[0]) }
133
128
  | integer_literal 'to' integer_literal
134
- { result = Protobuf::Node::ExtensionRangeNode.new val[0], val[2] }
129
+ { result = Protobuf::Node::ExtensionRangeNode.new(val[0], val[2]) }
135
130
  | integer_literal 'to' 'max'
136
- { result = Protobuf::Node::ExtensionRangeNode.new val[0], :max }
131
+ { result = Protobuf::Node::ExtensionRangeNode.new(val[0], :max) }
137
132
 
138
133
  label : 'required'
139
134
  | 'optional'
@@ -153,7 +148,7 @@ rule
153
148
  | FLOAT_LITERAL
154
149
  | STRING_LITERAL
155
150
  | BOOLEAN_LITERAL
156
-
151
+
157
152
  integer_literal : DEC_INTEGER
158
153
  | HEX_INTEGER
159
154
  | OCT_INTEGER
@@ -197,10 +192,8 @@ end
197
192
  yield [:BOOLEAN_LITERAL, @token == 'true']
198
193
  when match(/"(?:[^"\\]+|\\.)*"/, /'(?:[^'\\]+|\\.)*'/)
199
194
  yield [:STRING_LITERAL, eval(@token)]
200
- when match(/[a-zA-Z_][\w_]*/)
195
+ when match(/[a-zA-Z_]\w*/)
201
196
  yield [:IDENT, @token.to_sym]
202
- when match(/[A-Z][\w_]*/)
203
- yield [:CAMEL_IDENT, @token.to_sym]
204
197
  when match(/./)
205
198
  yield [@token, @token]
206
199
  else