lib/twilio-ruby/rest/instance_resource.rb in twilio-ruby-3.2.0 vs lib/twilio-ruby/rest/instance_resource.rb in twilio-ruby-3.3.0

- old
+ new

@@ -1,33 +1,72 @@ module Twilio module REST + ## + # A class to wrap an instance resource (like a call or application) within + # the Twilio API. All other instance resource classes within this library + # inherit from this class. You shouldn't need to instantiate this class + # directly. But reviewing the available methods is informative since they + # are rarely overridden in the inheriting class. class InstanceResource include Utils + ## + # Instantiate a new instance resource object. You must pass the +uri+ of + # the instance (e.g. /2010-04-01/Accounts/AC123/Calls/CA456) as well as a + # +client+ object that responds to #get #post and #delete. This client + # is meant to be an instance of Twilio::REST::Client but could just as + # well be a mock object if you want to test the interface. The optional + # +params+ hash will be converted into attributes on the instantiated + # object. def initialize(uri, client, params = {}) @uri, @client = uri, client set_up_properties_from params end + def inspect # :nodoc: + "<#{self.class} @uri=#{@uri}>" + end + + ## + # Update the properties of this instance resource using the key/value + # pairs in +params+. This makes an HTTP POST request to <tt>@uri</tt> + # to handle the update. For example, to update the +VoiceUrl+ of a Twilio + # Application you could write: + # + # @app.update :voice_url => 'http://my.other.app.com/handle_voice' + # + # After returning, the object will contain the most recent state of the + # instance resource, including the newly updated properties. def update(params = {}) raise "Can't update a resource without a REST Client" unless @client response = @client.post @uri, params set_up_properties_from response self end + ## + # Refresh the attributes of this instance resource object by fetching it + # from Twilio. Calling this makes an HTTP GET request to <tt>@uri</tt>. def refresh raise "Can't refresh a resource without a REST Client" unless @client @updated = false response = @client.get @uri set_up_properties_from response + self end + ## + # Delete an instance resource from Twilio. This operation isn't always + # supported. For instance, you can't delete an SMS. Calling this method + # makes an HTTP DELETE request to <tt>@uri</tt>. def delete raise "Can't delete a resource without a REST Client" unless @client @client.delete @uri end + ## + # Lazily load attributes of the instance resource by waiting to fetch it + # until an attempt is made to access an unknown attribute. def method_missing(method, *args) super if @updated response = @client.get @uri set_up_properties_from response self.send method, *args