class AppBaseController

Public Class Methods

add_create_stub(model) click to toggle source
# File lib/appbase/controllers/app_base_controller.rb, line 55
def add_create_stub(model)
  add_create_or_update_stub :create, model, %-
      obj = #{model.name}.new(params.except(:action, :controller, :id).permit(#{permits(model, true)}))
  -
end
add_delete_stub(model) click to toggle source
# File lib/appbase/controllers/app_base_controller.rb, line 69
def add_delete_stub(model)
  m = model.name
  self.class_eval %-
    def delete_#{AppBase.underscore m}
      obj = #{m}.find(params[:id])
      if obj.nil?
        return render json: { status: 'error', msg: 'not_found' }
      end
      if !#{m}.allow_delete?(current_user, obj)
        render json: { status: "error", msg: "unauthorized" }
      else
        obj.delete
        render json: { status: 'ok' }
      end
    rescue Exception => e
      render json: { status: 'error', msg: e.to_s }
    end
  -
end
add_query_stub(model) click to toggle source
# File lib/appbase/controllers/app_base_controller.rb, line 89
def add_query_stub(model)
  m = model.name
  self.class_eval %-
    def query_#{AppBase.underscore m}
      query = #{m}.accessible_by(current_user)
      params.except(:action, :controller, :p, :ps).each { |k, v|
        op = 'eq'
        k = k.to_s
        if k.index('.') && k.split('.').count == 2
          k, op = k.split('.')
        end
        k = k.to_sym
        operators = #{m}.appbase_queryable_operators[k]
        unless #{m}.appbase_queryable_columns.index(k).nil?
          case op
          when 'eq'
            query = query.where "\#{k} = ?", v if operators.nil? || !operators.index(:equal).nil?
          when 'lt'
            query = query.where "\#{k} < ?", v if operators.nil? || !operators.index(:compare).nil?
          when 'le'
            query = query.where "\#{k} <= ?", v if operators.nil? || !operators.index(:compare).nil?
          when 'gt'
            query = query.where "\#{k} > ?", v if operators.nil? || !operators.index(:compare).nil?
          when 'ge'
            query = query.where "\#{k} >= ?", v if operators.nil? || !operators.index(:compare).nil?
          when 'n'
            query = query.where "\#{k} IS NULL" if operators.nil? || !operators.index(:equal).nil?
          when 'nn'
            query = query.where "\#{k} IS NOT NULL" if operators.nil? || !operators.index(:equal).nil?
          when 'in'
            if operators.nil? || !operators.index(:in).nil?
              values = JSON.parse v
              query = query.where "\#{k} IN (?)", values
            end
          when 'nin'
            if operators.nil? || !operators.index(:in).nil?
              values = JSON.parse v
              query = query.where "\#{k} NOT IN (?)", values
            end
          else
          end
        end
      }
      page_size = [1, (params[:ps]||20).to_i].max
      start = [0, (params[:p]||1).to_i.pred].max * page_size
      render json: { status: 'ok', data: query.offset(start).limit(page_size) }
    rescue Exception => e
      render json: { status: 'error', msg: e.to_s }
    end
  -
end
add_rpc_method_stub(bound_method, auth=false) click to toggle source
# File lib/appbase/controllers/app_base_controller.rb, line 141
def add_rpc_method_stub(bound_method, auth=false)
  RpcMethodStubHelper.new(bound_method, auth).add_stub(self)
end
add_update_stub(model) click to toggle source
# File lib/appbase/controllers/app_base_controller.rb, line 61
def add_update_stub(model)
  add_create_or_update_stub :update, model, %-
      obj = #{model.name}.find(params[:id])
      raise 'not_found' if obj.nil?
      obj.update_attributes(params.except(:action, :controller, :id).permit(#{permits(model, true)}))
  -
end
define_useridentity(user_identity, token_store, token_key_user, token_key_session) click to toggle source
# File lib/appbase/controllers/app_base_controller.rb, line 13
def define_useridentity(user_identity, token_store, token_key_user, token_key_session)
  self.class_eval %-
    def current_user(options={})
      if #{token_store}[:#{token_key_user}].nil? || #{token_store}[:#{token_key_session}].nil?
        return options[:default] if options.has_key? :default
        raise "unauthenticated"
      end
      user = #{user_identity}.authenticate_by_token(#{token_store}[:#{token_key_user}], #{token_store}[:#{token_key_session}])
      if user.nil?
        return options[:default] if options.has_key? :default
        raise "unauthenticated"
      end
      user
    end
  -
end
permits(model, arg_str=false) click to toggle source
# File lib/appbase/controllers/app_base_controller.rb, line 30
def permits(model, arg_str=false)
  if arg_str
    "[#{model.columns.map { |item| ":" + item.name }.join(", ")}]"
  else
    model.columns.map { |item| item.name.to_sym }
  end
end

Private Class Methods

add_create_or_update_stub(op, model, prepare) click to toggle source
# File lib/appbase/controllers/app_base_controller.rb, line 38
def add_create_or_update_stub(op, model, prepare)
  m = model.name
  self.class_eval %-
    def #{op}_#{AppBase.underscore m}
      #{prepare}
      raise "unauthorized" if !#{m}.allow_#{op}?(current_user, obj)
      obj.save!
      rs = { status: 'ok' }
      #{ 'rs[:id] = obj.id' if op == :create }
      render json: rs
    rescue Exception => e
      render json: { status: 'error', msg: e.to_s }
    end
  -
end

Public Instance Methods

current_user() click to toggle source
# File lib/appbase/controllers/app_base_controller.rb, line 7
def current_user
  nil
end
version() click to toggle source
# File lib/appbase/controllers/app_base_controller.rb, line 3
def version
  render json: AppBase::VERSION
end