Class: Restcomm::REST::ListResource

Inherits:
Object
  • Object
show all
Includes:
Utils
Defined in:
lib/restcomm-ruby/rest/list_resource.rb

Instance Method Summary collapse

Methods included from Utils

#derestify, #restify

Constructor Details

#initialize(path, client) ⇒ ListResource

Returns a new instance of ListResource.



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
# File 'lib/restcomm-ruby/rest/list_resource.rb', line 8

def initialize(path, client)
  custom_names = {
    'Activities' => 'Activity',
    'Media' => 'MediaInstance',
    'IpAddresses' => 'IpAddress',
    'Feedback' => 'FeedbackInstance',
    'Addresses' => 'Address'
  }
  @path, @client = path, client

  resource_name = self.class.name.split('::')[-1]

  instance_name = custom_names.fetch(resource_name, resource_name.chop)


  # The next line grabs the enclosing module. Necessary for resources
  # contained in their own submodule like /SMS/Messages
  parent_module = self.class.to_s.split('::')[-2]
  full_module_path = if parent_module == "REST"
    Restcomm::REST
  else
    Restcomm::REST.const_get(parent_module)
  end

  @instance_class = full_module_path.const_get(instance_name)
	
  @list_key, @instance_id_key = derestify(resource_name), 'sid'

end

Instance Method Details

#create(params = {}) ⇒ Object

Return a newly created resource. Some params may be required. Consult the Restcomm REST API documentation related to the kind of resource you are attempting to create for details. Calling this method makes an HTTP POST request to @path with the given params



130
131
132
133
134
135
136
# File 'lib/restcomm-ruby/rest/list_resource.rb', line 130

def create(params={})
  raise "Can't create a resource without a REST Client" unless @client
  response = @client.post @path, params
  @instance_class.new "#{@path}/#{response[@instance_id_key]}", @client,

	response
end

#get(sid) ⇒ Object Also known as: find

Return an empty instance resource object with the proper path. Note that this will never raise a Restcomm::REST::RequestError on 404 since no HTTP request is made. The HTTP request is made when attempting to access an attribute of the returned instance resource object, such as its #date_created or #voice_url attributes.



120
121
122
# File 'lib/restcomm-ruby/rest/list_resource.rb', line 120

def get(sid)
  @instance_class.new "#{@path}/#{sid}", @client
end

#inspectObject

:nodoc:



38
39
40
# File 'lib/restcomm-ruby/rest/list_resource.rb', line 38

def inspect # :nodoc:
  "<#{self.class} @path=#{@path}>"
end

#list(params = {}, full_path = false) ⇒ Object

Grab a list of this kind of resource and return it as an array. The array includes a special attribute named total which will return the total number of items in the list on Restcomm’s server. This may differ from the size and length attributes of the returned array since by default Restcomm will only return 50 resources, and the maximum number of resources you can request is 1000.

The optional params hash allows you to filter the list returned. The filters for each list resource type are defined by Restcomm.



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
# File 'lib/restcomm-ruby/rest/list_resource.rb', line 52

def list(params={}, full_path=false)
  raise "Can't get a resource list without a REST Client" unless @client


  response = @client.get( @path, params, full_path)

		if @list_key == "calls" 
		resources = response[@list_key]
		elsif @list_key == "recordings" 	 
			resources = response

		else
			resources = response
		end	

	#raise "********#{@instance_class}*******#{resources[0]["FriendlyName"]}***************"
	path = full_path ? @path.split('.')[0] : @path
	
	if @list_key == "available_phone_numbers"
		resources = response["RestcommResponse"]["AvailablePhoneNumbers"]["AvailablePhoneNumber"]
		resource_list = resources.map do |resource| 
		@instance_class.new("#{path}/#{resource[@instance_id_key]}", @client, resource)
		end
	else	
		resource_list = resources.map do |resource| 
		@instance_class.new("#{path}/#{resource[@instance_id_key]}", @client, resource)
		end
	end

  # set the +total+ and +next_page+ properties on the array
  client, list_class = @client, self.class
  resource_list.instance_eval do
    eigenclass = class << self; self; end
    eigenclass.send :define_method, :total, &lambda { response['total'] }
    eigenclass.send :define_method, :next_page, &lambda {
      if response['next_page_uri']
        list_class.new(response['next_page_uri'], client).list({}, true)
      else
        []
      end
    }
  end

  resource_list


end

#totalObject

Ask Restcomm for the total number of items in the list. Calling this method makes an HTTP GET request to @path with a page size parameter of 1 to minimize data over the wire while still obtaining the total. Don’t use this if you are planning to call #list anyway, since the array returned from #list will have a total attribute as well.



109
110
111
112
# File 'lib/restcomm-ruby/rest/list_resource.rb', line 109

def total
  raise "Can't get a resource total without a REST Client" unless @client
  @client.get(@path, page_size: 1)['total']
end