class RespondToPb

Public Class Methods

new(app) click to toggle source
# File lib/rails_respond_to_pb/respond_to_pb.rb, line 6
def initialize(app)
  @app = app
end

Public Instance Methods

call(env) click to toggle source
# File lib/rails_respond_to_pb/respond_to_pb.rb, line 10
def call(env)
  _, @resource, @action = env['PATH_INFO'].split('/')

  if env['CONTENT_TYPE'] == Twirp::Encoding::PROTO
    env['HTTP_ACCEPT'] = Twirp::Encoding::PROTO
    service.call(env)
  else
    @app.call(env)
  end
end

Private Instance Methods

controller_class() click to toggle source
# File lib/rails_respond_to_pb/respond_to_pb.rb, line 39
def controller_class
  ::ActiveSupport::Dependencies.constantize("#{@resource}Controller")
end
handler() click to toggle source
# File lib/rails_respond_to_pb/respond_to_pb.rb, line 23
def handler
  TwirpHandler.new(controller: controller_class)
end
service() click to toggle source
# File lib/rails_respond_to_pb/respond_to_pb.rb, line 27
def service
  service_class.new(handler).tap do |svc|
    svc.before do |rack_env, rpc_env|
      rpc_env[:rack_env] = rack_env
    end
  end
end
service_class() click to toggle source
# File lib/rails_respond_to_pb/respond_to_pb.rb, line 35
def service_class
  ::ActiveSupport::Dependencies.constantize("#{@resource}Service")
end