Class: BandwidthIris::Client
- Inherits:
-
Object
- Object
- BandwidthIris::Client
- Defined in:
- lib/bandwidth-iris/client.rb
Constant Summary collapse
- @@global_options =
{}
Instance Attribute Summary collapse
-
#api_endpoint ⇒ Object
readonly
Returns the value of attribute api_endpoint.
-
#api_version ⇒ Object
readonly
Returns the value of attribute api_version.
Class Method Summary collapse
-
.get_id_from_location_header(location) ⇒ String
Extract id from location header.
-
.global_options ⇒ Object
Return global options.
-
.global_options=(v) ⇒ Object
Set global options.
Instance Method Summary collapse
- #build_xml(data) ⇒ Object
-
#check_response(response) ⇒ Object
Check response object and raise error if status code >= 400.
-
#concat_account_path(path) ⇒ Object
Build url path like /accounts/<account-id>/<path>.
-
#create_connection ⇒ Faraday::Connection
Return new configured connection object.
-
#initialize(account_id = nil, user_name = nil, password = nil, options = nil) ⇒ Client
constructor
A new instance of Client.
-
#make_request(method, path, data = {}) ⇒ Array
Make HTTP request to IRIS API.
-
#make_request_file_download(method, path, data = {}) ⇒ string
Makes an HTTP request for a file download.
-
#make_request_file_upload(method, path, data, content_type) ⇒ Array
Makes an HTTP request for file uploads.
Constructor Details
#initialize(account_id = nil, user_name = nil, password = nil, options = nil) ⇒ Client
Returns a new instance of Client.
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 37 38 39 40 41 42 43 |
# File 'lib/bandwidth-iris/client.rb', line 12 def initialize (account_id = nil, user_name = nil, password = nil, = nil) if user_name == nil && password == nil && == nil if account_id && account_id.is_a?(Hash) = account_id account_id = nil end end = || @@global_options account_id = [:account_id] unless account_id user_name = [:user_name] || [:username] unless user_name password = [:password] unless password [:api_endpoint] = @@global_options[:api_endpoint] unless [:api_endpoint] [:api_version] = @@global_options[:api_version] unless [:api_version] api_endpoint = [:api_endpoint] || "https://dashboard.bandwidth.com" api_version = [:api_version] || "v1.0" @build_path = lambda {|path| "/#{api_version}" + (if path[0] == "/" then path else "/#{path}" end) } @set_adapter = lambda {|faraday| faraday.adapter(Faraday.default_adapter)} @create_connection = lambda{|| Faraday.new(api_endpoint) { |faraday| faraday.request :basic_auth, user_name, password #faraday.response :logger faraday.headers['Accept'] = 'application/xml' faraday.headers['user-agent'] = 'Ruby-Bandwidth-Iris' faraday.use FaradayMiddleware::FollowRedirects @set_adapter.call(faraday) } } @concat_account_path = lambda {|path| "/accounts/#{account_id}" + (if path then (if path[0] == "/" then path else "/#{path}" end) else '' end) } @api_endpoint = api_endpoint @api_version = api_version end |
Instance Attribute Details
#api_endpoint ⇒ Object (readonly)
Returns the value of attribute api_endpoint.
45 46 47 |
# File 'lib/bandwidth-iris/client.rb', line 45 def api_endpoint @api_endpoint end |
#api_version ⇒ Object (readonly)
Returns the value of attribute api_version.
45 46 47 |
# File 'lib/bandwidth-iris/client.rb', line 45 def api_version @api_version end |
Class Method Details
.get_id_from_location_header(location) ⇒ String
Extract id from location header
62 63 64 65 66 |
# File 'lib/bandwidth-iris/client.rb', line 62 def Client.get_id_from_location_header(location) items = (location || '').split('/') raise StandardError.new('Missing id in the location header') if items.size < 2 items.last end |
.global_options ⇒ Object
Return global options
50 51 52 |
# File 'lib/bandwidth-iris/client.rb', line 50 def Client. @@global_options end |
.global_options=(v) ⇒ Object
Set global options
55 56 57 |
# File 'lib/bandwidth-iris/client.rb', line 55 def Client.(v) @@global_options = v end |
Instance Method Details
#build_xml(data) ⇒ Object
138 139 140 141 |
# File 'lib/bandwidth-iris/client.rb', line 138 def build_xml(data) doc = build_doc(data, data.keys.first.to_s().camelcase(:upper)) doc.values.first.to_xml({:root => doc.keys.first, :skip_types => true, :indent => 0 }) end |
#check_response(response) ⇒ Object
Check response object and raise error if status code >= 400
121 122 123 124 125 |
# File 'lib/bandwidth-iris/client.rb', line 121 def check_response(response) parsed_body = parse_xml(response.body || '') raise Errors::GenericError.new(response.status, response.reason_phrase, response.headers, parsed_body) if response.status >= 400 parsed_body end |
#concat_account_path(path) ⇒ Object
Build url path like /accounts/<account-id>/<path>
128 129 130 |
# File 'lib/bandwidth-iris/client.rb', line 128 def concat_account_path(path) @concat_account_path.call(path) end |
#create_connection ⇒ Faraday::Connection
Return new configured connection object
134 135 136 |
# File 'lib/bandwidth-iris/client.rb', line 134 def create_connection() @create_connection.call() end |
#make_request(method, path, data = {}) ⇒ Array
Make HTTP request to IRIS API
73 74 75 76 77 78 79 80 81 82 83 84 85 86 |
# File 'lib/bandwidth-iris/client.rb', line 73 def make_request(method, path, data = {}) connection = @create_connection.call() response = if method == :get || method == :delete d = camelcase(data) connection.run_request(method, @build_path.call(path), nil, nil) do |req| req.params = d unless d == nil || d.empty? end else xml_to_send = build_xml(data) # help debug connection.run_request(method, @build_path.call(path), xml_to_send, {'Content-Type' => 'application/xml'}) end body = check_response(response) [body || {}, symbolize(response.headers || {})] end |
#make_request_file_download(method, path, data = {}) ⇒ string
Makes an HTTP request for a file download
106 107 108 109 110 111 112 113 114 115 116 117 |
# File 'lib/bandwidth-iris/client.rb', line 106 def make_request_file_download(method, path, data = {}) connection = @create_connection.call() response = if method == :get || method == :delete d = camelcase(data) connection.run_request(method, @build_path.call(path), nil, nil) do |req| req.params = d unless d == nil || d.empty? end else connection.run_request(method, @build_path.call(path), build_xml(data), {'Content-Type' => 'application/xml'}) end return response.body end |
#make_request_file_upload(method, path, data, content_type) ⇒ Array
Makes an HTTP request for file uploads
94 95 96 97 98 99 |
# File 'lib/bandwidth-iris/client.rb', line 94 def make_request_file_upload(method, path, data, content_type) connection = @create_connection.call() response = connection.run_request(method, @build_path.call(path), data, {'Content-Type' => content_type}) body = check_response(response) [body || {}, symbolize(response.headers || {})] end |