protobuf 2.8.13 → 3.0.0.rc1
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.
- checksums.yaml +4 -4
- data/CHANGES.md +84 -5
- data/CONTRIBUTING.md +3 -3
- data/Rakefile +46 -7
- data/lib/protobuf/cli.rb +2 -20
- data/lib/protobuf/decoder.rb +74 -0
- data/lib/protobuf/deprecator.rb +42 -0
- data/lib/protobuf/descriptors/google/protobuf/compiler/plugin.pb.rb +17 -16
- data/lib/protobuf/descriptors/google/protobuf/descriptor.pb.rb +86 -85
- data/lib/protobuf/encoder.rb +62 -0
- data/lib/protobuf/enum.rb +298 -37
- data/lib/protobuf/field/base_field.rb +41 -27
- data/lib/protobuf/field/bool_field.rb +22 -4
- data/lib/protobuf/field/bytes_field.rb +36 -15
- data/lib/protobuf/field/double_field.rb +10 -3
- data/lib/protobuf/field/enum_field.rb +21 -18
- data/lib/protobuf/field/field_array.rb +26 -16
- data/lib/protobuf/field/fixed32_field.rb +10 -4
- data/lib/protobuf/field/fixed64_field.rb +10 -3
- data/lib/protobuf/field/float_field.rb +18 -5
- data/lib/protobuf/field/int32_field.rb +14 -4
- data/lib/protobuf/field/int64_field.rb +14 -4
- data/lib/protobuf/field/integer_field.rb +9 -4
- data/lib/protobuf/field/message_field.rb +16 -7
- data/lib/protobuf/field/sfixed32_field.rb +10 -3
- data/lib/protobuf/field/sfixed64_field.rb +12 -7
- data/lib/protobuf/field/signed_integer_field.rb +7 -0
- data/lib/protobuf/field/sint32_field.rb +14 -4
- data/lib/protobuf/field/sint64_field.rb +14 -4
- data/lib/protobuf/field/string_field.rb +11 -1
- data/lib/protobuf/field/uint32_field.rb +14 -4
- data/lib/protobuf/field/uint64_field.rb +14 -4
- data/lib/protobuf/field/varint_field.rb +11 -9
- data/lib/protobuf/field.rb +42 -25
- data/lib/protobuf/generators/enum_generator.rb +12 -1
- data/lib/protobuf/generators/field_generator.rb +1 -1
- data/lib/protobuf/lifecycle.rb +3 -4
- data/lib/protobuf/message/fields.rb +122 -0
- data/lib/protobuf/message/serialization.rb +84 -0
- data/lib/protobuf/message.rb +21 -221
- data/lib/protobuf/optionable.rb +23 -0
- data/lib/protobuf/rpc/client.rb +2 -4
- data/lib/protobuf/rpc/connector.rb +0 -2
- data/lib/protobuf/rpc/connectors/common.rb +2 -2
- data/lib/protobuf/rpc/dynamic_discovery.pb.rb +14 -16
- data/lib/protobuf/rpc/env.rb +58 -0
- data/lib/protobuf/rpc/error.rb +8 -5
- data/lib/protobuf/rpc/middleware/exception_handler.rb +36 -0
- data/lib/protobuf/rpc/middleware/logger.rb +91 -0
- data/lib/protobuf/rpc/middleware/request_decoder.rb +83 -0
- data/lib/protobuf/rpc/middleware/response_encoder.rb +88 -0
- data/lib/protobuf/rpc/middleware/runner.rb +18 -0
- data/lib/protobuf/rpc/middleware.rb +25 -0
- data/lib/protobuf/rpc/rpc.pb.rb +15 -16
- data/lib/protobuf/rpc/server.rb +14 -64
- data/lib/protobuf/rpc/servers/socket/server.rb +0 -2
- data/lib/protobuf/rpc/servers/socket/worker.rb +11 -15
- data/lib/protobuf/rpc/servers/zmq/util.rb +4 -1
- data/lib/protobuf/rpc/servers/zmq/worker.rb +5 -13
- data/lib/protobuf/rpc/servers/zmq_runner.rb +1 -1
- data/lib/protobuf/rpc/service.rb +38 -72
- data/lib/protobuf/rpc/service_dispatcher.rb +20 -108
- data/lib/protobuf/version.rb +1 -2
- data/lib/protobuf.rb +5 -13
- data/protobuf.gemspec +5 -5
- data/spec/benchmark/tasks.rb +2 -77
- data/spec/functional/zmq_server_spec.rb +13 -21
- data/spec/lib/protobuf/cli_spec.rb +5 -43
- data/spec/lib/protobuf/enum_spec.rb +194 -61
- data/spec/lib/protobuf/field_spec.rb +194 -0
- data/spec/lib/protobuf/generators/enum_generator_spec.rb +24 -1
- data/spec/lib/protobuf/generators/field_generator_spec.rb +6 -6
- data/spec/lib/protobuf/message_spec.rb +52 -70
- data/spec/lib/protobuf/optionable_spec.rb +46 -0
- data/spec/lib/protobuf/rpc/client_spec.rb +1 -93
- data/spec/lib/protobuf/rpc/connector_spec.rb +1 -7
- data/spec/lib/protobuf/rpc/connectors/zmq_spec.rb +8 -0
- data/spec/lib/protobuf/rpc/middleware/exception_handler_spec.rb +62 -0
- data/spec/lib/protobuf/rpc/middleware/logger_spec.rb +49 -0
- data/spec/lib/protobuf/rpc/middleware/request_decoder_spec.rb +115 -0
- data/spec/lib/protobuf/rpc/middleware/response_encoder_spec.rb +75 -0
- data/spec/lib/protobuf/rpc/servers/socket_server_spec.rb +0 -6
- data/spec/lib/protobuf/rpc/servers/zmq/util_spec.rb +10 -0
- data/spec/lib/protobuf/rpc/service_dispatcher_spec.rb +30 -105
- data/spec/lib/protobuf/rpc/service_filters_spec.rb +4 -4
- data/spec/lib/protobuf/rpc/service_spec.rb +20 -24
- data/spec/lib/protobuf_spec.rb +3 -3
- data/spec/spec_helper.rb +5 -4
- data/spec/support/packed_field.rb +15 -14
- data/spec/support/server.rb +4 -21
- data/spec/support/test/defaults.pb.rb +4 -4
- data/spec/support/test/enum.pb.rb +13 -1
- data/spec/support/test/enum.proto +15 -0
- data/spec/support/test/extended.pb.rb +1 -1
- data/spec/support/test/google_unittest.pb.rb +239 -241
- data/spec/support/test/google_unittest_import.pb.rb +2 -2
- data/spec/support/test/multi_field_extensions.pb.rb +2 -2
- data/spec/support/test/resource.pb.rb +19 -18
- data/spec/support/test/resource.proto +1 -0
- data/spec/support/test/resource_service.rb +5 -0
- metadata +78 -57
- data/bin/rprotoc +0 -8
- data/lib/protobuf/enum_value.rb +0 -85
- data/lib/protobuf/evented.rb +0 -37
- data/lib/protobuf/ext/eventmachine.rb +0 -14
- data/lib/protobuf/field/extension_fields.rb +0 -32
- data/lib/protobuf/message/decoder.rb +0 -72
- data/lib/protobuf/message/message.rb +0 -1
- data/lib/protobuf/rpc/connectors/em_client.rb +0 -84
- data/lib/protobuf/rpc/connectors/eventmachine.rb +0 -87
- data/lib/protobuf/rpc/servers/evented/server.rb +0 -36
- data/lib/protobuf/rpc/servers/evented_runner.rb +0 -31
- data/spec/functional/embedded_service_spec.rb +0 -7
- data/spec/functional/evented_server_spec.rb +0 -64
- data/spec/lib/protobuf/enum_value_spec.rb +0 -29
- data/spec/lib/protobuf/rpc/servers/evented_server_spec.rb +0 -19
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 7f5adb66133630992323a9997d949111915d8829
|
4
|
+
data.tar.gz: 7e38efbe7179f878ba6851d7b959e2c4e9227399
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: a5753795f4b427bad944603d34eacd68ba6f649104f841ffbd6f32ba09413206f0113087b588023ffaa5390ab96ddc4b669cb72a8dde924eb3b9818f9283ad79
|
7
|
+
data.tar.gz: 9144fc91254485e6af4bb9d25db6b2401a50a63920d2749ef262069802a2d0787020a65f81ac098b0f16f0fa6ac4b1a28a231d3997c8c6b3d5a5727e0e82a563
|
data/CHANGES.md
CHANGED
@@ -1,7 +1,86 @@
|
|
1
|
-
|
1
|
+
# Unstable
|
2
|
+
|
3
|
+
3.0.0.rc1
|
2
4
|
---------
|
3
5
|
|
4
|
-
|
6
|
+
A lot has changed leading up to the release of 3.0. For all the relevant changes,
|
7
|
+
see the closed [pull requests and issues list in github](https://github.com/localshred/protobuf/issues?milestone=1&state=closed).
|
8
|
+
Below is a high-level list of fixes, deprecations, breaking changes, and new APIs.
|
9
|
+
|
10
|
+
### EventMachine is dead, Long live EventMachine
|
11
|
+
|
12
|
+
The EventMachine client and server have been removed from this gem. They code was far
|
13
|
+
too error prone and flawed to feasibly support going forward. It's recommended
|
14
|
+
to switch to the socket implementation (using `PB_CLIENT_TYPE` and `PB_SERVER_TYPE` of `socket`)
|
15
|
+
for a painless switchover. The ZMQ implementation is much more performant but
|
16
|
+
does have a dependency on libzmq.
|
17
|
+
|
18
|
+
### Server Middlewares
|
19
|
+
|
20
|
+
The server/dispatcher stack has been converted to the Middleware pattern!
|
21
|
+
Exception handling (#162, #164), Request decoding (#160, #166), Response encoding (#161, #167),
|
22
|
+
Logging and stats (#163), and Method dispatch (#159) have all been extracted into their
|
23
|
+
own Middlewares to greatly simplify testing and further development of the server
|
24
|
+
stack, furthering our preparations for removing the socket implementations (zmq, socket)
|
25
|
+
into their own gems in version 4.0. Major props to @liveh2o for [tackling this beast](https://github.com/localshred/protobuf/tree/master/lib/protobuf/rpc/middleware).
|
26
|
+
|
27
|
+
#### Bug Fixes
|
28
|
+
|
29
|
+
- Resolve DNS names (e.g. localhost) when using ZMQ server. [#46, reported by @reddshack]
|
30
|
+
- Switched to hash based value storage for messages to fix large field tag memory issues. [#118, #165]
|
31
|
+
- `Enum.fetch` used to return an enum of any type if that is the value passed in. [#168]
|
32
|
+
|
33
|
+
#### Deprecations
|
34
|
+
|
35
|
+
__!! NOTE: These deprecated methods will be removed in v3.1. !!__
|
36
|
+
|
37
|
+
- Deprecated `BaseField#type` in favor of `#type_class`.
|
38
|
+
- Deprecated `Message.get_ext_field_by_name` in favor of `.get_extension_field` or `.get_field(name_or_tag, true)`.
|
39
|
+
- Deprecated `Message.get_ext_field_by_tag,` in favor of `.get_extension_field` or `.get_field(name_or_tag, true)`.
|
40
|
+
- Deprecated `Message.get_field_by_name,` in favor of `.get_field`.
|
41
|
+
- Deprecated `Message.get_field_by_tag,` in favor of `.get_field`.
|
42
|
+
- Deprecated `Enum.enum_by_value` in favor of `.enum_for_tag`.
|
43
|
+
- Deprecated `Enum.name_by_value` in favor of `.name_for_tag`.
|
44
|
+
- Deprecated `Enum.get_name_by_tag` in favor of `.name_for_tag`.
|
45
|
+
- Deprecated `Enum.value_by_name` in favor of `.enum_for_name`.
|
46
|
+
- Deprecated `Enum.values` in favor of `.enums`. Beware that `.enums` returns an array where `.values` returns a hash.
|
47
|
+
Use `.all_tags` if you just need all the valid tag numbers. In other words, don't do this anymore: `MyEnum.values.values.map(&:to_i).uniq`.
|
48
|
+
|
49
|
+
#### Breaking Changes
|
50
|
+
|
51
|
+
- All files/classes relating to the EventMachine client and server are gone. Use `PB_CLIENT_TYPE` and `PB_SERVER_TYPE` of `socket` instead. [#116]
|
52
|
+
- Cleaned up the `Enum` class, deprecating/renaming most methods. tl;dr, just use `MyEnum.fetch`.
|
53
|
+
See #134 for more comprehensive documentation about which methods are going and away and which are being renamed. [#134]
|
54
|
+
- Pulled `EnumValue` into `Enum`. The `EnumValue` class no longer exists. Use `Enum` for type-checking instead. [#168].
|
55
|
+
- Removed previously deprecated `bin/rprotoc` executable. Use `protoc --ruby_out=...` instead. [13fbdb9]
|
56
|
+
- Removed previously deprecated `Service#rpc` method. Use `Service#env#method_name` instead. [f391294]
|
57
|
+
- Changed the `Service#initialize` to take an `Env` object instead of separate request, method, and client parameters. [6c61bf72]
|
58
|
+
- Removed attribute readers for `Service#method_name` and `Service#client_host`. Use `Service#env` to get them instead.
|
59
|
+
- Removed `lib/protobuf/message/message.rb`. Use `lib/protobuf/message.rb` instead.
|
60
|
+
- Removed field getters from Message instances (e.g. `Message#get_field_by_name`).
|
61
|
+
Use class-level getters instead (see Deprecations section).
|
62
|
+
- Moved `lib/protobuf/message/decoder.rb` to `lib/protobuf/decoder.rb`. The module is still named `Protobuf::Decoder`.
|
63
|
+
- Removed `Protobuf::Field::ExtensionFields` class.
|
64
|
+
- Removed instance-level `max` and `min` methods from all relevant Field classes (e.g. Int32Field, Uint64Field, etc).
|
65
|
+
Use class-level methods of the same names instead. [#176, 992eb051]
|
66
|
+
- `PbError#to_response` no longer receives an argument, instead returning a new `Socketrpc::Response` object. [#147, @liveh2o]
|
67
|
+
- The Server module has been stripped of almost all methods, now simply invokes the Middleware stack for each request. [#159, @liveh2o]
|
68
|
+
- Removed `Protobuf::PROTOC_VERSION` constant now that the compiler supports any protoc version.
|
69
|
+
|
70
|
+
#### New APIs
|
71
|
+
|
72
|
+
- Added support for [enum `allow_alias` option](https://developers.google.com/protocol-buffers/docs/proto#enum). [#134]
|
73
|
+
- `Enum.all_tags` returns an array of unique tags. Use it to replace `Enum.values.values.map(&:to_i)` (`Enum.values` is deprecated).
|
74
|
+
- `Enum.enums` returns an array of all defined enums for that class (including any aliased Enums).
|
75
|
+
- Reinstated support for symbol primitive field types in generated Message code. [#170]
|
76
|
+
- `Message.get_field` accepts a second boolean parameter (default false) to return an extension field if found. [#169]
|
77
|
+
- Mirror existing `Decoder#decode_from(stream)` with `Encoder#encode_to(stream)`. [#169]
|
78
|
+
- `Server` now invokes the [middleware stack](https://github.com/localshred/protobuf/tree/master/lib/protobuf/rpc/middleware) for request handling. [#159, @liveh2o]
|
79
|
+
- Added `protobuf:compile` and `protobuf:clean` rake tasks. Simply `load 'protobuf/tasks/compile.rake'` in your Rakefile (see `compile.rake` for arguments and usage). [#142, #143]
|
80
|
+
- Add `Protobuf::Deprecator` module to alias deprecated methods. [#165]
|
81
|
+
|
82
|
+
|
83
|
+
# Stable (2.x)
|
5
84
|
|
6
85
|
2.8.12
|
7
86
|
---------
|
@@ -19,14 +98,14 @@
|
|
19
98
|
2.8.10
|
20
99
|
---------
|
21
100
|
|
22
|
-
- Allow passing a file extension to compile/clean rake tasks. [#143
|
101
|
+
- Allow passing a file extension to compile/clean rake tasks. [#143]
|
23
102
|
|
24
103
|
2.8.9
|
25
104
|
---------
|
26
105
|
|
27
106
|
- Deprecated Protobuf::Lifecycle module in favor of using ActiveSupport::Notifications. [#139, @devin-c]
|
28
|
-
- Modify `$LOAD_PATH` inside descriptors.rb to make it easier for other libraries to write their own compiler plugins using our pre-compiled descriptors. [#141
|
29
|
-
- Add protobuf:clean and protobuf:compile rake tasks for use in external libraries to compile source definitions to a destination. [#142
|
107
|
+
- Modify `$LOAD_PATH` inside descriptors.rb to make it easier for other libraries to write their own compiler plugins using our pre-compiled descriptors. [#141]
|
108
|
+
- Add protobuf:clean and protobuf:compile rake tasks for use in external libraries to compile source definitions to a destination. [#142]
|
30
109
|
|
31
110
|
2.8.8
|
32
111
|
---------
|
data/CONTRIBUTING.md
CHANGED
@@ -6,11 +6,11 @@ your code merged.
|
|
6
6
|
|
7
7
|
1. Use GitHub Issues or Pull Requests over sending an email. It's much easier for me to keep track of your issue through GitHub.
|
8
8
|
2. For __compiler issues__, please provide both a gist for the __source definition(s)__ as well as the __generated output__ (if any).
|
9
|
-
3. For
|
10
|
-
4. For
|
9
|
+
3. For __existing issues or functionality__, please use __`2-8-stable`__ as the base branch for the pull request. This helps us maintain a stable gem release strategy. All commits merged to `2-8-stable` will also be merged down to `master`.
|
10
|
+
4. For __new functionality__, please use __`master`__ as the base branch for the pull request. The `master` branch is used to stage all "next iteration" work.
|
11
11
|
5. Be patient with me as I work on your issue.
|
12
12
|
|
13
13
|
Following these simple guidelines really will help me help you. And really,
|
14
|
-
that's what we're here for. :)
|
14
|
+
that's what we're here for. I'm on @localshred on twitter, let's be friends. :)
|
15
15
|
|
16
16
|
## Happy Contributing!
|
data/Rakefile
CHANGED
@@ -1,19 +1,58 @@
|
|
1
1
|
$: << ::File.expand_path('../', __FILE__)
|
2
2
|
$: << ::File.expand_path('../spec', __FILE__)
|
3
3
|
|
4
|
-
require
|
5
|
-
require
|
6
|
-
require
|
7
|
-
|
4
|
+
require 'fileutils'
|
5
|
+
require 'rubygems'
|
6
|
+
require 'rubygems/package_task'
|
7
|
+
require 'bundler/gem_tasks'
|
8
|
+
require 'benchmark/tasks'
|
8
9
|
|
9
|
-
require
|
10
|
+
require 'rspec/core/rake_task'
|
10
11
|
|
11
|
-
desc
|
12
|
+
desc 'Default: run specs.'
|
12
13
|
task :default => :spec
|
13
14
|
|
14
|
-
desc "Run specs"
|
15
15
|
RSpec::Core::RakeTask.new(:spec)
|
16
16
|
|
17
|
+
desc 'Run specs'
|
18
|
+
namespace :compile do
|
19
|
+
|
20
|
+
desc 'Compile spec protos in spec/supprt/ directory'
|
21
|
+
task :spec do |task, args|
|
22
|
+
proto_path = ::File.expand_path('../spec/support/', __FILE__)
|
23
|
+
cmd = %Q{protoc --plugin=./bin/protoc-gen-ruby --ruby_out=#{proto_path} -I #{proto_path} #{File.join(proto_path, '**', '*.proto')}}
|
24
|
+
|
25
|
+
puts cmd
|
26
|
+
exec(cmd)
|
27
|
+
end
|
28
|
+
|
29
|
+
desc 'Compile rpc protos in protos/ directory'
|
30
|
+
task :rpc do |task, args|
|
31
|
+
proto_path = ::File.expand_path('../proto', __FILE__)
|
32
|
+
output_dir = ::File.expand_path('../tmp/rpc', __FILE__)
|
33
|
+
::FileUtils.mkdir_p(output_dir)
|
34
|
+
|
35
|
+
cmd = %Q{protoc --plugin=./bin/protoc-gen-ruby --ruby_out=#{output_dir} -I #{proto_path} #{File.join(proto_path, '**', '*.proto')}}
|
36
|
+
|
37
|
+
puts cmd
|
38
|
+
system(cmd)
|
39
|
+
|
40
|
+
files = {
|
41
|
+
'tmp/rpc/dynamic_discovery.pb.rb' => 'lib/protobuf/rpc',
|
42
|
+
'tmp/rpc/rpc.pb.rb' => 'lib/protobuf/rpc',
|
43
|
+
'tmp/rpc/google/protobuf/descriptor.pb.rb' => 'lib/protobuf/descriptors/google/protobuf',
|
44
|
+
'tmp/rpc/google/protobuf/compiler/plugin.pb.rb' => 'lib/protobuf/descriptors/google/protobuf/compiler'
|
45
|
+
}
|
46
|
+
|
47
|
+
files.each_pair do |source_file, destination_dir|
|
48
|
+
source_file = ::File.expand_path("../#{source_file}", __FILE__)
|
49
|
+
destination_dir = ::File.expand_path("../#{destination_dir}", __FILE__)
|
50
|
+
::FileUtils::Verbose.cp(source_file, destination_dir)
|
51
|
+
end
|
52
|
+
end
|
53
|
+
|
54
|
+
end
|
55
|
+
|
17
56
|
task :console do
|
18
57
|
require 'pry'
|
19
58
|
require 'protobuf'
|
data/lib/protobuf/cli.rb
CHANGED
@@ -1,7 +1,6 @@
|
|
1
1
|
require 'thor'
|
2
2
|
require 'protobuf/version'
|
3
3
|
require 'protobuf/logger'
|
4
|
-
require 'protobuf/rpc/servers/evented_runner'
|
5
4
|
require 'protobuf/rpc/servers/socket_runner'
|
6
5
|
require 'protobuf/rpc/servers/zmq_runner'
|
7
6
|
|
@@ -26,7 +25,6 @@ module Protobuf
|
|
26
25
|
option :level, :type => :numeric, :default => ::Logger::INFO, :aliases => %w(-v), :desc => 'Log level to use, 0-5 (see http://www.ruby-doc.org/stdlib/libdoc/logger/rdoc/)'
|
27
26
|
|
28
27
|
option :socket, :type => :boolean, :aliases => %w(-s), :desc => 'Socket Mode for server and client connections.'
|
29
|
-
option :evented, :type => :boolean, :aliases => %w(-m), :desc => 'Evented Mode for server and client connections (uses EventMachine).'
|
30
28
|
option :zmq, :type => :boolean, :aliases => %w(-z), :desc => 'ZeroMQ Socket Mode for server and client connections.'
|
31
29
|
|
32
30
|
option :beacon_interval, :type => :numeric, :desc => 'Broadcast beacons every N seconds. (default: 5)'
|
@@ -59,7 +57,7 @@ module Protobuf
|
|
59
57
|
|
60
58
|
desc 'version', 'Print ruby and protoc versions and exit.'
|
61
59
|
def version
|
62
|
-
say("Ruby Protobuf v#{::Protobuf::VERSION}
|
60
|
+
say("Ruby Protobuf v#{::Protobuf::VERSION}")
|
63
61
|
end
|
64
62
|
|
65
63
|
no_tasks do
|
@@ -111,16 +109,12 @@ module Protobuf
|
|
111
109
|
@runner_mode = :socket
|
112
110
|
elsif options.zmq?
|
113
111
|
@runner_mode = :zmq
|
114
|
-
elsif options.evented?
|
115
|
-
@runner_mode = :evented
|
116
112
|
else
|
117
113
|
case server_type = ENV["PB_SERVER_TYPE"]
|
118
114
|
when nil, /socket/i
|
119
115
|
@runner_mode = :socket
|
120
116
|
when /zmq/i
|
121
117
|
@runner_mode = :zmq
|
122
|
-
when /evented/i
|
123
|
-
@runner_mode = :evented
|
124
118
|
else
|
125
119
|
say "WARNING: You have provided incorrect option 'PB_SERVER_TYPE=#{server_type}'. Defaulting to socket mode.", :yellow
|
126
120
|
@runner_mode = :socket
|
@@ -150,8 +144,6 @@ module Protobuf
|
|
150
144
|
def create_runner
|
151
145
|
debug_say("Creating #{@runner_mode} runner")
|
152
146
|
@runner = case @runner_mode
|
153
|
-
when :evented
|
154
|
-
create_evented_runner
|
155
147
|
when :zmq
|
156
148
|
create_zmq_runner
|
157
149
|
when :socket
|
@@ -172,11 +164,7 @@ module Protobuf
|
|
172
164
|
|
173
165
|
# Internal helper to determine if the modes are multi-set which is not valid.
|
174
166
|
def multi_mode?
|
175
|
-
|
176
|
-
options.zmq?,
|
177
|
-
options.evented?,
|
178
|
-
options.socket?,
|
179
|
-
].count(true) > 1
|
167
|
+
options.zmq? && options.socket?
|
180
168
|
end
|
181
169
|
|
182
170
|
# Require the application file given, exiting if the file doesn't exist.
|
@@ -211,12 +199,6 @@ module Protobuf
|
|
211
199
|
exit(1)
|
212
200
|
end
|
213
201
|
|
214
|
-
def create_evented_runner
|
215
|
-
require 'protobuf/evented'
|
216
|
-
|
217
|
-
@runner = ::Protobuf::Rpc::EventedRunner.new(runner_options)
|
218
|
-
end
|
219
|
-
|
220
202
|
def create_socket_runner
|
221
203
|
require 'protobuf/socket'
|
222
204
|
|
@@ -0,0 +1,74 @@
|
|
1
|
+
require 'protobuf/wire_type'
|
2
|
+
require 'protobuf/exceptions'
|
3
|
+
|
4
|
+
module Protobuf
|
5
|
+
class Decoder
|
6
|
+
|
7
|
+
# Read bytes from +stream+ and pass to +message+ object.
|
8
|
+
def self.decode_each_field(stream, &block)
|
9
|
+
until stream.eof?
|
10
|
+
tag, bytes = read_field(stream)
|
11
|
+
block.call(tag, bytes)
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
def self.read_field(stream)
|
16
|
+
tag, wire_type = read_key(stream)
|
17
|
+
bytes = case wire_type
|
18
|
+
when ::Protobuf::WireType::VARINT then
|
19
|
+
read_varint(stream)
|
20
|
+
when ::Protobuf::WireType::FIXED64 then
|
21
|
+
read_fixed64(stream)
|
22
|
+
when ::Protobuf::WireType::LENGTH_DELIMITED then
|
23
|
+
read_length_delimited(stream)
|
24
|
+
when ::Protobuf::WireType::FIXED32 then
|
25
|
+
read_fixed32(stream)
|
26
|
+
when ::Protobuf::WireType::START_GROUP then
|
27
|
+
raise NotImplementedError, 'Group is deprecated.'
|
28
|
+
when ::Protobuf::WireType::END_GROUP then
|
29
|
+
raise NotImplementedError, 'Group is deprecated.'
|
30
|
+
else
|
31
|
+
raise InvalidWireType, wire_type
|
32
|
+
end
|
33
|
+
|
34
|
+
return tag, bytes
|
35
|
+
end
|
36
|
+
|
37
|
+
# Read 32-bit string value from +stream+.
|
38
|
+
def self.read_fixed32(stream)
|
39
|
+
stream.read(4)
|
40
|
+
end
|
41
|
+
|
42
|
+
# Read 64-bit string value from +stream+.
|
43
|
+
def self.read_fixed64(stream)
|
44
|
+
stream.read(8)
|
45
|
+
end
|
46
|
+
|
47
|
+
# Read key pair (tag and wire-type) from +stream+.
|
48
|
+
def self.read_key(stream)
|
49
|
+
bits = read_varint(stream)
|
50
|
+
wire_type = bits & 0x07
|
51
|
+
tag = bits >> 3
|
52
|
+
[tag, wire_type]
|
53
|
+
end
|
54
|
+
|
55
|
+
# Read length-delimited string value from +stream+.
|
56
|
+
def self.read_length_delimited(stream)
|
57
|
+
value_length = read_varint(stream)
|
58
|
+
stream.read(value_length)
|
59
|
+
end
|
60
|
+
|
61
|
+
# Read varint integer value from +stream+.
|
62
|
+
def self.read_varint(stream)
|
63
|
+
value = index = 0
|
64
|
+
begin
|
65
|
+
byte = stream.readbyte
|
66
|
+
value |= (byte & 0x7f) << (7 * index)
|
67
|
+
index += 1
|
68
|
+
end while (byte & 0x80).nonzero?
|
69
|
+
value
|
70
|
+
end
|
71
|
+
|
72
|
+
end
|
73
|
+
end
|
74
|
+
|
@@ -0,0 +1,42 @@
|
|
1
|
+
module Protobuf
|
2
|
+
module Deprecator
|
3
|
+
|
4
|
+
def warn_deprecated(old_method, new_method)
|
5
|
+
$stderr.puts %Q{[DEPRECATED] #{self.name}.#{old_method} is deprecated and will disappear in a future version.
|
6
|
+
Please use #{self.name}.#{new_method} instead.\n}
|
7
|
+
end
|
8
|
+
|
9
|
+
# Given deprecations should be a hash whose keys are the new methods
|
10
|
+
# and values are a list of deprecated methods that should send to t
|
11
|
+
def deprecate_method(old_method, new_method)
|
12
|
+
class_eval(<<-DEPRECATED, __FILE__, __LINE__ + 1)
|
13
|
+
def #{old_method}(*args)
|
14
|
+
warn_deprecated("#{old_method}", "#{new_method}")
|
15
|
+
new_meth = method("#{new_method}")
|
16
|
+
if new_meth.arity == 0
|
17
|
+
__send__("#{new_method}")
|
18
|
+
else
|
19
|
+
__send__("#{new_method}", *args)
|
20
|
+
end
|
21
|
+
end
|
22
|
+
DEPRECATED
|
23
|
+
end
|
24
|
+
|
25
|
+
# Given deprecations should be a hash whose keys are the new methods
|
26
|
+
# and values are a list of deprecated methods that should send to t
|
27
|
+
def deprecate_class_method(old_method, new_method)
|
28
|
+
class_eval(<<-DEPRECATED, __FILE__, __LINE__ + 1)
|
29
|
+
def self.#{old_method}(*args)
|
30
|
+
warn_deprecated("#{old_method}", "#{new_method}")
|
31
|
+
new_meth = method("#{new_method}")
|
32
|
+
if new_meth.arity == 0
|
33
|
+
__send__("#{new_method}")
|
34
|
+
else
|
35
|
+
__send__("#{new_method}", *args)
|
36
|
+
end
|
37
|
+
end
|
38
|
+
DEPRECATED
|
39
|
+
end
|
40
|
+
|
41
|
+
end
|
42
|
+
end
|
@@ -3,49 +3,50 @@
|
|
3
3
|
#
|
4
4
|
require 'protobuf/message'
|
5
5
|
|
6
|
+
|
6
7
|
##
|
7
8
|
# Imports
|
8
9
|
#
|
9
10
|
require 'google/protobuf/descriptor.pb'
|
10
11
|
|
11
12
|
module Google
|
12
|
-
|
13
13
|
module Protobuf
|
14
|
-
|
15
14
|
module Compiler
|
16
|
-
|
15
|
+
|
17
16
|
##
|
18
17
|
# Message Classes
|
19
18
|
#
|
20
19
|
class CodeGeneratorRequest < ::Protobuf::Message; end
|
21
20
|
class CodeGeneratorResponse < ::Protobuf::Message
|
22
21
|
class File < ::Protobuf::Message; end
|
22
|
+
|
23
23
|
end
|
24
|
-
|
24
|
+
|
25
|
+
|
26
|
+
|
25
27
|
##
|
26
28
|
# Message Fields
|
27
29
|
#
|
28
30
|
class CodeGeneratorRequest
|
29
|
-
repeated
|
30
|
-
optional
|
31
|
+
repeated :string, :file_to_generate, 1
|
32
|
+
optional :string, :parameter, 2
|
31
33
|
repeated ::Google::Protobuf::FileDescriptorProto, :proto_file, 15
|
32
34
|
end
|
33
|
-
|
35
|
+
|
34
36
|
class CodeGeneratorResponse
|
35
37
|
class File
|
36
|
-
optional
|
37
|
-
optional
|
38
|
-
optional
|
38
|
+
optional :string, :name, 1
|
39
|
+
optional :string, :insertion_point, 2
|
40
|
+
optional :string, :content, 15
|
39
41
|
end
|
40
|
-
|
41
|
-
optional
|
42
|
+
|
43
|
+
optional :string, :error, 1
|
42
44
|
repeated ::Google::Protobuf::Compiler::CodeGeneratorResponse::File, :file, 15
|
43
45
|
end
|
44
|
-
|
45
|
-
|
46
|
+
|
46
47
|
end
|
47
|
-
|
48
|
+
|
48
49
|
end
|
49
|
-
|
50
|
+
|
50
51
|
end
|
51
52
|
|