class AppBaseController::RpcMethodStubHelper

Public Class Methods

new(bound_method, auth=false) click to toggle source
# File lib/appbase/controllers/app_base_controller.rb, line 147
def initialize(bound_method, auth=false)
  @bound_method = bound_method
  @auth = auth
  @method_name = bound_method.name
  @model_name = bound_method.receiver.name.to_s.extend(AppBase::StringExtension)
  init
end

Public Instance Methods

add_stub(controller) click to toggle source
# File lib/appbase/controllers/app_base_controller.rb, line 155
def add_stub(controller)
  controller.class_eval %-
    def rpc_#{@model_name.underscore}_#{@method_name}
      #{@requires.map{|p|"params.require #{p}"}.join(';')}
      render json: { status: 'ok', data: #{@model_name}.#{@method_name}(#{@parameters.join(', ')}) }
    rescue Exception => e
      render json: { status: 'error', msg: e.to_s }
    end
  -
end

Private Instance Methods

init() click to toggle source
# File lib/appbase/controllers/app_base_controller.rb, line 167
def init
  init_parameters do |parameters, need_params|
    @requires = parameters.map{|p|":#{p[1]}"}
    @parameters = @auth ? ['current_user'] : []
    @requires.each { |p| @parameters << "params[#{p}]" }
    if need_params
      @parameters.push "params.except(:action, :controller#{@requires.count > 0 ? ", #{@requires.join(', ')}" : ""})"
    end
  end
end
init_parameters() { |parameters, need_params| ... } click to toggle source
# File lib/appbase/controllers/app_base_controller.rb, line 190
def init_parameters
  parameters = @bound_method.parameters
  pre_init_parameters(parameters)
  
  need_params = false
  if parameters.count > 0 && parameters.last[0] == :opt
    need_params = true
    parameters = parameters[(@auth ? 1 : 0)..-2]
  else
    parameters = parameters[(@auth ? 1 : 0)..-1]
  end
  
  post_init_parameters(parameters)
  yield parameters, need_params
end
post_init_parameters(parameters) click to toggle source
# File lib/appbase/controllers/app_base_controller.rb, line 184
def post_init_parameters(parameters)
  if parameters.find{|p|p[0]!=:req}
    raise "Error exposing #{@model_name}.#{@method_name} to appbase engine, appbase does not support rest/optional parameters, use options instead!"
  end
end
pre_init_parameters(parameters) click to toggle source
# File lib/appbase/controllers/app_base_controller.rb, line 178
def pre_init_parameters(parameters)
  if @auth && (parameters.count == 0 || parameters[0][0] != :req)
    raise "#{@model_name}.#{@method_name} does not accept current user identity as the first parameter. Using `expose_to_appbase :method_name, auth: false` to expose #{@model_name}.#{@method_name} to appbase without user authentication."
  end
end