class Nordvpn::Api::Client

Attributes

cache[RW]
configuration[RW]
proxy[RW]

Public Class Methods

new(proxy: nil, configuration: ::Nordvpn::Api.configuration) click to toggle source
# File lib/nordvpn/api/client.rb, line 6
def initialize(proxy: nil, configuration: ::Nordvpn::Api.configuration)
  self.proxy            =   proxy
  self.configuration    =   configuration
  self.cache            =   {}
end

Public Instance Methods

connect(host:, options: {}) click to toggle source
# File lib/nordvpn/api/client.rb, line 12
def connect(host:, options: {})
  request_options       =   options.fetch(:request, {})
  
  connection            =   ::Faraday.new(host, request: request_options) do |builder|
    builder.options[:timeout]         =   options.fetch(:timeout, nil)      if options.fetch(:timeout, nil)
    builder.options[:open_timeout]    =   options.fetch(:open_timeout, nil) if options.fetch(:open_timeout, nil)
  
    builder.request  :json
    
    builder.response :logger, ::Logger.new(STDOUT), bodies: true if self.configuration.verbose
    builder.response :json, content_type: /\bjson$/
    
    builder.use ::FaradayMiddleware::FollowRedirects, limit: 10
    
    if self.proxy
      builder.proxy     =   generate_proxy(self.proxy)
      puts "[NordVpn::Api::Client] - Will connect to NordVPN's API using proxy: #{self.proxy.inspect}" if self.configuration.verbose
    end

    builder.adapter self.configuration.faraday.fetch(:adapter, ::Faraday.default_adapter)
  end
end
delete(path, parameters: {}, data: {}, headers: {}, options: {}) click to toggle source
# File lib/nordvpn/api/client.rb, line 55
def delete(path, parameters: {}, data: {}, headers: {}, options: {})
  request path, method: :delete, parameters: parameters, data: data, headers: headers, options: options
end
generate_proxy(host:, port:, username:, password:) click to toggle source
# File lib/nordvpn/api/client.rb, line 87
def generate_proxy(host:, port:, username:, password:)
  {
    uri:      "http://#{host}:#{port}",
    user:     username,
    password: password
  }
end
get(path, parameters: {}, headers: {}, options: {}) click to toggle source
# File lib/nordvpn/api/client.rb, line 35
def get(path, parameters: {}, headers: {}, options: {})
  request path, method: :get, parameters: parameters, headers: headers, options: options
end
head(path, parameters: {}, headers: {}, options: {}) click to toggle source
# File lib/nordvpn/api/client.rb, line 39
def head(path, parameters: {}, headers: {}, options: {})
  request path, method: :head, parameters: parameters, headers: headers, options: options
end
patch(path, parameters: {}, data: {}, headers: {}, options: {}) click to toggle source
# File lib/nordvpn/api/client.rb, line 51
def patch(path, parameters: {}, data: {}, headers: {}, options: {})
  request path, method: :patch, parameters: parameters, data: data, headers: headers, options: options
end
post(path, parameters: {}, data: {}, headers: {}, options: {}) click to toggle source
# File lib/nordvpn/api/client.rb, line 43
def post(path, parameters: {}, data: {}, headers: {}, options: {})
  request path, method: :post, parameters: parameters, data: data, headers: headers, options: options
end
put(path, parameters: {}, data: {}, headers: {}, options: {}) click to toggle source
# File lib/nordvpn/api/client.rb, line 47
def put(path, parameters: {}, data: {}, headers: {}, options: {})
  request path, method: :put, parameters: parameters, data: data, headers: headers, options: options
end
request(path, method: :get, parameters: {}, data: {}, headers: {}, options: {}) click to toggle source
# File lib/nordvpn/api/client.rb, line 59
def request(path, method: :get, parameters: {}, data: {}, headers: {}, options: {})
  connection                =   connect(host: self.configuration.host, options: options)
  
  headers["User-Agent"]     =   headers.fetch("User-Agent", ::Agents.random_user_agent(:desktop))
  
  response                  =   case method
    when :get
      connection.get do |request|
        request.url path unless path.to_s.empty?
        request.headers     =   connection.headers.merge(headers)
        request.params      =   parameters if parameters && !parameters.empty?
      end
    when :head
      connection.head do |request|
        request.url path unless path.to_s.empty?
        request.headers     =   connection.headers.merge(headers)
        request.params      =   parameters if parameters && !parameters.empty?
      end
    when :post, :put, :patch, :delete
      connection.send(method) do |request|
        request.url path unless path.to_s.empty?
        request.headers     =   connection.headers.merge(headers)
        request.body        =   data if data && !data.empty?
        request.params      =   parameters if parameters && !parameters.empty?
      end
  end
end