Class: Restcomm::REST::ListResource
- Inherits:
-
Object
- Object
- Restcomm::REST::ListResource
- Includes:
- Utils
- Defined in:
- lib/restcomm-ruby/rest/list_resource.rb
Direct Known Subclasses
Accounts, Addresses, Applications, AuthorizedConnectApps, AvailablePhoneNumbers, Calls, Conferences, ConnectApps, CredentialListMappings, CredentialLists, Credentials, DependentPhoneNumbers, Domains, Feedback, FeedbackSummary, IncomingPhoneNumbers, IpAccessControlListMappings, IpAccessControlLists, IpAddresses, Local, Media, Members, Messages, Mobile, NextGenListResource, Notifications, NumberType::Local, NumberType::Mobile, NumberType::TollFree, OutgoingCallerIds, Participants, Queues, Recordings, Records, SMS::Messages, SMS::ShortCodes, TaskRouter::Events, Tokens, TollFree, Transcriptions, Triggers
Instance Method Summary collapse
-
#create(params = {}) ⇒ Object
Return a newly created resource.
-
#get(sid) ⇒ Object
(also: #find)
Return an empty instance resource object with the proper path.
-
#initialize(path, client) ⇒ ListResource
constructor
A new instance of ListResource.
-
#inspect ⇒ Object
:nodoc:.
-
#list(params = {}, full_path = false) ⇒ Object
Grab a list of this kind of resource and return it as an array.
-
#total ⇒ Object
Ask Restcomm for the total number of items in the list.
Methods included from Utils
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 |
#inspect ⇒ Object
: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 |
#total ⇒ Object
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 |