class RailsTwirp::RouteSet::ServiceRouteSet
Attributes
rpcs[R]
Public Class Methods
new(service_class)
click to toggle source
# File lib/rails_twirp/route_set.rb, line 30 def initialize(service_class) @service_class = service_class @rpcs = {} end
Public Instance Methods
add_route(name, mapping)
click to toggle source
# File lib/rails_twirp/route_set.rb, line 35 def add_route(name, mapping) if @rpcs[name] raise ArgumentError, "Invalid RPC, route already defined: #{name}" end @rpcs[name] = mapping end
to_service()
click to toggle source
# File lib/rails_twirp/route_set.rb, line 43 def to_service # Synthesize a handler that will process the requests # handler = Class.new @rpcs.each do |name, mapping| rpc_info = @service_class.rpcs[name] raise UnknownRpcError, "Unknown RPC #{name} on #{@service_class.service_name} service" unless rpc_info method_name = rpc_info[:ruby_method] # Stolen from Rails in ActionDispatch::Request#controller_class_for action_name = mapping.action response_class = rpc_info[:output_class] handler.define_method(method_name) do |req, env| controller_name = mapping.controller.underscore const_name = controller_name.camelize << "Controller" controller_class = ::ActiveSupport::Dependencies.constantize(const_name) controller_class.dispatch(action_name, req, response_class, env) end end service = @service_class.new(handler.new) service.before do |rack_env, env| env[:rack_env] = rack_env end service end