Module: BigbluebuttonRails::APIControllerMethods

Included in:
Bigbluebutton::Api::RoomsController
Defined in:
lib/bigbluebutton_rails/api_controller_methods.rb

Class Method Summary collapse

Class Method Details

.included(base) ⇒ Object



4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
# 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