module BigbluebuttonRails::APIControllerMethods

Public Class Methods

included(base) click to toggle source
# File lib/bigbluebutton_rails/api_controller_methods.rb, line 4
def self.included(base)
  base.class_eval do

    def map_sort(param, default, allowed=[])
      return default if param.blank? || param.empty?

      param.split(',').inject('') do |memo, obj|
        if obj[0] == '-'
          attr = obj.gsub(/^-/, '')
          order = 'DESC'
        else
          attr = obj
          order = 'ASC'
        end
        if allowed.blank? || allowed.include?(attr)
          memo = "#{memo}," unless memo.blank?
          memo = "#{memo} #{attr} #{order}"
        else
          memo
        end
      end
    end

    def validate_pagination
      param = params[:page]
      if param
        if param[:size]
          size = Integer(param[:size]) rescue nil
          return error_invalid_pagination if size.nil? || size < 1
        end
        if param[:number]
          page = Integer(param[:number]) rescue nil
          return error_invalid_pagination if page.nil? || page < 1
        end
      end
    end

    def map_pagination(param, default)
      limit = default
      if param && param[:size]
        limit = Integer(param[:size]) rescue nil
      end
      limit = default if !limit || limit < 1

      offset = 0
      page = 1
      if param && param[:number]
        page = Integer(param[:number]) rescue nil
        page ||= 1
        offset = (page-1)*limit
        offset = 0 if offset < 0
      end

      [limit, offset, page]
    end

    def map_pagination_links(current)
      original = request.original_url

      uri = URI.parse(original)
      query = Rack::Utils.parse_query(uri.query)
      uri.query = Rack::Utils.build_query(query) # just to encode the params

      links = { self: uri.to_s }

      if current - 1 > 0
        query["page[number]"] = current - 1
        uri.query = Rack::Utils.build_query(query)
        links.merge!({ prev: uri.to_s })
      end

      query["page[number]"] = current + 1
      uri.query = Rack::Utils.build_query(query)
      links.merge!({ next: uri.to_s })

      query["page[number]"] = 1
      uri.query = Rack::Utils.build_query(query)
      links.merge!({ first: uri.to_s })

      links
    end

    def map_search(param)
      if param && param[:terms]
        param[:terms].split(',').map(&:strip)
      end
    end

    def error_room_not_found
      msg = t('bigbluebutton_rails.api.errors.room_not_found.msg')
      title = t('bigbluebutton_rails.api.errors.room_not_found.title')
      @errors = [BigbluebuttonRails::APIError.new(msg, 404, title)]
      render 'bigbluebutton/api/error'
    end

    def error_room_not_running
      msg = t('bigbluebutton_rails.api.errors.room_not_running.msg')
      title = t('bigbluebutton_rails.api.errors.room_not_running.title')
      @errors = [BigbluebuttonRails::APIError.new(msg, 400, title)]
      render 'bigbluebutton/api/error'
    end

    def error_missing_params
      msg = t('bigbluebutton_rails.api.errors.missing_params.msg')
      title = t('bigbluebutton_rails.api.errors.missing_params.title')
      @errors = [BigbluebuttonRails::APIError.new(msg, 400, title)]
      render 'bigbluebutton/api/error'
    end

    def error_forbidden
      msg = t('bigbluebutton_rails.api.errors.forbidden.msg')
      title = t('bigbluebutton_rails.api.errors.forbidden.title')
      @errors = [BigbluebuttonRails::APIError.new(msg, 403, title)]
      render 'bigbluebutton/api/error'
    end

    def error_invalid_key
      msg = t('bigbluebutton_rails.api.errors.invalid_key.msg')
      title = t('bigbluebutton_rails.api.errors.invalid_key.title')
      @errors = [BigbluebuttonRails::APIError.new(msg, 403, title)]
      render 'bigbluebutton/api/error'
    end

    def error_invalid_pagination
      msg = t('bigbluebutton_rails.api.errors.invalid_pagination.msg')
      title = t('bigbluebutton_rails.api.errors.invalid_pagination.title')
      @errors = [BigbluebuttonRails::APIError.new(msg, 400, title)]
      render 'bigbluebutton/api/error'
    end

  end
end

Public Instance Methods

error_forbidden() click to toggle source
# File lib/bigbluebutton_rails/api_controller_methods.rb, line 113
def error_forbidden
  msg = t('bigbluebutton_rails.api.errors.forbidden.msg')
  title = t('bigbluebutton_rails.api.errors.forbidden.title')
  @errors = [BigbluebuttonRails::APIError.new(msg, 403, title)]
  render 'bigbluebutton/api/error'
end
error_invalid_key() click to toggle source
# File lib/bigbluebutton_rails/api_controller_methods.rb, line 120
def error_invalid_key
  msg = t('bigbluebutton_rails.api.errors.invalid_key.msg')
  title = t('bigbluebutton_rails.api.errors.invalid_key.title')
  @errors = [BigbluebuttonRails::APIError.new(msg, 403, title)]
  render 'bigbluebutton/api/error'
end
error_invalid_pagination() click to toggle source
# File lib/bigbluebutton_rails/api_controller_methods.rb, line 127
def error_invalid_pagination
  msg = t('bigbluebutton_rails.api.errors.invalid_pagination.msg')
  title = t('bigbluebutton_rails.api.errors.invalid_pagination.title')
  @errors = [BigbluebuttonRails::APIError.new(msg, 400, title)]
  render 'bigbluebutton/api/error'
end
error_missing_params() click to toggle source
# File lib/bigbluebutton_rails/api_controller_methods.rb, line 106
def error_missing_params
  msg = t('bigbluebutton_rails.api.errors.missing_params.msg')
  title = t('bigbluebutton_rails.api.errors.missing_params.title')
  @errors = [BigbluebuttonRails::APIError.new(msg, 400, title)]
  render 'bigbluebutton/api/error'
end
error_room_not_found() click to toggle source
# File lib/bigbluebutton_rails/api_controller_methods.rb, line 92
def error_room_not_found
  msg = t('bigbluebutton_rails.api.errors.room_not_found.msg')
  title = t('bigbluebutton_rails.api.errors.room_not_found.title')
  @errors = [BigbluebuttonRails::APIError.new(msg, 404, title)]
  render 'bigbluebutton/api/error'
end
error_room_not_running() click to toggle source
# File lib/bigbluebutton_rails/api_controller_methods.rb, line 99
def error_room_not_running
  msg = t('bigbluebutton_rails.api.errors.room_not_running.msg')
  title = t('bigbluebutton_rails.api.errors.room_not_running.title')
  @errors = [BigbluebuttonRails::APIError.new(msg, 400, title)]
  render 'bigbluebutton/api/error'
end
map_pagination(param, default) click to toggle source
# File lib/bigbluebutton_rails/api_controller_methods.rb, line 41
def map_pagination(param, default)
  limit = default
  if param && param[:size]
    limit = Integer(param[:size]) rescue nil
  end
  limit = default if !limit || limit < 1

  offset = 0
  page = 1
  if param && param[:number]
    page = Integer(param[:number]) rescue nil
    page ||= 1
    offset = (page-1)*limit
    offset = 0 if offset < 0
  end

  [limit, offset, page]
end
map_sort(param, default, allowed=[]) click to toggle source
# File lib/bigbluebutton_rails/api_controller_methods.rb, line 7
def map_sort(param, default, allowed=[])
  return default if param.blank? || param.empty?

  param.split(',').inject('') do |memo, obj|
    if obj[0] == '-'
      attr = obj.gsub(/^-/, '')
      order = 'DESC'
    else
      attr = obj
      order = 'ASC'
    end
    if allowed.blank? || allowed.include?(attr)
      memo = "#{memo}," unless memo.blank?
      memo = "#{memo} #{attr} #{order}"
    else
      memo
    end
  end
end
validate_pagination() click to toggle source
# File lib/bigbluebutton_rails/api_controller_methods.rb, line 27
def validate_pagination
  param = params[:page]
  if param
    if param[:size]
      size = Integer(param[:size]) rescue nil
      return error_invalid_pagination if size.nil? || size < 1
    end
    if param[:number]
      page = Integer(param[:number]) rescue nil
      return error_invalid_pagination if page.nil? || page < 1
    end
  end
end