class GRPCWeb::RackApp

Can be given a service class, an instance of a service class, or a service interface class with a block to lazily initialize the service.

Example 1:

app.handle(TestHelloService)

Example 2:

app.handle(TestHelloService.new)

Example 3:

app.handle(HelloService::Service) do
  require 'test_hello_service'
  TestHelloService.new
end

TODO: in-mem cache the result of lazy initialization

Public Instance Methods

handle(service_or_class, &lazy_init_block) click to toggle source
# File lib/grpc_web/server/rack_app.rb, line 24
def handle(service_or_class, &lazy_init_block)
  service_class = service_or_class.is_a?(Class) ? service_or_class : service_or_class.class
  GRPCWeb::ServiceClassValidator.validate(service_class)
  service_config = lazy_init_block || service_or_class

  service_class.rpc_descs.keys.each do |service_method|
    add_service_method_to_app(service_class.service_name, service_config, service_method)
  end
end

Private Instance Methods

add_service_method_to_app(service_name, service_config, service_method) click to toggle source

Map a path with Rack::Builder corresponding to the service method

# File lib/grpc_web/server/rack_app.rb, line 37
def add_service_method_to_app(service_name, service_config, service_method)
  map("/#{service_name}/#{service_method}") do
    run(RouteHandler.new(service_config, service_method))
  end
end