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