grpc_reflection 0.3.0 → 0.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.
- checksums.yaml +4 -4
- data/CHANGELOG.md +5 -0
- data/README.md +1 -1
- data/Rakefile +16 -0
- data/lib/grpc_reflection/file_descriptor_decorator.rb +15 -6
- data/lib/grpc_reflection/file_descriptor_manager.rb +6 -4
- data/lib/grpc_reflection/server_shared.rb +13 -1
- data/lib/grpc_reflection/version.rb +1 -1
- metadata +1 -1
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 3b17804fde58e327e1e11735e929252ea6b0d39b27f0c6422ee5641c37f251fb
|
|
4
|
+
data.tar.gz: 845fc82d9ed3149fb45c31ef8307a5da43240e14b7615e43d00748f5ba1ac008
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: e91d01d52dad1cfccbcdf331ea1996d90ee546e3f92ad1dd44863c89c4aca742565d6d67b5ff7a71d93d9d48cc5346cdf258c841b49e8f54feb8e13092b262bd
|
|
7
|
+
data.tar.gz: 96d03f3dec08b28b217111bb6f1017f7423d69eb9fc9785551ee16f953cfa8c589df797b3fbcf7f7aa276b63917c5ea5a537943b4de780d7ce6e8b0bfcd815f2
|
data/CHANGELOG.md
CHANGED
data/README.md
CHANGED
|
@@ -8,7 +8,7 @@ This gem aims to provide GRPC Server Reflection Protocol for Ruby. The main purp
|
|
|
8
8
|
**Caution**
|
|
9
9
|
|
|
10
10
|
* This gem only supports files that generated by the latest `protoc`.
|
|
11
|
-
* This gem doesn't support all GRPC Server Reflection Protocol features.
|
|
11
|
+
* This gem doesn't support all GRPC Server Reflection Protocol features.
|
|
12
12
|
|
|
13
13
|
## Installation
|
|
14
14
|
|
data/Rakefile
CHANGED
|
@@ -29,4 +29,20 @@ task :update_code_generated_by_protoc do
|
|
|
29
29
|
File.write(service_file, File.read(service_file).gsub(/require 'reflection_pb'/, "require_relative 'reflection_pb'"))
|
|
30
30
|
end
|
|
31
31
|
|
|
32
|
+
desc "Compile proto files for test"
|
|
33
|
+
task :compile_test_protos do
|
|
34
|
+
test_protos_dir = "test/protos"
|
|
35
|
+
proto_files = Dir.glob("#{test_protos_dir}/*.proto")
|
|
36
|
+
|
|
37
|
+
if proto_files.empty?
|
|
38
|
+
puts "No proto files found in #{test_protos_dir}"
|
|
39
|
+
exit 1
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
proto_files.each do |proto_file|
|
|
43
|
+
puts " - #{proto_file}"
|
|
44
|
+
system("bundle exec grpc_tools_ruby_protoc --ruby_out=. --grpc_out=. #{proto_file}", exception: true)
|
|
45
|
+
end
|
|
46
|
+
end
|
|
47
|
+
|
|
32
48
|
task default: :test
|
|
@@ -1,11 +1,12 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
3
|
require "json"
|
|
4
|
+
require "set"
|
|
4
5
|
require "google/protobuf/descriptor_pb"
|
|
5
6
|
|
|
6
7
|
module GrpcReflection
|
|
7
8
|
class FileDescriptorDecorator
|
|
8
|
-
attr_reader :
|
|
9
|
+
attr_reader :dataset, :serialized_file, :filename, :dependency
|
|
9
10
|
|
|
10
11
|
def initialize(file_descriptor_proto)
|
|
11
12
|
@file_descriptor_proto = file_descriptor_proto
|
|
@@ -13,19 +14,27 @@ module GrpcReflection
|
|
|
13
14
|
@filename = @file_descriptor_proto.name
|
|
14
15
|
|
|
15
16
|
@dependency = @file_descriptor_proto.dependency || []
|
|
16
|
-
@
|
|
17
|
+
@dataset = Set.new
|
|
17
18
|
|
|
18
|
-
|
|
19
|
+
set_dataset
|
|
19
20
|
end
|
|
20
21
|
|
|
21
|
-
|
|
22
|
+
private
|
|
23
|
+
|
|
24
|
+
def set_dataset
|
|
22
25
|
@file_descriptor_proto.service.each do |s|
|
|
23
26
|
converted_service = JSON.parse(s.to_json)
|
|
24
|
-
@
|
|
27
|
+
@dataset.add(@file_descriptor_proto.package + "." + converted_service["name"])
|
|
25
28
|
converted_service["method"].each do |m|
|
|
26
|
-
@
|
|
29
|
+
@dataset.add(@file_descriptor_proto.package + "." + converted_service["name"] + "." + m["name"])
|
|
30
|
+
@dataset.add(m["inputType"][1..])
|
|
31
|
+
@dataset.add(m["outputType"][1..])
|
|
27
32
|
end
|
|
28
33
|
end
|
|
34
|
+
|
|
35
|
+
@file_descriptor_proto.extension.each do |s|
|
|
36
|
+
@dataset.add(@file_descriptor_proto.package + "." + s.name)
|
|
37
|
+
end
|
|
29
38
|
end
|
|
30
39
|
end
|
|
31
40
|
end
|
|
@@ -37,21 +37,23 @@ module GrpcReflection
|
|
|
37
37
|
private
|
|
38
38
|
|
|
39
39
|
def find_file_descriptor(name)
|
|
40
|
-
file_descriptor = @@file_descriptor_decorators.detect { |f| f.
|
|
40
|
+
file_descriptor = @@file_descriptor_decorators.detect { |f| f.dataset.include?(name) }
|
|
41
41
|
return file_descriptor if file_descriptor
|
|
42
42
|
|
|
43
43
|
search_name = name
|
|
44
44
|
file_descriptor_proto = nil
|
|
45
45
|
while pos = search_name.rindex(".")
|
|
46
|
-
|
|
47
|
-
break unless file_descriptor_proto.nil?
|
|
46
|
+
descriptor = Google::Protobuf::DescriptorPool.generated_pool.lookup(search_name)
|
|
48
47
|
search_name = search_name.slice(0..(pos - 1))
|
|
48
|
+
next if descriptor.nil? || !descriptor.respond_to?(:file_descriptor)
|
|
49
|
+
file_descriptor_proto = descriptor.file_descriptor&.to_proto
|
|
50
|
+
break unless file_descriptor_proto.nil?
|
|
49
51
|
end
|
|
50
52
|
|
|
51
53
|
return nil if file_descriptor_proto.nil?
|
|
52
54
|
|
|
53
55
|
add(file_descriptor_proto)
|
|
54
|
-
@@file_descriptor_decorators.detect { |f| f.
|
|
56
|
+
@@file_descriptor_decorators.detect { |f| f.dataset.include?(name) }
|
|
55
57
|
end
|
|
56
58
|
end
|
|
57
59
|
end
|
|
@@ -5,7 +5,6 @@ module GrpcReflection
|
|
|
5
5
|
request = req.first
|
|
6
6
|
|
|
7
7
|
res = proto_module::ServerReflectionResponse.new
|
|
8
|
-
# TODO: implement another responses
|
|
9
8
|
if request.list_services.size != 0
|
|
10
9
|
res.list_services_response = proto_module::ListServiceResponse.new(service: list_services_response(proto_module))
|
|
11
10
|
elsif !request.file_containing_symbol.empty?
|
|
@@ -14,6 +13,19 @@ module GrpcReflection
|
|
|
14
13
|
elsif !request.file_by_filename.empty?
|
|
15
14
|
proto = Google::Protobuf::DescriptorPool.generated_pool.lookup(request.file_by_filename)&.to_proto
|
|
16
15
|
res.file_descriptor_response = proto_module::FileDescriptorResponse.new(file_descriptor_proto: [Google::Protobuf::FileDescriptorProto.encode(proto)])
|
|
16
|
+
elsif !request.file_containing_extension.nil? && !request.file_containing_extension.containing_type.empty?
|
|
17
|
+
descriptor = Google::Protobuf::DescriptorPool.generated_pool.lookup(request.file_containing_extension.containing_type)
|
|
18
|
+
if descriptor.is_a?(Google::Protobuf::FieldDescriptor) && descriptor.number == request.file_containing_extension.extension_number
|
|
19
|
+
result = GrpcReflection::FileDescriptorManager.find(request.file_containing_extension.containing_type)
|
|
20
|
+
res.file_descriptor_response = proto_module::FileDescriptorResponse.new(file_descriptor_proto: result)
|
|
21
|
+
else
|
|
22
|
+
res.file_descriptor_response = proto_module::FileDescriptorResponse.new(file_descriptor_proto: [])
|
|
23
|
+
end
|
|
24
|
+
elsif !request.all_extension_numbers_of_type.empty?
|
|
25
|
+
res.error_response = proto_module::ErrorResponse.new(
|
|
26
|
+
error_code: GRPC::Core::StatusCodes::UNIMPLEMENTED,
|
|
27
|
+
error_message: "all_extension_numbers_of_type is not implemented"
|
|
28
|
+
)
|
|
17
29
|
end
|
|
18
30
|
[res].enum_for(:each)
|
|
19
31
|
end
|