protobuf 3.3.6 → 3.4.0

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 (141) hide show
  1. checksums.yaml +7 -0
  2. data/.rubocop.yml +48 -0
  3. data/.rubocop_todo.yml +79 -0
  4. data/.travis.yml +12 -4
  5. data/Rakefile +14 -11
  6. data/bin/protoc-gen-ruby +0 -1
  7. data/bin/rpc_server +1 -0
  8. data/install-protobuf.sh +8 -0
  9. data/lib/protobuf.rb +30 -24
  10. data/lib/protobuf/cli.rb +35 -35
  11. data/lib/protobuf/code_generator.rb +11 -8
  12. data/lib/protobuf/decoder.rb +4 -5
  13. data/lib/protobuf/deprecation.rb +20 -0
  14. data/lib/protobuf/descriptors/google/protobuf/compiler/plugin.pb.rb +2 -0
  15. data/lib/protobuf/descriptors/google/protobuf/descriptor.pb.rb +2 -0
  16. data/lib/protobuf/encoder.rb +9 -4
  17. data/lib/protobuf/enum.rb +38 -54
  18. data/lib/protobuf/field.rb +2 -2
  19. data/lib/protobuf/field/base_field.rb +28 -32
  20. data/lib/protobuf/field/bool_field.rb +4 -4
  21. data/lib/protobuf/field/bytes_field.rb +5 -4
  22. data/lib/protobuf/field/double_field.rb +0 -1
  23. data/lib/protobuf/field/enum_field.rb +4 -7
  24. data/lib/protobuf/field/field_array.rb +3 -4
  25. data/lib/protobuf/field/fixed32_field.rb +1 -1
  26. data/lib/protobuf/field/fixed64_field.rb +0 -1
  27. data/lib/protobuf/field/float_field.rb +0 -1
  28. data/lib/protobuf/field/int32_field.rb +0 -1
  29. data/lib/protobuf/field/int64_field.rb +0 -1
  30. data/lib/protobuf/field/integer_field.rb +0 -1
  31. data/lib/protobuf/field/message_field.rb +2 -3
  32. data/lib/protobuf/field/sfixed32_field.rb +0 -1
  33. data/lib/protobuf/field/sfixed64_field.rb +0 -1
  34. data/lib/protobuf/field/signed_integer_field.rb +0 -1
  35. data/lib/protobuf/field/sint32_field.rb +0 -1
  36. data/lib/protobuf/field/sint64_field.rb +0 -1
  37. data/lib/protobuf/field/string_field.rb +0 -1
  38. data/lib/protobuf/field/uint32_field.rb +0 -1
  39. data/lib/protobuf/field/uint64_field.rb +0 -1
  40. data/lib/protobuf/field/varint_field.rb +0 -1
  41. data/lib/protobuf/generators/base.rb +1 -2
  42. data/lib/protobuf/generators/enum_generator.rb +1 -2
  43. data/lib/protobuf/generators/extension_generator.rb +1 -2
  44. data/lib/protobuf/generators/field_generator.rb +4 -5
  45. data/lib/protobuf/generators/file_generator.rb +22 -27
  46. data/lib/protobuf/generators/group_generator.rb +15 -16
  47. data/lib/protobuf/generators/message_generator.rb +13 -14
  48. data/lib/protobuf/generators/printable.rb +9 -10
  49. data/lib/protobuf/generators/service_generator.rb +1 -2
  50. data/lib/protobuf/lifecycle.rb +20 -33
  51. data/lib/protobuf/logging.rb +4 -6
  52. data/lib/protobuf/message.rb +22 -16
  53. data/lib/protobuf/message/fields.rb +14 -17
  54. data/lib/protobuf/message/serialization.rb +6 -5
  55. data/lib/protobuf/rpc/buffer.rb +10 -12
  56. data/lib/protobuf/rpc/client.rb +12 -12
  57. data/lib/protobuf/rpc/connectors/base.rb +4 -3
  58. data/lib/protobuf/rpc/connectors/common.rb +15 -17
  59. data/lib/protobuf/rpc/connectors/socket.rb +2 -2
  60. data/lib/protobuf/rpc/connectors/zmq.rb +118 -108
  61. data/lib/protobuf/rpc/dynamic_discovery.pb.rb +2 -0
  62. data/lib/protobuf/rpc/env.rb +12 -12
  63. data/lib/protobuf/rpc/error.rb +1 -1
  64. data/lib/protobuf/rpc/error/client_error.rb +4 -4
  65. data/lib/protobuf/rpc/error/server_error.rb +6 -6
  66. data/lib/protobuf/rpc/middleware/exception_handler.rb +1 -1
  67. data/lib/protobuf/rpc/middleware/logger.rb +3 -3
  68. data/lib/protobuf/rpc/middleware/request_decoder.rb +5 -5
  69. data/lib/protobuf/rpc/middleware/response_encoder.rb +3 -3
  70. data/lib/protobuf/rpc/rpc.pb.rb +2 -0
  71. data/lib/protobuf/rpc/servers/socket/server.rb +75 -65
  72. data/lib/protobuf/rpc/servers/socket/worker.rb +2 -2
  73. data/lib/protobuf/rpc/servers/socket_runner.rb +12 -6
  74. data/lib/protobuf/rpc/servers/zmq/broker.rb +10 -6
  75. data/lib/protobuf/rpc/servers/zmq/server.rb +20 -26
  76. data/lib/protobuf/rpc/servers/zmq/util.rb +7 -7
  77. data/lib/protobuf/rpc/servers/zmq/worker.rb +5 -7
  78. data/lib/protobuf/rpc/servers/zmq_runner.rb +14 -3
  79. data/lib/protobuf/rpc/service.rb +15 -15
  80. data/lib/protobuf/rpc/service_directory.rb +7 -11
  81. data/lib/protobuf/rpc/service_dispatcher.rb +3 -3
  82. data/lib/protobuf/rpc/service_filters.rb +27 -28
  83. data/lib/protobuf/rpc/stat.rb +4 -7
  84. data/lib/protobuf/socket.rb +0 -1
  85. data/lib/protobuf/tasks/compile.rake +2 -2
  86. data/lib/protobuf/version.rb +1 -1
  87. data/protobuf.gemspec +20 -4
  88. data/spec/benchmark/tasks.rb +49 -23
  89. data/spec/bin/protoc-gen-ruby_spec.rb +11 -6
  90. data/spec/encoding/all_types_spec.rb +91 -77
  91. data/spec/encoding/extreme_values_spec.rb +0 -0
  92. data/spec/functional/socket_server_spec.rb +9 -10
  93. data/spec/functional/zmq_server_spec.rb +21 -19
  94. data/spec/lib/protobuf/cli_spec.rb +20 -20
  95. data/spec/lib/protobuf/code_generator_spec.rb +6 -6
  96. data/spec/lib/protobuf/enum_spec.rb +57 -31
  97. data/spec/lib/protobuf/field/float_field_spec.rb +2 -2
  98. data/spec/lib/protobuf/field/int32_field_spec.rb +1 -1
  99. data/spec/lib/protobuf/field/string_field_spec.rb +7 -8
  100. data/spec/lib/protobuf/field_spec.rb +3 -6
  101. data/spec/lib/protobuf/generators/base_spec.rb +6 -6
  102. data/spec/lib/protobuf/generators/enum_generator_spec.rb +22 -17
  103. data/spec/lib/protobuf/generators/extension_generator_spec.rb +8 -9
  104. data/spec/lib/protobuf/generators/field_generator_spec.rb +14 -11
  105. data/spec/lib/protobuf/generators/file_generator_spec.rb +7 -4
  106. data/spec/lib/protobuf/generators/service_generator_spec.rb +14 -11
  107. data/spec/lib/protobuf/lifecycle_spec.rb +9 -4
  108. data/spec/lib/protobuf/message_spec.rb +63 -35
  109. data/spec/lib/protobuf/optionable_spec.rb +3 -3
  110. data/spec/lib/protobuf/rpc/client_spec.rb +2 -2
  111. data/spec/lib/protobuf/rpc/connector_spec.rb +1 -1
  112. data/spec/lib/protobuf/rpc/connectors/base_spec.rb +6 -6
  113. data/spec/lib/protobuf/rpc/connectors/common_spec.rb +26 -18
  114. data/spec/lib/protobuf/rpc/connectors/socket_spec.rb +4 -4
  115. data/spec/lib/protobuf/rpc/connectors/zmq_spec.rb +11 -9
  116. data/spec/lib/protobuf/rpc/middleware/exception_handler_spec.rb +2 -2
  117. data/spec/lib/protobuf/rpc/middleware/logger_spec.rb +7 -7
  118. data/spec/lib/protobuf/rpc/middleware/request_decoder_spec.rb +14 -14
  119. data/spec/lib/protobuf/rpc/middleware/response_encoder_spec.rb +5 -5
  120. data/spec/lib/protobuf/rpc/servers/socket_server_spec.rb +1 -1
  121. data/spec/lib/protobuf/rpc/servers/zmq/server_spec.rb +9 -7
  122. data/spec/lib/protobuf/rpc/servers/zmq/util_spec.rb +9 -9
  123. data/spec/lib/protobuf/rpc/servers/zmq/worker_spec.rb +2 -2
  124. data/spec/lib/protobuf/rpc/service_directory_spec.rb +24 -23
  125. data/spec/lib/protobuf/rpc/service_dispatcher_spec.rb +4 -4
  126. data/spec/lib/protobuf/rpc/service_filters_spec.rb +84 -51
  127. data/spec/lib/protobuf/rpc/service_spec.rb +15 -14
  128. data/spec/lib/protobuf/rpc/stat_spec.rb +1 -1
  129. data/spec/lib/protobuf_spec.rb +9 -9
  130. data/spec/spec_helper.rb +7 -19
  131. data/spec/support/server.rb +29 -59
  132. data/spec/support/test/defaults.pb.rb +2 -0
  133. data/spec/support/test/enum.pb.rb +2 -0
  134. data/spec/support/test/extended.pb.rb +2 -0
  135. data/spec/support/test/google_unittest_import.pb.rb +2 -0
  136. data/spec/support/test/google_unittest_import_public.pb.rb +2 -0
  137. data/spec/support/test/multi_field_extensions.pb.rb +2 -0
  138. data/spec/support/test/resource.pb.rb +2 -0
  139. data/spec/support/test/resource_service.rb +17 -20
  140. metadata +153 -112
  141. data/lib/protobuf/deprecator.rb +0 -42
@@ -1,6 +1,6 @@
1
1
  require 'spec_helper'
2
2
 
3
- describe Protobuf::Field::FloatField do
3
+ RSpec.describe Protobuf::Field::FloatField do
4
4
 
5
5
  class SomeFloatMessage < ::Protobuf::Message
6
6
  optional :float, :some_float, 1
@@ -44,7 +44,7 @@ describe Protobuf::Field::FloatField do
44
44
  end
45
45
 
46
46
  context 'when set with something that is not a float' do
47
- let(:value) { [ 1, 2, 3 ] }
47
+ let(:value) { [1, 2, 3] }
48
48
 
49
49
  it 'throws an error' do
50
50
  expect { subject }.to raise_error(TypeError)
@@ -1,6 +1,6 @@
1
1
  require 'spec_helper'
2
2
 
3
- describe Protobuf::Field::Int32Field do
3
+ RSpec.describe Protobuf::Field::Int32Field do
4
4
 
5
5
  it_behaves_like :packable_field, described_class
6
6
 
@@ -2,24 +2,24 @@
2
2
 
3
3
  require 'spec_helper'
4
4
 
5
- describe ::Protobuf::Field::StringField do
5
+ RSpec.describe ::Protobuf::Field::StringField do
6
6
 
7
7
  describe '#encode' do
8
8
  context 'when a repeated string field contains frozen strings' do
9
9
  it 'does not raise an encoding error' do
10
- expect {
11
- frozen_strings = [ "foo".freeze, "bar".freeze, "baz".freeze ]
10
+ expect do
11
+ frozen_strings = ["foo".freeze, "bar".freeze, "baz".freeze]
12
12
  ::Test::ResourceFindRequest.encode(:name => 'resource', :widgets => frozen_strings)
13
- }.not_to raise_error
13
+ end.not_to raise_error
14
14
  end
15
15
  end
16
16
 
17
17
  context 'when a repeated bytes field contains frozen strings' do
18
18
  it 'does not raise an encoding error' do
19
- expect {
20
- frozen_strings = [ "foo".freeze, "bar".freeze, "baz".freeze ]
19
+ expect do
20
+ frozen_strings = ["foo".freeze, "bar".freeze, "baz".freeze]
21
21
  ::Test::ResourceFindRequest.encode(:name => 'resource', :widget_bytes => frozen_strings)
22
- }.not_to raise_error
22
+ end.not_to raise_error
23
23
  end
24
24
  end
25
25
 
@@ -42,5 +42,4 @@ describe ::Protobuf::Field::StringField do
42
42
  end
43
43
  end
44
44
 
45
-
46
45
  end
@@ -1,7 +1,7 @@
1
1
  require 'spec_helper'
2
2
  require 'protobuf/field'
3
3
 
4
- describe ::Protobuf::Field do
4
+ RSpec.describe ::Protobuf::Field do
5
5
 
6
6
  describe '.build' do
7
7
  pending
@@ -148,7 +148,6 @@ describe ::Protobuf::Field do
148
148
  end
149
149
  end
150
150
 
151
-
152
151
  context 'when type is a string field class or symbol' do
153
152
  it 'returns that class' do
154
153
  expected_field = ::Protobuf::Field::StringField
@@ -159,7 +158,6 @@ describe ::Protobuf::Field do
159
158
  end
160
159
  end
161
160
 
162
-
163
161
  context 'when type is a bytes field class or symbol' do
164
162
  it 'returns that class' do
165
163
  expected_field = ::Protobuf::Field::BytesField
@@ -170,7 +168,6 @@ describe ::Protobuf::Field do
170
168
  end
171
169
  end
172
170
 
173
-
174
171
  context 'when type is a bool field class or symbol' do
175
172
  it 'returns that class' do
176
173
  expected_field = ::Protobuf::Field::BoolField
@@ -183,9 +180,9 @@ describe ::Protobuf::Field do
183
180
 
184
181
  context 'when type is not mapped' do
185
182
  it 'raises an ArgumentError' do
186
- expect {
183
+ expect do
187
184
  subject.field_class("boom")
188
- }.to raise_error
185
+ end.to raise_error
189
186
  end
190
187
  end
191
188
 
@@ -3,14 +3,14 @@ require 'spec_helper'
3
3
  require 'protobuf/code_generator'
4
4
  require 'protobuf/generators/base'
5
5
 
6
- describe ::Protobuf::Generators::Base do
6
+ RSpec.describe ::Protobuf::Generators::Base do
7
7
 
8
8
  subject { described_class.new(double) }
9
9
 
10
10
  context 'namespaces' do
11
11
  let(:descriptor) { double(:name => 'Baz') }
12
- subject { described_class.new(descriptor, 0, :namespace => [ :foo, :bar ]) }
13
- specify { expect(subject.type_namespace).to eq([ :foo, :bar, 'Baz' ]) }
12
+ subject { described_class.new(descriptor, 0, :namespace => [:foo, :bar]) }
13
+ specify { expect(subject.type_namespace).to eq([:foo, :bar, 'Baz']) }
14
14
  specify { expect(subject.fully_qualified_type_namespace).to eq('.foo.bar.Baz') }
15
15
  end
16
16
 
@@ -68,17 +68,17 @@ describe ::Protobuf::Generators::Base do
68
68
  context 'when tags are duplicated' do
69
69
  it 'fails with a GeneratorFatalError' do
70
70
  expect(::Protobuf::CodeGenerator).to receive(:fatal).with(/FooBar object has duplicate tags\. Expected 3 tags, but got 4/)
71
- described_class.validate_tags("FooBar", [1,2,2,3])
71
+ described_class.validate_tags("FooBar", [1, 2, 2, 3])
72
72
  end
73
73
  end
74
74
 
75
75
  context 'when tags are missing in the range' do
76
76
  it 'prints a warning' do
77
+ expect(::Protobuf::CodeGenerator).to receive(:print_tag_warning_suppress)
77
78
  expect(::Protobuf::CodeGenerator).to receive(:warn).with(/FooBar object should have 5 tags \(1\.\.5\), but found 4 tags/)
78
- described_class.validate_tags("FooBar", [1,2,4,5])
79
+ described_class.validate_tags("FooBar", [1, 2, 4, 5])
79
80
  end
80
81
  end
81
82
  end
82
83
 
83
84
  end
84
-
@@ -2,43 +2,49 @@ require 'spec_helper'
2
2
 
3
3
  require 'protobuf/generators/enum_generator'
4
4
 
5
- describe ::Protobuf::Generators::EnumGenerator do
5
+ RSpec.describe ::Protobuf::Generators::EnumGenerator do
6
6
 
7
- let(:values) {
7
+ let(:values) do
8
8
  [
9
9
  { :name => 'FOO', :number => 1 },
10
10
  { :name => 'BAR', :number => 2 },
11
- { :name => 'BAZ', :number => 3 }
11
+ { :name => 'BAZ', :number => 3 },
12
12
  ]
13
- }
13
+ end
14
14
  let(:options) { nil }
15
- let(:enum_fields) { { :name => 'TestEnum',
16
- :value => values,
17
- :options => options } }
15
+ let(:enum_fields) do
16
+ {
17
+ :name => 'TestEnum',
18
+ :value => values,
19
+ :options => options,
20
+ }
21
+ end
18
22
 
19
23
  let(:enum) { ::Google::Protobuf::EnumDescriptorProto.new(enum_fields) }
20
24
 
21
25
  subject { described_class.new(enum) }
22
26
 
23
27
  describe '#compile' do
24
- let(:compiled) {
25
- %q{class TestEnum < ::Protobuf::Enum
28
+ let(:compiled) do
29
+ <<-RUBY
30
+ class TestEnum < ::Protobuf::Enum
26
31
  define :FOO, 1
27
32
  define :BAR, 2
28
33
  define :BAZ, 3
29
34
  end
30
35
 
31
- }
32
- }
36
+ RUBY
37
+ end
33
38
 
34
- it 'compiles the enum and it\'s field values' do
39
+ it 'compiles the enum and its field values' do
35
40
  subject.compile
36
41
  expect(subject.to_s).to eq(compiled)
37
42
  end
38
43
 
39
44
  context 'when allow_alias option is set' do
40
- let(:compiled) {
41
- %q{class TestEnum < ::Protobuf::Enum
45
+ let(:compiled) do
46
+ <<-RUBY
47
+ class TestEnum < ::Protobuf::Enum
42
48
  set_option :allow_alias
43
49
 
44
50
  define :FOO, 1
@@ -46,8 +52,8 @@ end
46
52
  define :BAZ, 3
47
53
  end
48
54
 
49
- }
50
- }
55
+ RUBY
56
+ end
51
57
 
52
58
  let(:options) { { :allow_alias => true } }
53
59
 
@@ -65,4 +71,3 @@ end
65
71
  end
66
72
 
67
73
  end
68
-
@@ -3,15 +3,15 @@ require 'spec_helper'
3
3
  require 'protobuf/code_generator'
4
4
  require 'protobuf/generators/extension_generator'
5
5
 
6
- describe ::Protobuf::Generators::ExtensionGenerator do
6
+ RSpec.describe ::Protobuf::Generators::ExtensionGenerator do
7
7
 
8
- let(:field_descriptors) {
8
+ let(:field_descriptors) do
9
9
  [
10
10
  double('field descriptor 1', :to_s => " field 1\n"),
11
11
  double('field descriptor 2', :to_s => " field 2\n"),
12
- double('field descriptor 3', :to_s => " field 3\n")
12
+ double('field descriptor 3', :to_s => " field 3\n"),
13
13
  ]
14
- }
14
+ end
15
15
  let(:message_type) { 'FooBar' }
16
16
 
17
17
  before do
@@ -23,15 +23,15 @@ describe ::Protobuf::Generators::ExtensionGenerator do
23
23
  subject { described_class.new(message_type, field_descriptors, 0) }
24
24
 
25
25
  describe '#compile' do
26
- let(:compiled) {
27
- %q{class FooBar < ::Protobuf::Message
26
+ let(:compiled) do
27
+ 'class FooBar < ::Protobuf::Message
28
28
  field 1
29
29
  field 2
30
30
  field 3
31
31
  end
32
32
 
33
- }
34
- }
33
+ '
34
+ end
35
35
 
36
36
  it 'compiles the a class with the extension fields' do
37
37
  subject.compile
@@ -40,4 +40,3 @@ end
40
40
  end
41
41
 
42
42
  end
43
-
@@ -2,7 +2,7 @@ require 'spec_helper'
2
2
 
3
3
  require 'protobuf/generators/field_generator'
4
4
 
5
- describe ::Protobuf::Generators::FieldGenerator do
5
+ RSpec.describe ::Protobuf::Generators::FieldGenerator do
6
6
 
7
7
  let(:label_enum) { :LABEL_OPTIONAL }
8
8
  let(:name) { 'foo_bar' }
@@ -13,14 +13,18 @@ describe ::Protobuf::Generators::FieldGenerator do
13
13
  let(:extendee) { nil }
14
14
  let(:field_options) { {} }
15
15
 
16
- let(:field_fields) { { :label => label_enum,
17
- :name => name,
18
- :number => number,
19
- :type => type_enum,
20
- :type_name => type_name,
21
- :default_value => default_value,
22
- :extendee => extendee,
23
- :options => field_options } }
16
+ let(:field_fields) do
17
+ {
18
+ :label => label_enum,
19
+ :name => name,
20
+ :number => number,
21
+ :type => type_enum,
22
+ :type_name => type_name,
23
+ :default_value => default_value,
24
+ :extendee => extendee,
25
+ :options => field_options,
26
+ }
27
+ end
24
28
 
25
29
  let(:field) { ::Google::Protobuf::FieldDescriptorProto.new(field_fields) }
26
30
 
@@ -53,7 +57,7 @@ describe ::Protobuf::Generators::FieldGenerator do
53
57
  let(:type_enum) { :TYPE_STRING }
54
58
  let(:default_value) { "a default \"string\"" }
55
59
 
56
- specify { expect(subject).to eq %Q{optional :string, :foo_bar, 3, :default => "a default \"string\""\n} }
60
+ specify { expect(subject).to eq "optional :string, :foo_bar, 3, :default => \"a default \"string\"\"\n" }
57
61
  end
58
62
 
59
63
  context 'when float or double field type' do
@@ -96,4 +100,3 @@ describe ::Protobuf::Generators::FieldGenerator do
96
100
  end
97
101
 
98
102
  end
99
-
@@ -2,7 +2,7 @@ require 'spec_helper'
2
2
 
3
3
  require 'protobuf/generators/file_generator'
4
4
 
5
- describe ::Protobuf::Generators::FileGenerator do
5
+ RSpec.describe ::Protobuf::Generators::FileGenerator do
6
6
 
7
7
  let(:base_descriptor_fields) { { :name => 'test/foo.proto' } }
8
8
  let(:descriptor_fields) { base_descriptor_fields }
@@ -13,8 +13,12 @@ describe ::Protobuf::Generators::FileGenerator do
13
13
 
14
14
  describe '#print_import_requires' do
15
15
  let(:descriptor_fields) do
16
- base_descriptor_fields.merge!({ :dependency => [ 'test/bar.proto',
17
- 'test/baz.proto' ] })
16
+ base_descriptor_fields.merge(
17
+ :dependency => [
18
+ 'test/bar.proto',
19
+ 'test/baz.proto',
20
+ ],
21
+ )
18
22
  end
19
23
 
20
24
  it 'prints a ruby require for each dependency' do
@@ -26,4 +30,3 @@ describe ::Protobuf::Generators::FileGenerator do
26
30
  end
27
31
 
28
32
  end
29
-
@@ -2,30 +2,34 @@ require 'spec_helper'
2
2
 
3
3
  require 'protobuf/generators/service_generator'
4
4
 
5
- describe ::Protobuf::Generators::ServiceGenerator do
5
+ RSpec.describe ::Protobuf::Generators::ServiceGenerator do
6
6
 
7
- let(:methods) {
7
+ let(:methods) do
8
8
  [
9
9
  { :name => 'Search', :input_type => 'FooRequest', :output_type => 'FooResponse' },
10
- { :name => 'FooBar', :input_type => '.foo.Request', :output_type => '.bar.Response' }
10
+ { :name => 'FooBar', :input_type => '.foo.Request', :output_type => '.bar.Response' },
11
11
  ]
12
- }
13
- let(:service_fields) { { :name => 'TestService',
14
- :method => methods } }
12
+ end
13
+ let(:service_fields) do
14
+ {
15
+ :name => 'TestService',
16
+ :method => methods,
17
+ }
18
+ end
15
19
 
16
20
  let(:service) { ::Google::Protobuf::ServiceDescriptorProto.new(service_fields) }
17
21
 
18
22
  subject { described_class.new(service) }
19
23
 
20
24
  describe '#compile' do
21
- let(:compiled) {
22
- %q{class TestService < ::Protobuf::Rpc::Service
25
+ let(:compiled) do
26
+ 'class TestService < ::Protobuf::Rpc::Service
23
27
  rpc :search, FooRequest, FooResponse
24
28
  rpc :foo_bar, ::Foo::Request, ::Bar::Response
25
29
  end
26
30
 
27
- }
28
- }
31
+ '
32
+ end
29
33
 
30
34
  it 'compiles the service and it\'s rpc methods' do
31
35
  subject.compile
@@ -40,4 +44,3 @@ end
40
44
  end
41
45
 
42
46
  end
43
-
@@ -1,10 +1,15 @@
1
1
  require 'spec_helper'
2
2
  require 'protobuf/lifecycle'
3
3
 
4
- describe ::Protobuf::Lifecycle do
4
+ RSpec.describe ::Protobuf::Lifecycle do
5
5
  subject { described_class }
6
6
 
7
- before(:each) do
7
+ around do |example|
8
+ # this entire class is deprecated
9
+ ::Protobuf.deprecator.silence(&example)
10
+ end
11
+
12
+ before do
8
13
  ::ActiveSupport::Notifications.notifier = ::ActiveSupport::Notifications::Fanout.new
9
14
  end
10
15
 
@@ -14,9 +19,9 @@ describe ::Protobuf::Lifecycle do
14
19
  end
15
20
 
16
21
  it "only registers blocks for event callbacks" do
17
- expect {
22
+ expect do
18
23
  subject.register("something")
19
- }.to raise_error( /block/ )
24
+ end.to raise_error(/block/)
20
25
  end
21
26
 
22
27
  it "calls the registered block when triggered" do
@@ -2,7 +2,7 @@
2
2
 
3
3
  require 'spec_helper'
4
4
 
5
- describe Protobuf::Message do
5
+ RSpec.describe Protobuf::Message do
6
6
 
7
7
  describe '.decode' do
8
8
  let(:message) { ::Test::Resource.new(:name => "Jim") }
@@ -54,18 +54,18 @@ describe Protobuf::Message do
54
54
 
55
55
  context 'with a repeated field' do
56
56
  it 'treats the field as if it was unset when decoding' do
57
- newer = newer_message.new(:enum_list => [ :HOORAY ]).serialize
57
+ newer = newer_message.new(:enum_list => [:HOORAY]).serialize
58
58
 
59
59
  expect(older_message.decode(newer).enum_list).to eq([])
60
60
  end
61
61
 
62
62
  it 'rejects an unknown value when using the constructor' do
63
- expect { older_message.new(:enum_list => [ :HOORAY ]) }.to raise_error
63
+ expect { older_message.new(:enum_list => [:HOORAY]) }.to raise_error
64
64
  end
65
65
 
66
66
  it 'rejects an unknown value when the setter' do
67
67
  older = older_message.new
68
- expect { older.enum_field = [ :HOORAY ] }.to raise_error
68
+ expect { older.enum_field = [:HOORAY] }.to raise_error
69
69
  end
70
70
  end
71
71
  end
@@ -74,47 +74,47 @@ describe Protobuf::Message do
74
74
  describe 'defining a new field' do
75
75
  context 'when defining a field with a tag that has already been used' do
76
76
  it 'raises a TagCollisionError' do
77
- expect {
77
+ expect do
78
78
  Class.new(Protobuf::Message) do
79
79
  optional ::Protobuf::Field::Int32Field, :foo, 1
80
80
  optional ::Protobuf::Field::Int32Field, :bar, 1
81
81
  end
82
- }.to raise_error(Protobuf::TagCollisionError, /Field number 1 has already been used/)
82
+ end.to raise_error(Protobuf::TagCollisionError, /Field number 1 has already been used/)
83
83
  end
84
84
  end
85
85
 
86
86
  context 'when defining an extension field with a tag that has already been used' do
87
87
  it 'raises a TagCollisionError' do
88
- expect {
88
+ expect do
89
89
  Class.new(Protobuf::Message) do
90
90
  extensions 100...110
91
91
  optional ::Protobuf::Field::Int32Field, :foo, 100
92
92
  optional ::Protobuf::Field::Int32Field, :bar, 100, :extension => true
93
93
  end
94
- }.to raise_error(Protobuf::TagCollisionError, /Field number 100 has already been used/)
94
+ end.to raise_error(Protobuf::TagCollisionError, /Field number 100 has already been used/)
95
95
  end
96
96
  end
97
97
 
98
98
  context 'when defining a field with a name that has already been used' do
99
99
  it 'raises a DuplicateFieldNameError' do
100
- expect {
100
+ expect do
101
101
  Class.new(Protobuf::Message) do
102
102
  optional ::Protobuf::Field::Int32Field, :foo, 1
103
103
  optional ::Protobuf::Field::Int32Field, :foo, 2
104
104
  end
105
- }.to raise_error(Protobuf::DuplicateFieldNameError, /Field name foo has already been used/)
105
+ end.to raise_error(Protobuf::DuplicateFieldNameError, /Field name foo has already been used/)
106
106
  end
107
107
  end
108
108
 
109
109
  context 'when defining an extension field with a name that has already been used' do
110
110
  it 'raises a DuplicateFieldNameError' do
111
- expect {
111
+ expect do
112
112
  Class.new(Protobuf::Message) do
113
113
  extensions 100...110
114
114
  optional ::Protobuf::Field::Int32Field, :foo, 1
115
115
  optional ::Protobuf::Field::Int32Field, :foo, 100, :extension => true
116
116
  end
117
- }.to raise_error(Protobuf::DuplicateFieldNameError, /Field name foo has already been used/)
117
+ end.to raise_error(Protobuf::DuplicateFieldNameError, /Field name foo has already been used/)
118
118
  end
119
119
  end
120
120
  end
@@ -246,9 +246,9 @@ describe Protobuf::Message do
246
246
  let(:message) { ::Test::ResourceWithRequiredField.new }
247
247
 
248
248
  it "raises a 'message not initialized' error" do
249
- expect {
249
+ expect do
250
250
  message.encode
251
- }.to raise_error(Protobuf::SerializationError, /required/i)
251
+ end.to raise_error(Protobuf::SerializationError, /required/i)
252
252
  end
253
253
  end
254
254
 
@@ -256,10 +256,10 @@ describe Protobuf::Message do
256
256
  let(:message) { ::Test::Resource.new(:name => "something") }
257
257
 
258
258
  it "does not raise an error when repeated fields are []" do
259
- expect {
259
+ expect do
260
260
  message.repeated_enum = []
261
261
  message.encode
262
- }.to_not raise_error
262
+ end.to_not raise_error
263
263
  end
264
264
 
265
265
  it "sets the value to nil when empty array is passed" do
@@ -280,9 +280,9 @@ describe Protobuf::Message do
280
280
  end
281
281
 
282
282
  it "raises TypeError when a non-array replaces it" do
283
- expect {
283
+ expect do
284
284
  message.repeated_enum = 2
285
- }.to raise_error(/value of type/)
285
+ end.to raise_error(/value of type/)
286
286
  end
287
287
  end
288
288
  end
@@ -359,11 +359,34 @@ describe Protobuf::Message do
359
359
 
360
360
  end
361
361
 
362
+ describe '#inspect' do
363
+ let(:klass) do
364
+ Class.new(Protobuf::Message) do |klass|
365
+ enum_class = Class.new(Protobuf::Enum) do
366
+ define :YAY, 1
367
+ end
368
+
369
+ klass.const_set(:EnumKlass, enum_class)
370
+
371
+ optional :string, :name, 1
372
+ repeated :int32, :counts, 2
373
+ optional enum_class, :enum, 3
374
+ end
375
+ end
376
+
377
+ before { stub_const('MyMessage', klass) }
378
+
379
+ it 'lists the fields' do
380
+ proto = klass.new(:name => 'wooo', :counts => [1, 2, 3], :enum => klass::EnumKlass::YAY)
381
+ expect(proto.inspect).to eq('#<MyMessage name="wooo" counts=[1, 2, 3] enum=#<Protobuf::Enum(MyMessage::EnumKlass)::YAY=1>>')
382
+ end
383
+ end
384
+
362
385
  describe '#to_hash' do
363
386
  context 'generating values for an ENUM field' do
364
387
  it 'converts the enum to its tag representation' do
365
388
  hash = Test::EnumTestMessage.new(:non_default_enum => :TWO).to_hash
366
- expect(hash).to eq({ :non_default_enum => 2 })
389
+ expect(hash).to eq(:non_default_enum => 2)
367
390
  end
368
391
 
369
392
  it 'does not populate default values' do
@@ -372,33 +395,38 @@ describe Protobuf::Message do
372
395
  end
373
396
 
374
397
  it 'converts repeated enum fields to an array of the tags' do
375
- hash = Test::EnumTestMessage.new(:repeated_enums => [ :ONE, :TWO, :TWO, :ONE ]).to_hash
376
- expect(hash).to eq({ :repeated_enums => [ 1, 2, 2, 1 ] })
398
+ hash = Test::EnumTestMessage.new(:repeated_enums => [:ONE, :TWO, :TWO, :ONE]).to_hash
399
+ expect(hash).to eq(:repeated_enums => [1, 2, 2, 1])
377
400
  end
378
401
  end
379
402
 
380
403
  context 'generating values for a Message field' do
381
404
  it 'recursively hashes field messages' do
382
- hash = Test::Nested.new({ :resource => { :name => 'Nested' } }).to_hash
383
- expect(hash).to eq({ :resource => { :name => 'Nested' } })
405
+ hash = Test::Nested.new(:resource => { :name => 'Nested' }).to_hash
406
+ expect(hash).to eq(:resource => { :name => 'Nested' })
384
407
  end
385
408
 
386
409
  it 'recursively hashes a repeated set of messages' do
387
- proto = Test::Nested.new(:multiple_resources => [
388
- Test::Resource.new(:name => 'Resource 1'),
389
- Test::Resource.new(:name => 'Resource 2')
390
- ])
391
-
392
- expect(proto.to_hash).to eq({ :multiple_resources => [ { :name => 'Resource 1' },
393
- { :name => 'Resource 2' } ] })
394
-
410
+ proto = Test::Nested.new(
411
+ :multiple_resources => [
412
+ Test::Resource.new(:name => 'Resource 1'),
413
+ Test::Resource.new(:name => 'Resource 2'),
414
+ ],
415
+ )
416
+
417
+ expect(proto.to_hash).to eq(
418
+ :multiple_resources => [
419
+ { :name => 'Resource 1' },
420
+ { :name => 'Resource 2' },
421
+ ],
422
+ )
395
423
  end
396
424
  end
397
425
  end
398
426
 
399
427
  describe '#to_json' do
400
428
  subject do
401
- ::Test::ResourceFindRequest.new({ :name => 'Test Name', :active => false })
429
+ ::Test::ResourceFindRequest.new(:name => 'Test Name', :active => false)
402
430
  end
403
431
 
404
432
  specify { expect(subject.to_json).to eq '{"name":"Test Name","active":false}' }
@@ -406,11 +434,11 @@ describe Protobuf::Message do
406
434
 
407
435
  describe '.to_json' do
408
436
  it 'returns the class name of the message for use in json encoding' do
409
- expect {
437
+ expect do
410
438
  ::Timeout.timeout(0.1) do
411
439
  expect(::Test::Resource.to_json).to eq("Test::Resource")
412
440
  end
413
- }.not_to raise_error
441
+ end.not_to raise_error
414
442
  end
415
443
  end
416
444
 
@@ -422,7 +450,7 @@ describe Protobuf::Message do
422
450
  end
423
451
 
424
452
  it "does not allow string fields to be set to Numeric" do
425
- expect { subject.name = 1}.to raise_error(/name/)
453
+ expect { subject.name = 1 }.to raise_error(/name/)
426
454
  end
427
455
  end
428
456