class Vonage::Namespace
Constants
- Delete
- Get
:nocov:
- Post
- Put
Public Class Methods
authentication()
click to toggle source
# File lib/vonage/namespace.rb, line 29 def self.authentication @authentication ||= KeySecretParams end
authentication=(authentication)
click to toggle source
# File lib/vonage/namespace.rb, line 33 def self.authentication=(authentication) @authentication = authentication end
host()
click to toggle source
# File lib/vonage/namespace.rb, line 19 def self.host @host ||= :api_host end
host=(host)
click to toggle source
# File lib/vonage/namespace.rb, line 23 def self.host=(host) raise ArgumentError unless host == :rest_host @host = host end
new(config)
click to toggle source
# File lib/vonage/namespace.rb, line 8 def initialize(config) @config = config @host = self.class.host == :api_host ? @config.api_host : @config.rest_host @http = Net::HTTP.new(@host, Net::HTTP.https_default_port, p_addr = nil) @http.use_ssl = true @config.http.set(@http) unless @config.http.nil? end
request_body()
click to toggle source
# File lib/vonage/namespace.rb, line 37 def self.request_body @request_body ||= FormData end
request_body=(request_body)
click to toggle source
# File lib/vonage/namespace.rb, line 41 def self.request_body=(request_body) @request_body = request_body end
request_headers()
click to toggle source
# File lib/vonage/namespace.rb, line 45 def self.request_headers @request_headers ||= {} end
Protected Instance Methods
build_request(path:, type: Get, params: {})
click to toggle source
# File lib/vonage/namespace.rb, line 57 def build_request(path:, type: Get, params: {}) authentication = self.class.authentication.new(@config) authentication.update(params) uri = URI('https://' + @host + path) unless type.const_get(:REQUEST_HAS_BODY) || params.empty? uri.query = Params.encode(params) end # Set BasicAuth if neeeded authentication.update(uri) # instantiate request request = type.new(uri) # set headers request['User-Agent'] = UserAgent.string(@config.app_name, @config.app_version) self.class.request_headers.each do |key, value| request[key] = value end # Set BearerToken if needed authentication.update(request) # set body self.class.request_body.update(request, params) if type.const_get(:REQUEST_HAS_BODY) request end
collection_name(params)
click to toggle source
# File lib/vonage/namespace.rb, line 166 def collection_name(params) @collection_name ||= case when params.respond_to?('calls') 'calls' when params.respond_to?('users') 'users' when params.respond_to?('legs') 'legs' when params.respond_to?('data') 'data' when params.respond_to?('conversations') 'conversations' when params.respond_to?('applications') 'applications' when params.respond_to?('records') 'records' when params.respond_to?('reports') 'reports' when params.respond_to?('networks') 'networks' when params.respond_to?('countries') 'countries' when params.respond_to?('media') 'media' when params.respond_to?('numbers') 'numbers' when params.respond_to?('events') 'events' else params.entity.attributes.keys[0].to_s end end
iterable_request(path, response: nil, response_class: nil, &block)
click to toggle source
# File lib/vonage/namespace.rb, line 119 def iterable_request(path, response: nil, response_class: nil, &block) json_response = ::JSON.parse(response.body) response = parse(response, response_class) remainder = remaining_count(json_response) while remainder > 0 params = { page_size: json_response['page_size'] } if json_response['record_index'] && json_response['record_index'] == 0 params[:record_index] = json_response['page_size'] elsif json_response['record_index'] && json_response['record_index'] != 0 params[:record_index] = (json_response['record_index'] + json_response['page_size']) end if json_response['total_pages'] params[:page] = json_response['page'] + 1 end request = build_request(path: path, type: Get, params: params) # Make request... paginated_response = make_request!(request) next_response = parse(paginated_response, response_class) json_response = ::JSON.parse(paginated_response.body) remainder = remaining_count(json_response) if response.respond_to?('_embedded') collection_name = collection_name(response['_embedded']) response['_embedded'][collection_name].push(*next_response['_embedded'][collection_name]) else response[collection_name(response)].push(*next_response[collection_name(next_response)]) end end response end
logger()
click to toggle source
# File lib/vonage/namespace.rb, line 216 def logger @config.logger end
make_request!(request, &block)
click to toggle source
# File lib/vonage/namespace.rb, line 87 def make_request!(request, &block) logger.log_request_info(request) response = @http.request(request, &block) logger.log_response_info(response, @host) return if block logger.debug(response.body) if response.body response end
parse(response, response_class)
click to toggle source
# File lib/vonage/namespace.rb, line 199 def parse(response, response_class) case response when Net::HTTPNoContent response_class.new(nil, response) when Net::HTTPSuccess if response['Content-Type'].split(';').first == 'application/json' entity = ::JSON.parse(response.body, object_class: Vonage::Entity) response_class.new(entity, response) else response_class.new(nil, response) end else raise Errors.parse(response) end end
remaining_count(params)
click to toggle source
# File lib/vonage/namespace.rb, line 156 def remaining_count(params) if params.key?('total_pages') params['total_pages'] - params['page'] elsif params.key?('count') params['count'] - (params['record_index'] == 0 ? params['page_size'] : (params['record_index'] + params['page_size'])) else 0 end end
request(path, params: nil, type: Get, response_class: Response, &block)
click to toggle source
# File lib/vonage/namespace.rb, line 101 def request(path, params: nil, type: Get, response_class: Response, &block) auto_advance = !params.nil? && params.key?(:auto_advance) ? params[:auto_advance] : false params = params.tap { |params| params.delete(:auto_advance) } if !params.nil? && params.key?(:auto_advance) request = build_request(path: path, params: params || {}, type: type) response = make_request!(request, &block) if auto_advance iterable_request(path, response: response, response_class: response_class, &block) else return if block parse(response, response_class) end end