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.
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 |
# 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://api.inetwork.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' @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.
42 43 44 |
# File 'lib/bandwidth-iris/client.rb', line 42 def api_endpoint @api_endpoint end |
#api_version ⇒ Object (readonly)
Returns the value of attribute api_version.
42 43 44 |
# File 'lib/bandwidth-iris/client.rb', line 42 def api_version @api_version end |
Class Method Details
.get_id_from_location_header(location) ⇒ String
Extract id from location header
59 60 61 62 63 |
# File 'lib/bandwidth-iris/client.rb', line 59 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
47 48 49 |
# File 'lib/bandwidth-iris/client.rb', line 47 def Client. @@global_options end |
.global_options=(v) ⇒ Object
Set global options
52 53 54 |
# File 'lib/bandwidth-iris/client.rb', line 52 def Client.(v) @@global_options = v end |
Instance Method Details
#build_xml(data) ⇒ Object
122 123 124 125 |
# File 'lib/bandwidth-iris/client.rb', line 122 def build_xml(data) doc = build_doc(data) 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
86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 |
# File 'lib/bandwidth-iris/client.rb', line 86 def check_response(response) parsed_body = parse_xml(response.body || '') code = find_first_descendant(parsed_body, :error_code) description = find_first_descendant(parsed_body, :description) unless code error = find_first_descendant(parsed_body, :error) if error code = error[:code] description = error[:description] else errors = find_first_descendant(parsed_body, :errors) if errors == nil || errors.length == 0 code = find_first_descendant(parsed_body, :result_code) description = find_first_descendant(parsed_body, :result_message) else errors = [errors] if errors.is_a?(Hash) raise Errors::AgregateError.new(errors.map {|e| Errors::GenericError.new(e[:code], e[:description], response.status)}) end end end raise Errors::GenericError.new(code, description, response.status) if code && description && code != '0' && code != 0 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>
112 113 114 |
# File 'lib/bandwidth-iris/client.rb', line 112 def concat_account_path(path) @concat_account_path.call(path) end |
#create_connection ⇒ Faraday::Connection
Return new configured connection object
118 119 120 |
# File 'lib/bandwidth-iris/client.rb', line 118 def create_connection() @create_connection.call() end |
#make_request(method, path, data = {}) ⇒ Array
Make HTTP request to IRIS API
70 71 72 73 74 75 76 77 78 79 80 81 82 |
# File 'lib/bandwidth-iris/client.rb', line 70 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 connection.run_request(method, @build_path.call(path), build_xml(data), {'Content-Type' => 'application/xml'}) end body = check_response(response) [body || {}, symbolize(response.headers || {})] end |