module Rough::BaseController
Constants
- PROTO_MIME
Public Class Methods
included(base)
click to toggle source
# File lib/rough/base_controller.rb, line 11 def self.included(base) base.class_eval do before_action :log_proto, if: :rpc? alias_method_chain :params, :request_proto end end
Public Instance Methods
render(options = {})
click to toggle source
Calls superclass method
# File lib/rough/base_controller.rb, line 18 def render(options = {}) return if performed? if rpc? if request.accept == PROTO_MIME || request.content_type == PROTO_MIME response.headers['Content-Type'] = PROTO_MIME.to_s super text: response_proto.encode, status: options[:status] else super json: response_proto.to_json, status: options[:status] end else super end end
request_proto()
click to toggle source
# File lib/rough/base_controller.rb, line 32 def request_proto return nil unless rpc? @request_proto ||= if request.content_type == PROTO_MIME RpcRegistry.request_class_for(rpc_name).decode(request.body.read) else RpcRegistry.request_class_for(rpc_name).new(params_without_request_proto) end rescue TypeError => e raise InvalidRequestProto, e end
response_proto()
click to toggle source
# File lib/rough/base_controller.rb, line 44 def response_proto return nil unless rpc? @response_proto ||= RpcRegistry.response_class_for(rpc_name).new end
Private Instance Methods
log_proto()
click to toggle source
# File lib/rough/base_controller.rb, line 63 def log_proto Rails.logger.info(" Request Proto: #{request_proto.inspect}") end
params_with_request_proto()
click to toggle source
# File lib/rough/base_controller.rb, line 51 def params_with_request_proto if rpc? ActionController::Parameters.new(request_proto.to_hash) else params_without_request_proto end end
rpc?()
click to toggle source
# File lib/rough/base_controller.rb, line 59 def rpc? rpc_name end
rpc_name()
click to toggle source
# File lib/rough/base_controller.rb, line 67 def rpc_name params_without_request_proto[:rpc] end