Completed
Push — master ( f27404...cc26bf )
by John
01:19
created

Extensions.get_department_members()   B

Complexity

Conditions 4

Size

Total Lines 27

Duplication

Lines 0
Ratio 0 %
Metric Value
cc 4
dl 0
loc 27
rs 8.5806
1
require 'time'
2
require 'uri'
3
4
module RingCentralSdk::Cache
5
  class Extensions
6
7
    attr_accessor :rc_api
8
    attr_reader :extensions_hash
9
    attr_reader :extensions_num2id
10
    attr_reader :last_retrieved
11
12
    def initialize(rc_api)
13
      @rc_api = rc_api
14
      @extensions_hash = {}
15
      @extensions_num2id = {}
16
      @last_retrieved = -1
17
    end
18
19
    def retrieve(url='account/~/extension', params={}, retrieve_all=true)
20
      @last_retrieved = Time.now.to_i
21
      uri = URI.parse(url)
22
      if params.length > 0 
23
        uri.query = URI.encode_www_form(params)
24
      end
25
      res = @rc_api.client.get do |req|
26
        req.url uri.to_s
27
        if retrieve_all
28
          req.params['page'] = 1
29
          req.params['perPage'] = 1000
30
        end
31
      end
32
      res.body['records'].each do |extension|
33
        if extension.has_key?('id') && extension['id']>0
34
          @extensions_hash[extension['id'].to_s] = extension
35
        end
36
      end
37
      if retrieve_all
38
        while res.body.has_key?('navigation') && res.body['navigation'].has_key?('nextPage')
39
          res = rcsdk.client.get do |req|
40
            req.url res.body['navigation']['nextPage']['uri']
41
          end
42
          res.body['records'].each do |record|
43
            if extension.has_key?('id') && extension['id'].length>0
44
              @extensions_hash[extension['id'].to_s] = extension
45
            end
46
          end
47
        end
48
      end
49
      inflate_num2id()
50
      return @extensions_hash
51
    end
52
53
    def retrieve_all()
54
      retrieve('account/~/extension', {}, true)
55
    end
56
57
    def inflate_num2id()
58
      num2id = {}
59
      @extensions_hash.each do |k,v|
60
        if v.has_key?('id') && v['id']>0 &&
61
          v.has_key?('extensionNumber') && v['extensionNumber'].length>0
62
          num2id[v['extensionNumber']] = v['id'].to_s
63
        end
64
      end
65
      @extensions_num2id = num2id
66
      return num2id
67
    end
68
69
    def get_extension_by_id(extension_id)
70
      if !extension_id.is_a?(String)
71
        extension_id = extension_id.to_s
72
      end
73
      if @extensions_hash.has_key?(extension_id)
74
          return @extensions_hash[extension_id]
75
      end
76
      return nil
77
    end
78
79
    def get_extension_by_number(extension_number)
80
      if !extension_number.is_a?(String)
81
        extension_number = extension_number.to_s
82
      end
83
      if @extensions_num2id.has_key?(extension_number)
84
        extension_id = @extensions_num2id[extension_number]
85
        if @extensions_hash.has_key?(extension_id)
86
          return @extensions_hash[extension_id]
87
        end
88
      end
89
      return nil
90
    end
91
92
    def get_department_members(department_id)
93
      if !department_id.is_a?(String)
94
        department_id = department_id.to_s
95
      end
96
      if department_id !~ /^[0-9]+$/
97
        raise 'department_id parameter must be a positive integer'
98
      end
99
100
      members = []
101
102
      res = @rc_api.client.get do |req|
103
        req.url "account/~/department/#{department_id}/members"
104
      end
105
106
      if res.body.has_key?('records')
107
        res.body['records'].each do |extension|
108
          if extension.has_key?('id')
109
            member = get_extension_by_id(extension['id'])
110
            if !member.nil?
111
              members.push member
112
            end
113
          end
114
        end
115
      end
116
117
      return members
118
    end
119
120
  end
121
end