Skip to content
  •  
  •  
  •  
100 changes: 100 additions & 0 deletions lib/twilio-ruby/framework/rest/page_metadata.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,100 @@
# frozen_string_literal: true

module Twilio
module REST
# Page Base Class
class PageMetadata
META_KEYS = [
'end',
'first_page_uri',
'next_page_uri',
'last_page_uri',
'page',
'page_size',
'previous_page_uri',
'total',
'num_pages',
'start',
'uri'
].freeze

def initialize(version, response)
payload = process_response(response)

@version = version
@payload = payload
@solution = {}
@records = payload
end

def process_response(response)
if response.status_code != 200
raise Twilio::REST::RestError.new('Unable to fetch page', response)
end

response
end

def get_key(payload)
return 'Resources' if payload['Resources']
if payload['meta'] && payload['meta']['key']
return payload['meta']['key']
else
keys = payload.keys
key = keys - META_KEYS
return key.first if key.size == 1
end

raise Twilio::REST::TwilioError, 'Page Records can not be deserialized'
end

def previous_page_url
if @payload['meta'] && @payload['meta']['previous_page_url']
return @version.domain.absolute_url(URI.parse(@payload['meta']['previous_page_url']).request_uri)
elsif @payload['previous_page_uri']
return @version.domain.absolute_url(@payload['previous_page_uri'])
end

nil
end

def next_page_url
if @payload.body['meta'] && @payload.body['meta']['next_page_url']
return @version.domain.absolute_url(URI.parse(@payload.body['meta']['next_page_url']).request_uri)
elsif @payload.body['next_page_uri']
return @version.domain.absolute_url(@payload.body['next_page_uri'])
end

nil
end

def get_instance(payload)
raise Twilio::REST::TwilioError, 'Page.get_instance() must be implemented in the derived class'
end

def previous_page
@version.domain.request('GET', previous_page_url)
end

def next_page
return nil unless next_page_url

@version.domain.request('GET', next_page_url)
end

def page_size
if @payload.body['meta'] && @payload.body['meta']['page_size']
return @payload.body['meta']['page_size']
elsif @payload.body['page_size']
return @payload.body['page_size']
end

0
end

def to_s
'#<PageMetadata>'
end
end
end
end
32 changes: 32 additions & 0 deletions lib/twilio-ruby/framework/rest/resource.rb
Original file line number Diff line number Diff line change
Expand Up @@ -19,5 +19,37 @@ def initialize(version)
@version = version
end
end

class InstanceResourceMetadata
def initialize(payload, headers, status_code)
@payload = payload
@headers = headers
@status_code = status_code
end

def headers
@headers
end

def status_code
@status_code
end
end

class InstanceListResource
def initialize(version, headers, status_code)
@version = version
@headers = headers
@status_code = status_code
end

def headers
@headers
end

def status_code
@status_code
end
end
end
end
65 changes: 65 additions & 0 deletions lib/twilio-ruby/framework/rest/version.rb
Original file line number Diff line number Diff line change
Expand Up @@ -166,6 +166,71 @@ def create(method, uri, params: {}, data: {}, headers: {}, auth: nil, timeout: n

response.body
end

def create_with_metadata(method, uri, params: {}, data: {}, headers: {}, auth: nil, timeout: nil)
response = request(method, uri, params, data, headers, auth, timeout)

if response.status_code < 200 || response.status_code >= 300
raise exception(response, 'Unable to create record')
end

response
end

def fetch_with_metadata(method, uri, params: {}, data: {}, headers: {}, auth: nil, timeout: nil)
response = request(
method,
uri,
params,
data,
headers,
auth,
timeout
)

# Note that 3XX response codes are allowed for fetches.
if response.status_code < 200 || response.status_code >= 400
raise exception(response, 'Unable to fetch record')
end

response
end

def update_with_metadata(method, uri, params: {}, data: {}, headers: {}, auth: nil, timeout: nil)
response = request(
method,
uri,
params,
data,
headers,
auth,
timeout
)

if response.status_code < 200 || response.status_code >= 300
raise exception(response, 'Unable to update record')
end

response
end

def delete_with_metadata(method, uri, params: {}, data: {}, headers: {}, auth: nil, timeout: nil)
response = request(
method,
uri,
params,
data,
headers,
auth,
timeout
)

if response.status_code < 200 || response.status_code >= 400
raise exception(response, 'Unable to delete record')
end

response
end
end
end
end
111 changes: 111 additions & 0 deletions lib/twilio-ruby/rest/accounts/v1/auth_token_promotion.rb
Original file line number Diff line number Diff line change
Expand Up @@ -72,6 +72,30 @@ def update
)
end

##
# Update the AuthTokenPromotionInstanceMetadata
# @return [AuthTokenPromotionInstance] Updated AuthTokenPromotionInstance
def update_with_metadata

headers = Twilio::Values.of({'Content-Type' => 'application/x-www-form-urlencoded', })





response = @version.update_with_metadata('POST', @uri, headers: headers)
authTokenPromotion_instance = AuthTokenPromotionInstance.new(
@version,
response.body,
)
AuthTokenPromotionInstanceMetadata.new(
@version,
authTokenPromotion_instance,
response.headers,
response.status_code
)
end


##
# Provide a user friendly representation
Expand All @@ -88,6 +112,45 @@ def inspect
end
end

class AuthTokenPromotionInstanceMetadata < InstanceResourceMetadata
##
# Initializes a new AuthTokenPromotionInstanceMetadata.
# @param [Version] version Version that contains the resource
# @param [}AuthTokenPromotionInstance] auth_token_promotion_instance The instance associated with the metadata.
# @param [Hash] headers Header object with response headers.
# @param [Integer] status_code The HTTP status code of the response.
# @return [AuthTokenPromotionInstanceMetadata] The initialized instance with metadata.
def initialize(version, auth_token_promotion_instance, headers, status_code)
super(version, headers, status_code)
@auth_token_promotion_instance = auth_token_promotion_instance
end

def auth_token_promotion
@auth_token_promotion_instance
end

def to_s
"<Twilio.Api.V2010.AuthTokenPromotionInstanceMetadata status=#{@status_code}>"
end
end

class AuthTokenPromotionListResponse < InstanceListResource
# @param [Array<AuthTokenPromotionInstance>] instance
# @param [Hash{String => Object}] headers
# @param [Integer] status_code
def initialize(version, payload, key)
@auth_token_promotion_instance = payload.body[key].map do |data|
AuthTokenPromotionInstance.new(version, data)
end
@headers = payload.headers
@status_code = payload.status_code
end

def auth_token_promotion_instance
@instance
end
end

class AuthTokenPromotionPage < Page
##
# Initialize the AuthTokenPromotionPage
Expand Down Expand Up @@ -116,6 +179,54 @@ def to_s
'<Twilio.Accounts.V1.AuthTokenPromotionPage>'
end
end

class AuthTokenPromotionPageMetadata < PageMetadata
attr_reader :auth_token_promotion_page

def initialize(version, response, solution, limit)
super(version, response)
@auth_token_promotion_page = []
@limit = limit
key = get_key(response.body)
number_of_records = response.body[key].size
while( limit != :unset && number_of_records <= limit )
@auth_token_promotion_page << AuthTokenPromotionListResponse.new(version, @payload, key)
@payload = self.next_page
break unless @payload
number_of_records += page_size
end
# Path Solution
@solution = solution
end

def each
@auth_token_promotion_page.each do |record|
yield record
end
end

def to_s
'<Twilio::REST::Accounts::V1PageMetadata>';
end
end
class AuthTokenPromotionListResponse < InstanceListResource

# @param [Array<AuthTokenPromotionInstance>] instance
# @param [Hash{String => Object}] headers
# @param [Integer] status_code
def initialize(version, payload, key)
@auth_token_promotion = payload.body[key].map do |data|
AuthTokenPromotionInstance.new(version, data)
end
@headers = payload.headers
@status_code = payload.status_code
end

def auth_token_promotion
@auth_token_promotion
end
end

class AuthTokenPromotionInstance < InstanceResource
##
# Initialize the AuthTokenPromotionInstance
Expand Down
Loading
Loading