protobuf 1.0.1 → 1.1.0.beta0

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 (45) hide show
  1. data/.gitignore +3 -0
  2. data/.yardopts +5 -0
  3. data/Gemfile.lock +25 -10
  4. data/bin/rpc_server +38 -33
  5. data/lib/protobuf.rb +22 -3
  6. data/lib/protobuf/common/logger.rb +6 -8
  7. data/lib/protobuf/compiler/visitors.rb +8 -9
  8. data/lib/protobuf/descriptor/descriptor_builder.rb +6 -6
  9. data/lib/protobuf/ext/eventmachine.rb +2 -4
  10. data/lib/protobuf/message/message.rb +1 -3
  11. data/lib/protobuf/rpc/buffer.rb +6 -6
  12. data/lib/protobuf/rpc/client.rb +59 -21
  13. data/lib/protobuf/rpc/connector.rb +10 -9
  14. data/lib/protobuf/rpc/connectors/base.rb +23 -8
  15. data/lib/protobuf/rpc/connectors/common.rb +155 -0
  16. data/lib/protobuf/rpc/connectors/em_client.rb +23 -192
  17. data/lib/protobuf/rpc/connectors/eventmachine.rb +36 -44
  18. data/lib/protobuf/rpc/connectors/socket.rb +58 -1
  19. data/lib/protobuf/rpc/error.rb +6 -14
  20. data/lib/protobuf/rpc/server.rb +72 -99
  21. data/lib/protobuf/rpc/servers/evented_runner.rb +32 -0
  22. data/lib/protobuf/rpc/servers/evented_server.rb +29 -0
  23. data/lib/protobuf/rpc/servers/socket_runner.rb +17 -0
  24. data/lib/protobuf/rpc/servers/socket_server.rb +145 -0
  25. data/lib/protobuf/rpc/service.rb +50 -51
  26. data/lib/protobuf/rpc/stat.rb +2 -2
  27. data/lib/protobuf/version.rb +1 -1
  28. data/protobuf.gemspec +9 -4
  29. data/spec/helper/all.rb +1 -7
  30. data/spec/helper/server.rb +45 -5
  31. data/spec/helper/silent_constants.rb +40 -0
  32. data/spec/proto/test_service.rb +0 -1
  33. data/spec/proto/test_service_impl.rb +4 -3
  34. data/spec/spec_helper.rb +19 -6
  35. data/spec/unit/enum_spec.rb +4 -4
  36. data/spec/unit/rpc/client_spec.rb +32 -42
  37. data/spec/unit/rpc/connector_spec.rb +11 -16
  38. data/spec/unit/rpc/connectors/base_spec.rb +14 -3
  39. data/spec/unit/rpc/connectors/common_spec.rb +132 -0
  40. data/spec/unit/rpc/connectors/{eventmachine/client_spec.rb → eventmachine_client_spec.rb} +0 -0
  41. data/spec/unit/rpc/connectors/socket_spec.rb +49 -0
  42. data/spec/unit/rpc/servers/evented_server_spec.rb +18 -0
  43. data/spec/unit/rpc/servers/socket_server_spec.rb +57 -0
  44. metadata +86 -16
  45. data/spec/unit/rpc/server_spec.rb +0 -27
@@ -0,0 +1,49 @@
1
+ require 'spec_helper'
2
+
3
+ shared_examples "a Protobuf Connector" do
4
+ subject{ described_class.new({}) }
5
+
6
+ context "API" do
7
+ # Check the API
8
+ specify{ subject.respond_to?(:send_request, true).should be_true }
9
+ specify{ subject.respond_to?(:post_init, true).should be_true }
10
+ specify{ subject.respond_to?(:close_connection, true).should be_true }
11
+ specify{ subject.respond_to?(:error?, true).should be_true }
12
+ end
13
+ end
14
+
15
+ describe Protobuf::Rpc::Connectors::Socket do
16
+ subject{ described_class.new({}) }
17
+
18
+ it_behaves_like "a Protobuf Connector"
19
+
20
+ specify{ described_class.include?(Protobuf::Rpc::Connectors::Common).should be_true }
21
+
22
+ context "#read_response" do
23
+ let(:data){ "New data" }
24
+
25
+ it "fills the buffer with data from the socket" do
26
+ socket = StringIO.new("#{data.bytesize}-#{data}")
27
+ subject.instance_variable_set(:@buffer, Protobuf::Rpc::Buffer.new(:read))
28
+ subject.instance_variable_set(:@socket, socket)
29
+ subject.should_receive(:parse_response).and_return(true)
30
+
31
+ subject.__send__(:read_response)
32
+ subject.instance_variable_get(:@buffer).flushed?.should be_true
33
+ subject.instance_variable_get(:@buffer).data.should eq(data)
34
+ end
35
+ end
36
+
37
+ context "#check_async" do
38
+ it "raises an error when trying to execute asynchronously" do
39
+ conn = described_class.new(:async => true)
40
+ expect{ conn.__send__(:check_async) }.to raise_error
41
+ end
42
+
43
+ it "allows execution when synchronous" do
44
+ conn = described_class.new(:async => false)
45
+ expect{ conn.__send__(:check_async) }.to_not raise_error
46
+ end
47
+ end
48
+
49
+ end
@@ -0,0 +1,18 @@
1
+ require 'spec_helper'
2
+ require 'spec/proto/test_service_impl'
3
+ require 'protobuf/rpc/servers/evented_runner'
4
+
5
+ describe Protobuf::Rpc::EventedServer do
6
+
7
+ it "provides a Runner class" do
8
+ runner_class = described_class.to_s.gsub(/Server/, "Runner")
9
+ expect { Protobuf::Util.constantize(runner_class) }.to_not raise_error
10
+ end
11
+
12
+ it "Runner provides a stop method" do
13
+ runner_class = described_class.to_s.gsub(/Server/, "Runner")
14
+ runner_class = Protobuf::Util.constantize(runner_class)
15
+ runner_class.respond_to?(:stop).should be_true
16
+ end
17
+
18
+ end
@@ -0,0 +1,57 @@
1
+ require 'spec_helper'
2
+ require 'spec/proto/test_service_impl'
3
+ require 'protobuf/rpc/servers/socket_runner'
4
+
5
+ describe Protobuf::Rpc::SocketServer do
6
+ before(:all) do
7
+ server = OpenStruct.new(:server => "127.0.0.1", :port => 9399, :backlog => 100, :threshold => 100)
8
+ @server_thread = Thread.new(server) { |s| Protobuf::Rpc::SocketRunner.run(s) }
9
+ Thread.pass until Protobuf::Rpc::SocketServer.running?
10
+ end
11
+
12
+ after(:all) do
13
+ Protobuf::Rpc::SocketRunner.stop
14
+ Thread.kill(@server_thread)
15
+ end
16
+
17
+ it "Runner provides a stop method" do
18
+ runner_class = described_class.to_s.gsub(/Server/, "Runner")
19
+ runner_class = Protobuf::Util.constantize(runner_class)
20
+ runner_class.respond_to?(:stop).should be_true
21
+ end
22
+
23
+ it "provides a stop method" do
24
+ described_class.respond_to?(:stop).should be_true
25
+ end
26
+
27
+ it "provides a Runner class" do
28
+ runner_class = described_class.to_s.gsub(/Server/, "Runner")
29
+ expect { Protobuf::Util.constantize(runner_class) }.to_not raise_error
30
+ end
31
+
32
+ it "signals the Server is running" do
33
+ described_class.running?.should be_true
34
+ end
35
+
36
+ context "Eventmachine client" do
37
+
38
+ it "calls the service in the client request" do
39
+ with_constants "Protobuf::ConnectorType" => "Evented" do
40
+ client = Spec::Proto::TestService.client(:async => false, :port => 9399, :host => "127.0.0.1")
41
+
42
+ client.find(:name => "Test Name", :active => true) do |c|
43
+ c.on_success do |succ|
44
+ succ.name.should eq("Test Name")
45
+ succ.status.should eq(Spec::Proto::StatusType::ENABLED)
46
+ end
47
+
48
+ c.on_failure do |err|
49
+ raise err.inspect
50
+ end
51
+ end
52
+ end
53
+ end
54
+
55
+ end
56
+
57
+ end
metadata CHANGED
@@ -1,8 +1,8 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: protobuf
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.1
5
- prerelease:
4
+ version: 1.1.0.beta0
5
+ prerelease: 6
6
6
  platform: ruby
7
7
  authors:
8
8
  - BJ Neilsen
@@ -14,7 +14,7 @@ date: 2011-12-07 00:00:00.000000000Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: eventmachine
17
- requirement: &2156121020 !ruby/object:Gem::Requirement
17
+ requirement: &2152761640 !ruby/object:Gem::Requirement
18
18
  none: false
19
19
  requirements:
20
20
  - - ~>
@@ -22,10 +22,32 @@ dependencies:
22
22
  version: 0.12.10
23
23
  type: :runtime
24
24
  prerelease: false
25
- version_requirements: *2156121020
25
+ version_requirements: *2152761640
26
+ - !ruby/object:Gem::Dependency
27
+ name: eventually
28
+ requirement: &2152761120 !ruby/object:Gem::Requirement
29
+ none: false
30
+ requirements:
31
+ - - ~>
32
+ - !ruby/object:Gem::Version
33
+ version: 0.1.0
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: *2152761120
37
+ - !ruby/object:Gem::Dependency
38
+ name: json_pure
39
+ requirement: &2152760580 !ruby/object:Gem::Requirement
40
+ none: false
41
+ requirements:
42
+ - - ~>
43
+ - !ruby/object:Gem::Version
44
+ version: 1.6.4
45
+ type: :runtime
46
+ prerelease: false
47
+ version_requirements: *2152760580
26
48
  - !ruby/object:Gem::Dependency
27
49
  name: rake
28
- requirement: &2156088060 !ruby/object:Gem::Requirement
50
+ requirement: &2152759880 !ruby/object:Gem::Requirement
29
51
  none: false
30
52
  requirements:
31
53
  - - ~>
@@ -33,18 +55,51 @@ dependencies:
33
55
  version: 0.8.7
34
56
  type: :development
35
57
  prerelease: false
36
- version_requirements: *2156088060
58
+ version_requirements: *2152759880
37
59
  - !ruby/object:Gem::Dependency
38
60
  name: rspec
39
- requirement: &2156085040 !ruby/object:Gem::Requirement
61
+ requirement: &2152759400 !ruby/object:Gem::Requirement
40
62
  none: false
41
63
  requirements:
42
64
  - - ~>
43
65
  - !ruby/object:Gem::Version
44
- version: 2.7.0
66
+ version: 2.8.0
45
67
  type: :development
46
68
  prerelease: false
47
- version_requirements: *2156085040
69
+ version_requirements: *2152759400
70
+ - !ruby/object:Gem::Dependency
71
+ name: yard
72
+ requirement: &2152758820 !ruby/object:Gem::Requirement
73
+ none: false
74
+ requirements:
75
+ - - ~>
76
+ - !ruby/object:Gem::Version
77
+ version: 0.7.4
78
+ type: :development
79
+ prerelease: false
80
+ version_requirements: *2152758820
81
+ - !ruby/object:Gem::Dependency
82
+ name: redcarpet
83
+ requirement: &2152758240 !ruby/object:Gem::Requirement
84
+ none: false
85
+ requirements:
86
+ - - ~>
87
+ - !ruby/object:Gem::Version
88
+ version: 1.17.2
89
+ type: :development
90
+ prerelease: false
91
+ version_requirements: *2152758240
92
+ - !ruby/object:Gem::Dependency
93
+ name: simplecov
94
+ requirement: &2152757720 !ruby/object:Gem::Requirement
95
+ none: false
96
+ requirements:
97
+ - - ~>
98
+ - !ruby/object:Gem::Version
99
+ version: 0.5.4
100
+ type: :development
101
+ prerelease: false
102
+ version_requirements: *2152757720
48
103
  description: ! 'Ruby implementation for Protocol Buffers. Works with other protobuf
49
104
  rpc implementations (e.g. Java, Python, C++).
50
105
 
@@ -56,7 +111,7 @@ description: ! 'Ruby implementation for Protocol Buffers. Works with other proto
56
111
  went unsuccessful.'
57
112
  email:
58
113
  - bj.neilsen@gmail.com
59
- - brandonsdewitt@gmail.com
114
+ - brandonsdewitt+protobuf@gmail.com
60
115
  executables:
61
116
  - rpc_server
62
117
  - rprotoc
@@ -64,6 +119,7 @@ extensions: []
64
119
  extra_rdoc_files: []
65
120
  files:
66
121
  - .gitignore
122
+ - .yardopts
67
123
  - Gemfile
68
124
  - Gemfile.lock
69
125
  - README.md
@@ -105,6 +161,7 @@ files:
105
161
  - lib/protobuf/rpc/client.rb
106
162
  - lib/protobuf/rpc/connector.rb
107
163
  - lib/protobuf/rpc/connectors/base.rb
164
+ - lib/protobuf/rpc/connectors/common.rb
108
165
  - lib/protobuf/rpc/connectors/em_client.rb
109
166
  - lib/protobuf/rpc/connectors/eventmachine.rb
110
167
  - lib/protobuf/rpc/connectors/socket.rb
@@ -113,6 +170,10 @@ files:
113
170
  - lib/protobuf/rpc/error/server_error.rb
114
171
  - lib/protobuf/rpc/rpc.pb.rb
115
172
  - lib/protobuf/rpc/server.rb
173
+ - lib/protobuf/rpc/servers/evented_runner.rb
174
+ - lib/protobuf/rpc/servers/evented_server.rb
175
+ - lib/protobuf/rpc/servers/socket_runner.rb
176
+ - lib/protobuf/rpc/servers/socket_server.rb
116
177
  - lib/protobuf/rpc/service.rb
117
178
  - lib/protobuf/rpc/stat.rb
118
179
  - lib/protobuf/version.rb
@@ -122,6 +183,7 @@ files:
122
183
  - spec/functional/embedded_service_spec.rb
123
184
  - spec/helper/all.rb
124
185
  - spec/helper/server.rb
186
+ - spec/helper/silent_constants.rb
125
187
  - spec/helper/tolerance_matcher.rb
126
188
  - spec/proto/test.pb.rb
127
189
  - spec/proto/test.proto
@@ -134,9 +196,12 @@ files:
134
196
  - spec/unit/rpc/client_spec.rb
135
197
  - spec/unit/rpc/connector_spec.rb
136
198
  - spec/unit/rpc/connectors/base_spec.rb
137
- - spec/unit/rpc/connectors/eventmachine/client_spec.rb
199
+ - spec/unit/rpc/connectors/common_spec.rb
200
+ - spec/unit/rpc/connectors/eventmachine_client_spec.rb
138
201
  - spec/unit/rpc/connectors/eventmachine_spec.rb
139
- - spec/unit/rpc/server_spec.rb
202
+ - spec/unit/rpc/connectors/socket_spec.rb
203
+ - spec/unit/rpc/servers/evented_server_spec.rb
204
+ - spec/unit/rpc/servers/socket_server_spec.rb
140
205
  - spec/unit/rpc/service_spec.rb
141
206
  - test/check_unbuild.rb
142
207
  - test/data/data.bin
@@ -199,9 +264,9 @@ required_ruby_version: !ruby/object:Gem::Requirement
199
264
  required_rubygems_version: !ruby/object:Gem::Requirement
200
265
  none: false
201
266
  requirements:
202
- - - ! '>='
267
+ - - ! '>'
203
268
  - !ruby/object:Gem::Version
204
- version: '0'
269
+ version: 1.3.1
205
270
  requirements: []
206
271
  rubyforge_project:
207
272
  rubygems_version: 1.8.10
@@ -213,6 +278,7 @@ test_files:
213
278
  - spec/functional/embedded_service_spec.rb
214
279
  - spec/helper/all.rb
215
280
  - spec/helper/server.rb
281
+ - spec/helper/silent_constants.rb
216
282
  - spec/helper/tolerance_matcher.rb
217
283
  - spec/proto/test.pb.rb
218
284
  - spec/proto/test.proto
@@ -225,9 +291,12 @@ test_files:
225
291
  - spec/unit/rpc/client_spec.rb
226
292
  - spec/unit/rpc/connector_spec.rb
227
293
  - spec/unit/rpc/connectors/base_spec.rb
228
- - spec/unit/rpc/connectors/eventmachine/client_spec.rb
294
+ - spec/unit/rpc/connectors/common_spec.rb
295
+ - spec/unit/rpc/connectors/eventmachine_client_spec.rb
229
296
  - spec/unit/rpc/connectors/eventmachine_spec.rb
230
- - spec/unit/rpc/server_spec.rb
297
+ - spec/unit/rpc/connectors/socket_spec.rb
298
+ - spec/unit/rpc/servers/evented_server_spec.rb
299
+ - spec/unit/rpc/servers/socket_server_spec.rb
231
300
  - spec/unit/rpc/service_spec.rb
232
301
  - test/check_unbuild.rb
233
302
  - test/data/data.bin
@@ -275,3 +344,4 @@ test_files:
275
344
  - test/test_serialize.rb
276
345
  - test/test_standard_message.rb
277
346
  - test/test_types.rb
347
+ has_rdoc:
@@ -1,27 +0,0 @@
1
- require 'spec_helper'
2
- require 'protobuf/rpc/server'
3
- require 'spec/proto/test_service_impl'
4
-
5
- describe Protobuf::Rpc::Server do
6
- context 'when sending response objects' do
7
- it 'should be able to send a hash object as a response' do
8
- server = Protobuf::Rpc::Server.new
9
-
10
- # Setup the right mocks
11
- server.instance_variable_set(:@klass, Spec::Proto::TestService)
12
- response_wrapper = mock('response')
13
- response_wrapper.stub(:response_proto=)
14
- server.instance_variable_set(:@response, response_wrapper)
15
- Spec::Proto::TestService.stub_chain(:rpcs, :[], :[], :response_type).and_return(Spec::Proto::ResourceFindRequest)
16
-
17
- # Setup expectations
18
- hash_response = {:name => 'Test Name', :active => false}
19
- expected = Spec::Proto::ResourceFindRequest.new(hash_response)
20
- Spec::Proto::ResourceFindRequest.should_receive(:new).with(hash_response).and_return(expected)
21
- server.should_not_receive(:handle_error)
22
-
23
- # Call the method
24
- server.send(:parse_response_from_service, hash_response)
25
- end
26
- end
27
- end