Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions .github/workflows/deploy.yml
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,8 @@ jobs:
BW_ACCOUNT_ID: ${{ secrets.BW_ACCOUNT_ID }}
BW_USERNAME: ${{ secrets.BW_USERNAME }}
BW_PASSWORD: ${{ secrets.BW_PASSWORD }}
BW_CLIENT_ID: ${{ secrets.BW_CLIENT_ID }}
BW_CLIENT_SECRET: ${{ secrets.BW_CLIENT_SECRET }}
BW_USERNAME_FORBIDDEN: ${{ secrets.BW_USERNAME_FORBIDDEN }}
BW_PASSWORD_FORBIDDEN: ${{ secrets.BW_PASSWORD_FORBIDDEN }}
BW_VOICE_APPLICATION_ID: ${{ secrets.BW_VOICE_APPLICATION_ID }}
Expand Down
2 changes: 2 additions & 0 deletions .github/workflows/test-pr.yml
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,8 @@ env:
BW_ACCOUNT_ID: ${{ secrets.BW_ACCOUNT_ID }}
BW_USERNAME: ${{ secrets.BW_USERNAME }}
BW_PASSWORD: ${{ secrets.BW_PASSWORD }}
BW_CLIENT_ID: ${{ secrets.BW_CLIENT_ID }}
BW_CLIENT_SECRET: ${{ secrets.BW_CLIENT_SECRET }}
BW_USERNAME_FORBIDDEN: ${{ secrets.BW_USERNAME_FORBIDDEN }}
BW_PASSWORD_FORBIDDEN: ${{ secrets.BW_PASSWORD_FORBIDDEN }}
BW_VOICE_APPLICATION_ID: ${{ secrets.BW_VOICE_APPLICATION_ID }}
Expand Down
2 changes: 2 additions & 0 deletions .github/workflows/test-smoke.yml
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,8 @@ concurrency:
env:
BW_USERNAME: ${{ secrets.BW_USERNAME }}
BW_PASSWORD: ${{ secrets.BW_PASSWORD }}
BW_CLIENT_ID: ${{ secrets.BW_CLIENT_ID }}
BW_CLIENT_SECRET: ${{ secrets.BW_CLIENT_SECRET }}
BW_USERNAME_FORBIDDEN: ${{ secrets.BW_USERNAME_FORBIDDEN }}
BW_PASSWORD_FORBIDDEN: ${{ secrets.BW_PASSWORD_FORBIDDEN }}
USER_NUMBER: ${{ secrets.USER_NUMBER }}
Expand Down
1 change: 1 addition & 0 deletions .openapi-generator/FILES
Original file line number Diff line number Diff line change
Expand Up @@ -204,6 +204,7 @@ lib/bandwidth-sdk/api/toll_free_verification_api.rb
lib/bandwidth-sdk/api/transcriptions_api.rb
lib/bandwidth-sdk/api_client.rb
lib/bandwidth-sdk/api_error.rb
lib/bandwidth-sdk/api_model_base.rb
lib/bandwidth-sdk/configuration.rb
lib/bandwidth-sdk/models/account_statistics.rb
lib/bandwidth-sdk/models/additional_denial_reason.rb
Expand Down
2 changes: 1 addition & 1 deletion .openapi-generator/VERSION
Original file line number Diff line number Diff line change
@@ -1 +1 @@
7.8.0
7.17.0
18 changes: 18 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -85,6 +85,16 @@ Bandwidth.configure do |config|
config.password = 'YOUR_PASSWORD'
# Configure faraday connection
config.configure_faraday_connection { |connection| 'YOUR CONNECTION CONFIG PROC' }

# Configure OAuth2 access token for authorization: OAuth2
config.access_token = 'YOUR_ACCESS TOKEN'
# Or use your client ID and client secret to obtain an access token
config.client_id = 'YOUR_CLIENT_ID'
config.client_secret = 'YOUR_CLIENT_SECRET'
# Configure a proc to get access tokens in lieu of the static access_token configuration
config.access_token_getter = -> { 'YOUR TOKEN GETTER PROC' }
# Configure faraday connection
config.configure_faraday_connection { |connection| 'YOUR CONNECTION CONFIG PROC' }
end

api_instance = Bandwidth::CallsApi.new
Expand Down Expand Up @@ -345,3 +355,11 @@ Authentication schemes defined for the API:

- **Type**: HTTP basic authentication

### OAuth2


- **Type**: OAuth
- **Flow**: application
- **Authorization URL**:
- **Scopes**: N/A

3 changes: 1 addition & 2 deletions bandwidth-sdk.gemspec
Original file line number Diff line number Diff line change
Expand Up @@ -8,8 +8,7 @@
The version of the OpenAPI document: 1.0.0
Contact: letstalk@bandwidth.com
Generated by: https://openapi-generator.tech
Generator version: 7.8.0

Generator version: 7.17.0
=end

$:.push File.expand_path('../lib', __FILE__)
Expand Down
7 changes: 7 additions & 0 deletions bandwidth.yml
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ info:
version: 1.0.0
security:
- Basic: []
- OAuth2: []
tags:
- name: Messages
- name: Media
Expand Down Expand Up @@ -8427,6 +8428,12 @@ components:


- Example: `Authorization: Basic ZGVtbZpwQDU1dzByZA==`
OAuth2:
type: oauth2
flows:
clientCredentials:
tokenUrl: https://api.bandwidth.com/api/v1/oauth2/token
scopes: {}
callbacks:
inboundCallback:
'{inboundCallbackUrl}':
Expand Down
5 changes: 4 additions & 1 deletion custom_templates/README.mustache
Original file line number Diff line number Diff line change
Expand Up @@ -99,7 +99,10 @@ require '{{{gemName}}}'
# Uncomment the following line to set a prefix for the API key, e.g. 'Bearer' (defaults to nil)
# config.api_key_prefix['{{{name}}}'] = 'Bearer'{{/isApiKey}}{{#isOAuth}}
# Configure OAuth2 access token for authorization: {{{name}}}
config.access_token = 'YOUR ACCESS TOKEN'
config.access_token = 'YOUR_ACCESS TOKEN'
# Or use your client ID and client secret to obtain an access token
config.client_id = 'YOUR_CLIENT_ID'
config.client_secret = 'YOUR_CLIENT_SECRET'
# Configure a proc to get access tokens in lieu of the static access_token configuration
config.access_token_getter = -> { 'YOUR TOKEN GETTER PROC' } {{/isOAuth}}
{{#isFaraday}}
Expand Down
254 changes: 254 additions & 0 deletions custom_templates/api_client.mustache
Original file line number Diff line number Diff line change
@@ -0,0 +1,254 @@
=begin
{{> api_info}}

=end

require 'date'
require 'json'
require 'logger'
require 'tempfile'
require 'time'
{{#isTyphoeus}}
require 'typhoeus'
{{/isTyphoeus}}
{{#isFaraday}}
require 'faraday'
require 'faraday/multipart' if Gem::Version.new(Faraday::VERSION) >= Gem::Version.new('2.0')
require 'marcel'
{{/isFaraday}}
{{#isHttpx}}
require 'httpx'
require 'net/http/status'
{{/isHttpx}}


module {{moduleName}}
class ApiClient
# The Configuration object holding settings to be used in the API client.
attr_accessor :config

# Defines the headers to be used in HTTP requests of all API calls by default.
#
# @return [Hash]
attr_accessor :default_headers

# Initializes the ApiClient
# @option config [Configuration] Configuration for initializing the object, default to Configuration.default
def initialize(config = Configuration.default)
@config = config
@user_agent = "{{{httpUserAgent}}}{{^httpUserAgent}}OpenAPI-Generator/#{VERSION}/ruby{{/httpUserAgent}}"
@default_headers = {
'Content-Type' => 'application/json',
'User-Agent' => @user_agent
}
end

def self.default
@@default ||= ApiClient.new
end

{{#isTyphoeus}}
{{> api_client_typhoeus_partial}}

{{/isTyphoeus}}
{{#isFaraday}}
{{> api_client_faraday_partial}}

{{/isFaraday}}
{{#isHttpx}}
{{> api_client_httpx_partial}}

{{/isHttpx}}
# Check if the given MIME is a JSON MIME.
# JSON MIME examples:
# application/json
# application/json; charset=UTF8
# APPLICATION/JSON
# */*
# @param [String] mime MIME
# @return [Boolean] True if the MIME is application/json
def json_mime?(mime)
(mime == '*/*') || !(mime =~ /^Application\/.*json(?!p)(;.*)?/i).nil?
end

# Deserialize the response to the given return type.
#
# @param [Response] response HTTP response
# @param [String] return_type some examples: "User", "Array<User>", "Hash<String, Integer>"
def deserialize(response, return_type)
body = response.body
return nil if body.nil? || body.empty?

# return response body directly for String return type
return body.to_s if return_type == 'String'

# ensuring a default content type
content_type = response.headers['Content-Type'] || 'application/json'

fail "Content-Type is not supported: #{content_type}" unless json_mime?(content_type)

begin
data = JSON.parse("[#{body}]", :symbolize_names => true)[0]
rescue JSON::ParserError => e
if %w(String Date Time).include?(return_type)
data = body
else
raise e
end
end

convert_to_type data, return_type
end

# Convert data to the given return type.
# @param [Object] data Data to be converted
# @param [String] return_type Return type
# @return [Mixed] Data in a particular type
def convert_to_type(data, return_type)
return nil if data.nil?
case return_type
when 'String'
data.to_s
when 'Integer'
data.to_i
when 'Float'
data.to_f
when 'Boolean'
data == true
when 'Time'
# parse date time (expecting ISO 8601 format)
Time.parse data
when 'Date'
# parse date time (expecting ISO 8601 format)
Date.parse data
when 'Object'
# generic object (usually a Hash), return directly
data
when /\AArray<(.+)>\z/
# e.g. Array<Pet>
sub_type = $1
data.map { |item| convert_to_type(item, sub_type) }
when /\AHash\<String, (.+)\>\z/
# e.g. Hash<String, Integer>
sub_type = $1
{}.tap do |hash|
data.each { |k, v| hash[k] = convert_to_type(v, sub_type) }
end
else
# models (e.g. Pet) or oneOf/anyOf
klass = {{moduleName}}.const_get(return_type)
if klass.respond_to?(:openapi_one_of) || klass.respond_to?(:openapi_any_of)
klass.build(data)
else
klass.build_from_hash(data)
end
end
end

# Sanitize filename by removing path.
# e.g. ../../sun.gif becomes sun.gif
#
# @param [String] filename the filename to be sanitized
# @return [String] the sanitized filename
def sanitize_filename(filename)
filename.split(/[\/\\]/).last
end

def build_request_url(path, opts = {})
# Add leading and trailing slashes to path
path = "/#{path}".gsub(/\/+/, '/')
@config.base_url(opts[:operation]) + path
end

# Update header and query params based on authentication settings.
#
# @param [Hash] header_params Header parameters
# @param [Hash] query_params Query parameters
# @param [String] auth_names Authentication scheme name
def update_params_for_auth!(header_params, query_params, auth_names)
Array(auth_names).each do |auth_name|
auth_setting = @config.auth_settings[auth_name]
next unless auth_setting
case auth_setting[:in]
when 'header' then header_params[auth_setting[:key]] = auth_setting[:value] unless auth_setting[:value].nil?
when 'query' then query_params[auth_setting[:key]] = auth_setting[:value] unless auth_setting[:value].nil?
else fail ArgumentError, 'Authentication token must be in `query` or `header`'
end
end
end

# Sets user agent in HTTP header
#
# @param [String] user_agent User agent (e.g. openapi-generator/ruby/1.0.0)
def user_agent=(user_agent)
@user_agent = user_agent
@default_headers['User-Agent'] = @user_agent
end

# Return Accept header based on an array of accepts provided.
# @param [Array] accepts array for Accept
# @return [String] the Accept header (e.g. application/json)
def select_header_accept(accepts)
return nil if accepts.nil? || accepts.empty?
# use JSON when present, otherwise use all of the provided
json_accept = accepts.find { |s| json_mime?(s) }
json_accept || accepts.join(',')
end

# Return Content-Type header based on an array of content types provided.
# @param [Array] content_types array for Content-Type
# @return [String] the Content-Type header (e.g. application/json)
def select_header_content_type(content_types)
# return nil by default
return if content_types.nil? || content_types.empty?
# use JSON when present, otherwise use the first one
json_content_type = content_types.find { |s| json_mime?(s) }
json_content_type || content_types.first
end

# Convert object (array, hash, object, etc) to JSON string.
# @param [Object] model object to be converted into JSON string
# @return [String] JSON string representation of the object
def object_to_http_body(model)
return model if model.nil? || model.is_a?(String)
local_body = nil
if model.is_a?(Array)
local_body = model.map { |m| object_to_hash(m) }
else
local_body = object_to_hash(model)
end
local_body.to_json
end

# Convert object(non-array) to hash.
# @param [Object] obj object to be converted into JSON string
# @return [String] JSON string representation of the object
def object_to_hash(obj)
if obj.respond_to?(:to_hash)
obj.to_hash
else
obj
end
end

# Build parameter value according to the given collection format.
# @param [String] collection_format one of :csv, :ssv, :tsv, :pipes and :multi
def build_collection_param(param, collection_format)
case collection_format
when :csv
param.join(',')
when :ssv
param.join(' ')
when :tsv
param.join("\t")
when :pipes
param.join('|')
when :multi
# return the array directly as typhoeus will handle it as expected
param
else
fail "unknown collection format: #{collection_format.inspect}"
end
end
end
end
Loading