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.
11 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 |
# File 'lib/bandwidth-iris/client.rb', line 11 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.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.
44 45 46 |
# File 'lib/bandwidth-iris/client.rb', line 44 def api_endpoint @api_endpoint end |
#api_version ⇒ Object (readonly)
Returns the value of attribute api_version.
44 45 46 |
# File 'lib/bandwidth-iris/client.rb', line 44 def api_version @api_version end |
Class Method Details
.get_id_from_location_header(location) ⇒ String
Extract id from location header
61 62 63 64 65 |
# File 'lib/bandwidth-iris/client.rb', line 61 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
49 50 51 |
# File 'lib/bandwidth-iris/client.rb', line 49 def Client. @@global_options end |
.global_options=(v) ⇒ Object
Set global options
54 55 56 |
# File 'lib/bandwidth-iris/client.rb', line 54 def Client.(v) @@global_options = v end |
Instance Method Details
#build_xml(data) ⇒ Object
137 138 139 140 |
# File 'lib/bandwidth-iris/client.rb', line 137 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
120 121 122 123 124 |
# File 'lib/bandwidth-iris/client.rb', line 120 def check_response(response) parsed_body = parse_xml(response.body || '') raise Errors::GenericError.new('', "Http code #{response.status}", response.status) if response.status >= 400 parsed_body end |
#concat_account_path(path) ⇒ Object
Build url path like /accounts/<account-id>/<path>
127 128 129 |
# File 'lib/bandwidth-iris/client.rb', line 127 def concat_account_path(path) @concat_account_path.call(path) end |
#create_connection ⇒ Faraday::Connection
Return new configured connection object
133 134 135 |
# File 'lib/bandwidth-iris/client.rb', line 133 def create_connection() @create_connection.call() end |
#make_request(method, path, data = {}) ⇒ Array
Make HTTP request to IRIS API
72 73 74 75 76 77 78 79 80 81 82 83 84 85 |
# File 'lib/bandwidth-iris/client.rb', line 72 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
105 106 107 108 109 110 111 112 113 114 115 116 |
# File 'lib/bandwidth-iris/client.rb', line 105 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
93 94 95 96 97 98 |
# File 'lib/bandwidth-iris/client.rb', line 93 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 |