grpc 0.13.0.pre1.1-universal-darwin

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of grpc might be problematic. Click here for more details.

Files changed (95) hide show
  1. checksums.yaml +7 -0
  2. data/etc/roots.pem +5114 -0
  3. data/grpc_c.32.ruby +0 -0
  4. data/grpc_c.64.ruby +0 -0
  5. data/src/ruby/bin/apis/google/protobuf/empty.rb +44 -0
  6. data/src/ruby/bin/apis/pubsub_demo.rb +256 -0
  7. data/src/ruby/bin/apis/tech/pubsub/proto/pubsub.rb +174 -0
  8. data/src/ruby/bin/apis/tech/pubsub/proto/pubsub_services.rb +103 -0
  9. data/src/ruby/bin/grpc_ruby_interop_client +33 -0
  10. data/src/ruby/bin/grpc_ruby_interop_server +33 -0
  11. data/src/ruby/bin/interop/interop_client.rb +51 -0
  12. data/src/ruby/bin/interop/interop_server.rb +50 -0
  13. data/src/ruby/bin/math.rb +32 -0
  14. data/src/ruby/bin/math_client.rb +147 -0
  15. data/src/ruby/bin/math_server.rb +206 -0
  16. data/src/ruby/bin/math_services.rb +27 -0
  17. data/src/ruby/bin/noproto_client.rb +108 -0
  18. data/src/ruby/bin/noproto_server.rb +112 -0
  19. data/src/ruby/ext/grpc/extconf.rb +129 -0
  20. data/src/ruby/ext/grpc/rb_byte_buffer.c +70 -0
  21. data/src/ruby/ext/grpc/rb_byte_buffer.h +47 -0
  22. data/src/ruby/ext/grpc/rb_call.c +908 -0
  23. data/src/ruby/ext/grpc/rb_call.h +66 -0
  24. data/src/ruby/ext/grpc/rb_call_credentials.c +319 -0
  25. data/src/ruby/ext/grpc/rb_call_credentials.h +46 -0
  26. data/src/ruby/ext/grpc/rb_channel.c +432 -0
  27. data/src/ruby/ext/grpc/rb_channel.h +47 -0
  28. data/src/ruby/ext/grpc/rb_channel_args.c +169 -0
  29. data/src/ruby/ext/grpc/rb_channel_args.h +53 -0
  30. data/src/ruby/ext/grpc/rb_channel_credentials.c +268 -0
  31. data/src/ruby/ext/grpc/rb_channel_credentials.h +47 -0
  32. data/src/ruby/ext/grpc/rb_completion_queue.c +183 -0
  33. data/src/ruby/ext/grpc/rb_completion_queue.h +55 -0
  34. data/src/ruby/ext/grpc/rb_event_thread.c +158 -0
  35. data/src/ruby/ext/grpc/rb_event_thread.h +37 -0
  36. data/src/ruby/ext/grpc/rb_grpc.c +336 -0
  37. data/src/ruby/ext/grpc/rb_grpc.h +85 -0
  38. data/src/ruby/ext/grpc/rb_grpc_imports.generated.c +560 -0
  39. data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +843 -0
  40. data/src/ruby/ext/grpc/rb_loader.c +72 -0
  41. data/src/ruby/ext/grpc/rb_loader.h +40 -0
  42. data/src/ruby/ext/grpc/rb_server.c +400 -0
  43. data/src/ruby/ext/grpc/rb_server.h +47 -0
  44. data/src/ruby/ext/grpc/rb_server_credentials.c +284 -0
  45. data/src/ruby/ext/grpc/rb_server_credentials.h +47 -0
  46. data/src/ruby/lib/grpc.rb +44 -0
  47. data/src/ruby/lib/grpc/2.0/grpc_c.bundle +0 -0
  48. data/src/ruby/lib/grpc/2.1/grpc_c.bundle +0 -0
  49. data/src/ruby/lib/grpc/2.2/grpc_c.bundle +0 -0
  50. data/src/ruby/lib/grpc/2.3/grpc_c.bundle +0 -0
  51. data/src/ruby/lib/grpc/core/time_consts.rb +71 -0
  52. data/src/ruby/lib/grpc/errors.rb +62 -0
  53. data/src/ruby/lib/grpc/generic/active_call.rb +488 -0
  54. data/src/ruby/lib/grpc/generic/bidi_call.rb +218 -0
  55. data/src/ruby/lib/grpc/generic/client_stub.rb +471 -0
  56. data/src/ruby/lib/grpc/generic/rpc_desc.rb +147 -0
  57. data/src/ruby/lib/grpc/generic/rpc_server.rb +504 -0
  58. data/src/ruby/lib/grpc/generic/service.rb +234 -0
  59. data/src/ruby/lib/grpc/grpc.rb +34 -0
  60. data/src/ruby/lib/grpc/logconfig.rb +59 -0
  61. data/src/ruby/lib/grpc/notifier.rb +60 -0
  62. data/src/ruby/lib/grpc/version.rb +33 -0
  63. data/src/ruby/pb/README.md +42 -0
  64. data/src/ruby/pb/generate_proto_ruby.sh +51 -0
  65. data/src/ruby/pb/grpc/health/checker.rb +75 -0
  66. data/src/ruby/pb/grpc/health/v1alpha/health.rb +29 -0
  67. data/src/ruby/pb/grpc/health/v1alpha/health_services.rb +28 -0
  68. data/src/ruby/pb/test/client.rb +469 -0
  69. data/src/ruby/pb/test/proto/empty.rb +15 -0
  70. data/src/ruby/pb/test/proto/messages.rb +80 -0
  71. data/src/ruby/pb/test/proto/test.rb +14 -0
  72. data/src/ruby/pb/test/proto/test_services.rb +64 -0
  73. data/src/ruby/pb/test/server.rb +253 -0
  74. data/src/ruby/spec/call_credentials_spec.rb +57 -0
  75. data/src/ruby/spec/call_spec.rb +163 -0
  76. data/src/ruby/spec/channel_credentials_spec.rb +97 -0
  77. data/src/ruby/spec/channel_spec.rb +177 -0
  78. data/src/ruby/spec/client_server_spec.rb +475 -0
  79. data/src/ruby/spec/completion_queue_spec.rb +42 -0
  80. data/src/ruby/spec/generic/active_call_spec.rb +373 -0
  81. data/src/ruby/spec/generic/client_stub_spec.rb +476 -0
  82. data/src/ruby/spec/generic/rpc_desc_spec.rb +331 -0
  83. data/src/ruby/spec/generic/rpc_server_pool_spec.rb +138 -0
  84. data/src/ruby/spec/generic/rpc_server_spec.rb +576 -0
  85. data/src/ruby/spec/generic/service_spec.rb +345 -0
  86. data/src/ruby/spec/pb/health/checker_spec.rb +232 -0
  87. data/src/ruby/spec/server_credentials_spec.rb +94 -0
  88. data/src/ruby/spec/server_spec.rb +209 -0
  89. data/src/ruby/spec/spec_helper.rb +69 -0
  90. data/src/ruby/spec/testdata/README +1 -0
  91. data/src/ruby/spec/testdata/ca.pem +15 -0
  92. data/src/ruby/spec/testdata/server1.key +16 -0
  93. data/src/ruby/spec/testdata/server1.pem +16 -0
  94. data/src/ruby/spec/time_consts_spec.rb +89 -0
  95. metadata +319 -0
@@ -0,0 +1,234 @@
1
+ # Copyright 2015, Google Inc.
2
+ # All rights reserved.
3
+ #
4
+ # Redistribution and use in source and binary forms, with or without
5
+ # modification, are permitted provided that the following conditions are
6
+ # met:
7
+ #
8
+ # * Redistributions of source code must retain the above copyright
9
+ # notice, this list of conditions and the following disclaimer.
10
+ # * Redistributions in binary form must reproduce the above
11
+ # copyright notice, this list of conditions and the following disclaimer
12
+ # in the documentation and/or other materials provided with the
13
+ # distribution.
14
+ # * Neither the name of Google Inc. nor the names of its
15
+ # contributors may be used to endorse or promote products derived from
16
+ # this software without specific prior written permission.
17
+ #
18
+ # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
19
+ # "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
20
+ # LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
21
+ # A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
22
+ # OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
23
+ # SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
24
+ # LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
25
+ # DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
26
+ # THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
27
+ # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
28
+ # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
29
+
30
+ require 'grpc/generic/client_stub'
31
+ require 'grpc/generic/rpc_desc'
32
+
33
+ # GRPC contains the General RPC module.
34
+ module GRPC
35
+ # Provides behaviour used to implement schema-derived service classes.
36
+ #
37
+ # Is intended to be used to support both client and server
38
+ # IDL-schema-derived servers.
39
+ module GenericService
40
+ # creates a new string that is the underscore separate version of s.
41
+ #
42
+ # E.g,
43
+ # PrintHTML -> print_html
44
+ # AMethod -> a_method
45
+ # AnRpc -> an_rpc
46
+ #
47
+ # @param s [String] the string to be converted.
48
+ def self.underscore(s)
49
+ s.gsub!(/([A-Z]+)([A-Z][a-z])/, '\1_\2')
50
+ s.gsub!(/([a-z\d])([A-Z])/, '\1_\2')
51
+ s.tr!('-', '_')
52
+ s.downcase!
53
+ s
54
+ end
55
+
56
+ # Used to indicate that a name has already been specified
57
+ class DuplicateRpcName < StandardError
58
+ def initialize(name)
59
+ super("rpc (#{name}) is already defined")
60
+ end
61
+ end
62
+
63
+ # Provides a simple DSL to describe RPC services.
64
+ #
65
+ # E.g, a Maths service that uses the serializable messages DivArgs,
66
+ # DivReply and Num might define its endpoint uses the following way:
67
+ #
68
+ # rpc :div DivArgs, DivReply # single request, single response
69
+ # rpc :sum stream(Num), Num # streamed input, single response
70
+ # rpc :fib FibArgs, stream(Num) # single request, streamed response
71
+ # rpc :div_many stream(DivArgs), stream(DivReply)
72
+ # # streamed req and resp
73
+ #
74
+ # Each 'rpc' adds an RpcDesc to classes including this module, and
75
+ # #assert_rpc_descs_have_methods is used to ensure the including class
76
+ # provides methods with signatures that support all the descriptors.
77
+ module Dsl
78
+ # This configures the method names that the serializable message
79
+ # implementation uses to marshal and unmarshal messages.
80
+ #
81
+ # - unmarshal_class method must be a class method on the serializable
82
+ # message type that takes a string (byte stream) and produces and object
83
+ #
84
+ # - marshal_class_method is called on a serializable message instance
85
+ # and produces a serialized string.
86
+ #
87
+ # The Dsl verifies that the types in the descriptor have both the
88
+ # unmarshal and marshal methods.
89
+ attr_writer(:marshal_class_method, :unmarshal_class_method)
90
+
91
+ # This allows configuration of the service name.
92
+ attr_accessor(:service_name)
93
+
94
+ # Adds an RPC spec.
95
+ #
96
+ # Takes the RPC name and the classes representing the types to be
97
+ # serialized, and adds them to the including classes rpc_desc hash.
98
+ #
99
+ # input and output should both have the methods #marshal and #unmarshal
100
+ # that are responsible for writing and reading an object instance from a
101
+ # byte buffer respectively.
102
+ #
103
+ # @param name [String] the name of the rpc
104
+ # @param input [Object] the input parameter's class
105
+ # @param output [Object] the output parameter's class
106
+ def rpc(name, input, output)
107
+ fail(DuplicateRpcName, name) if rpc_descs.key? name
108
+ assert_can_marshal(input)
109
+ assert_can_marshal(output)
110
+ rpc_descs[name] = RpcDesc.new(name, input, output,
111
+ marshal_class_method,
112
+ unmarshal_class_method)
113
+ end
114
+
115
+ def inherited(subclass)
116
+ # Each subclass should have a distinct class variable with its own
117
+ # rpc_descs
118
+ subclass.rpc_descs.merge!(rpc_descs)
119
+ subclass.service_name = service_name
120
+ end
121
+
122
+ # the name of the instance method used to marshal events to a byte
123
+ # stream.
124
+ def marshal_class_method
125
+ @marshal_class_method ||= :marshal
126
+ end
127
+
128
+ # the name of the class method used to unmarshal from a byte stream.
129
+ def unmarshal_class_method
130
+ @unmarshal_class_method ||= :unmarshal
131
+ end
132
+
133
+ def assert_can_marshal(cls)
134
+ cls = cls.type if cls.is_a? RpcDesc::Stream
135
+ mth = unmarshal_class_method
136
+ unless cls.methods.include? mth
137
+ fail(ArgumentError, "#{cls} needs #{cls}.#{mth}")
138
+ end
139
+ mth = marshal_class_method
140
+ return if cls.methods.include? mth
141
+ fail(ArgumentError, "#{cls} needs #{cls}.#{mth}")
142
+ end
143
+
144
+ # @param cls [Class] the class of a serializable type
145
+ # @return cls wrapped in a RpcDesc::Stream
146
+ def stream(cls)
147
+ assert_can_marshal(cls)
148
+ RpcDesc::Stream.new(cls)
149
+ end
150
+
151
+ # the RpcDescs defined for this GenericService, keyed by name.
152
+ def rpc_descs
153
+ @rpc_descs ||= {}
154
+ end
155
+
156
+ # Creates a rpc client class with methods for accessing the methods
157
+ # currently in rpc_descs.
158
+ def rpc_stub_class
159
+ descs = rpc_descs
160
+ route_prefix = service_name
161
+ Class.new(ClientStub) do
162
+ # @param host [String] the host the stub connects to
163
+ # @param creds [Core::ChannelCredentials|Symbol] The channel
164
+ # credentials to use, or :this_channel_is_insecure otherwise
165
+ # @param kw [KeywordArgs] the channel arguments, plus any optional
166
+ # args for configuring the client's channel
167
+ def initialize(host, creds, **kw)
168
+ super(host, Core::CompletionQueue.new, creds, **kw)
169
+ end
170
+
171
+ # Used define_method to add a method for each rpc_desc. Each method
172
+ # calls the base class method for the given descriptor.
173
+ descs.each_pair do |name, desc|
174
+ mth_name = GenericService.underscore(name.to_s).to_sym
175
+ marshal = desc.marshal_proc
176
+ unmarshal = desc.unmarshal_proc(:output)
177
+ route = "/#{route_prefix}/#{name}"
178
+ if desc.request_response?
179
+ define_method(mth_name) do |req, **kw|
180
+ GRPC.logger.debug("calling #{@host}:#{route}")
181
+ request_response(route, req, marshal, unmarshal, **kw)
182
+ end
183
+ elsif desc.client_streamer?
184
+ define_method(mth_name) do |reqs, **kw|
185
+ GRPC.logger.debug("calling #{@host}:#{route}")
186
+ client_streamer(route, reqs, marshal, unmarshal, **kw)
187
+ end
188
+ elsif desc.server_streamer?
189
+ define_method(mth_name) do |req, **kw, &blk|
190
+ GRPC.logger.debug("calling #{@host}:#{route}")
191
+ server_streamer(route, req, marshal, unmarshal, **kw, &blk)
192
+ end
193
+ else # is a bidi_stream
194
+ define_method(mth_name) do |reqs, **kw, &blk|
195
+ GRPC.logger.debug("calling #{@host}:#{route}")
196
+ bidi_streamer(route, reqs, marshal, unmarshal, **kw, &blk)
197
+ end
198
+ end
199
+ end
200
+ end
201
+ end
202
+
203
+ # Asserts that the appropriate methods are defined for each added rpc
204
+ # spec. Is intended to aid verifying that server classes are correctly
205
+ # implemented.
206
+ def assert_rpc_descs_have_methods
207
+ rpc_descs.each_pair do |m, spec|
208
+ mth_name = GenericService.underscore(m.to_s).to_sym
209
+ unless instance_methods.include?(mth_name)
210
+ fail "#{self} does not provide instance method '#{mth_name}'"
211
+ end
212
+ spec.assert_arity_matches(instance_method(mth_name))
213
+ end
214
+ end
215
+ end
216
+
217
+ def self.included(o)
218
+ o.extend(Dsl)
219
+ # Update to the use the service name including module. Provide a default
220
+ # that can be nil e.g. when modules are declared dynamically.
221
+ return unless o.service_name.nil?
222
+ if o.name.nil?
223
+ o.service_name = 'GenericService'
224
+ else
225
+ modules = o.name.split('::')
226
+ if modules.length > 2
227
+ o.service_name = modules[modules.length - 2]
228
+ else
229
+ o.service_name = modules.first
230
+ end
231
+ end
232
+ end
233
+ end
234
+ end
@@ -0,0 +1,34 @@
1
+ # Copyright 2015-2016, Google Inc.
2
+ # All rights reserved.
3
+ #
4
+ # Redistribution and use in source and binary forms, with or without
5
+ # modification, are permitted provided that the following conditions are
6
+ # met:
7
+ #
8
+ # * Redistributions of source code must retain the above copyright
9
+ # notice, this list of conditions and the following disclaimer.
10
+ # * Redistributions in binary form must reproduce the above
11
+ # copyright notice, this list of conditions and the following disclaimer
12
+ # in the documentation and/or other materials provided with the
13
+ # distribution.
14
+ # * Neither the name of Google Inc. nor the names of its
15
+ # contributors may be used to endorse or promote products derived from
16
+ # this software without specific prior written permission.
17
+ #
18
+ # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
19
+ # "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
20
+ # LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
21
+ # A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
22
+ # OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
23
+ # SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
24
+ # LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
25
+ # DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
26
+ # THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
27
+ # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
28
+ # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
29
+
30
+ begin
31
+ require "grpc/#{RUBY_VERSION.sub(/\.\d$/, '')}/grpc_c"
32
+ rescue LoadError
33
+ require 'grpc/grpc_c'
34
+ end
@@ -0,0 +1,59 @@
1
+ # Copyright 2015, Google Inc.
2
+ # All rights reserved.
3
+ #
4
+ # Redistribution and use in source and binary forms, with or without
5
+ # modification, are permitted provided that the following conditions are
6
+ # met:
7
+ #
8
+ # * Redistributions of source code must retain the above copyright
9
+ # notice, this list of conditions and the following disclaimer.
10
+ # * Redistributions in binary form must reproduce the above
11
+ # copyright notice, this list of conditions and the following disclaimer
12
+ # in the documentation and/or other materials provided with the
13
+ # distribution.
14
+ # * Neither the name of Google Inc. nor the names of its
15
+ # contributors may be used to endorse or promote products derived from
16
+ # this software without specific prior written permission.
17
+ #
18
+ # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
19
+ # "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
20
+ # LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
21
+ # A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
22
+ # OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
23
+ # SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
24
+ # LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
25
+ # DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
26
+ # THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
27
+ # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
28
+ # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
29
+
30
+ # GRPC contains the General RPC module.
31
+ module GRPC
32
+ # DefaultLogger is a module included in GRPC if no other logging is set up for
33
+ # it. See ../spec/spec_helpers an example of where other logging is added.
34
+ module DefaultLogger
35
+ def logger
36
+ LOGGER
37
+ end
38
+
39
+ private
40
+
41
+ # NoopLogger implements the methods of Ruby's conventional logging interface
42
+ # that are actually used internally within gRPC with a noop implementation.
43
+ class NoopLogger
44
+ def info(_ignored)
45
+ end
46
+
47
+ def debug(_ignored)
48
+ end
49
+
50
+ def warn(_ignored)
51
+ end
52
+ end
53
+
54
+ LOGGER = NoopLogger.new
55
+ end
56
+
57
+ # Inject the noop #logger if no module-level logger method has been injected.
58
+ extend DefaultLogger unless methods.include?(:logger)
59
+ end
@@ -0,0 +1,60 @@
1
+ # Copyright 2015, Google Inc.
2
+ # All rights reserved.
3
+ #
4
+ # Redistribution and use in source and binary forms, with or without
5
+ # modification, are permitted provided that the following conditions are
6
+ # met:
7
+ #
8
+ # * Redistributions of source code must retain the above copyright
9
+ # notice, this list of conditions and the following disclaimer.
10
+ # * Redistributions in binary form must reproduce the above
11
+ # copyright notice, this list of conditions and the following disclaimer
12
+ # in the documentation and/or other materials provided with the
13
+ # distribution.
14
+ # * Neither the name of Google Inc. nor the names of its
15
+ # contributors may be used to endorse or promote products derived from
16
+ # this software without specific prior written permission.
17
+ #
18
+ # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
19
+ # "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
20
+ # LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
21
+ # A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
22
+ # OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
23
+ # SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
24
+ # LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
25
+ # DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
26
+ # THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
27
+ # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
28
+ # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
29
+
30
+ # GRPC contains the General RPC module.
31
+ module GRPC
32
+ # Notifier is useful high-level synchronization primitive.
33
+ class Notifier
34
+ attr_reader :payload, :notified
35
+ alias_method :notified?, :notified
36
+
37
+ def initialize
38
+ @mutex = Mutex.new
39
+ @cvar = ConditionVariable.new
40
+ @notified = false
41
+ @payload = nil
42
+ end
43
+
44
+ def wait
45
+ @mutex.synchronize do
46
+ @cvar.wait(@mutex) until notified?
47
+ end
48
+ end
49
+
50
+ def notify(payload)
51
+ @mutex.synchronize do
52
+ return Error.new('already notified') if notified?
53
+ @payload = payload
54
+ @notified = true
55
+ @cvar.signal
56
+ return nil
57
+ end
58
+ end
59
+ end
60
+ end
@@ -0,0 +1,33 @@
1
+ # Copyright 2015-2016, Google Inc.
2
+ # All rights reserved.
3
+ #
4
+ # Redistribution and use in source and binary forms, with or without
5
+ # modification, are permitted provided that the following conditions are
6
+ # met:
7
+ #
8
+ # * Redistributions of source code must retain the above copyright
9
+ # notice, this list of conditions and the following disclaimer.
10
+ # * Redistributions in binary form must reproduce the above
11
+ # copyright notice, this list of conditions and the following disclaimer
12
+ # in the documentation and/or other materials provided with the
13
+ # distribution.
14
+ # * Neither the name of Google Inc. nor the names of its
15
+ # contributors may be used to endorse or promote products derived from
16
+ # this software without specific prior written permission.
17
+ #
18
+ # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
19
+ # "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
20
+ # LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
21
+ # A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
22
+ # OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
23
+ # SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
24
+ # LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
25
+ # DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
26
+ # THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
27
+ # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
28
+ # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
29
+
30
+ # GRPC contains the General RPC module.
31
+ module GRPC
32
+ VERSION = '0.13.0.pre1.1'
33
+ end
@@ -0,0 +1,42 @@
1
+ Protocol Buffers
2
+ ================
3
+
4
+ This folder contains protocol buffers provided with gRPC ruby, and the generated
5
+ code to them.
6
+
7
+ PREREQUISITES
8
+ -------------
9
+
10
+ The code is is generated using the protoc (> 3.0.0.alpha.1) and the
11
+ grpc_ruby_plugin. These must be installed to regenerate the IDL defined
12
+ classes, but that's not necessary just to use them.
13
+
14
+ health_check/v1alpha
15
+ --------------------
16
+
17
+ This package defines the surface of a simple health check service that gRPC
18
+ servers may choose to implement, and provides an implementation for it. To
19
+ re-generate the surface.
20
+
21
+ ```bash
22
+ $ # (from this directory)
23
+ $ protoc -I ../../proto ../../proto/grpc/health/v1alpha/health.proto \
24
+ --grpc_out=. \
25
+ --ruby_out=. \
26
+ --plugin=protoc-gen-grpc=`which grpc_ruby_plugin`
27
+ ```
28
+
29
+ test
30
+ ----
31
+
32
+ This package defines the surface of the gRPC interop test service and client
33
+ To re-generate the surface, it's necessary to have checked-out versions of
34
+ the grpc interop test proto, e.g, by having the full gRPC repository. E.g,
35
+
36
+ ```bash
37
+ $ # (from this directory within the grpc repo)
38
+ $ protoc -I../../.. ../../../test/proto/{messages,test,empty}.proto \
39
+ --grpc_out=. \
40
+ --ruby_out=. \
41
+ --plugin=protoc-gen-grpc=`which grpc_ruby_plugin`
42
+ ```