class Splicer::Dynect::Client

@author Matthew A. Johnston <warmwaffles@gmail.com>

Attributes

base_url[R]
customer[R]
headers[R]
password[R]
username[R]

Public Class Methods

new(customer, username, password) click to toggle source

@param [String] customer @param [String] username @param [String] password

# File lib/splicer/dynect/client.rb, line 11
def initialize(customer, username, password)
  @customer = customer
  @username = username
  @password = password

  @base_url = 'https://api-v4.dynect.net/REST'
  @headers  = {
    'Content-Type' => 'application/json',
    'API-Version'  => '3.4.0'
  }
end

Public Instance Methods

delete(resource) click to toggle source

@param [String] resource

@return [Hash]

# File lib/splicer/dynect/client.rb, line 65
def delete(resource)
  execute({
    method: :delete,
    url: resource_url(resource),
    headers: @headers
  })
end
get(resource) click to toggle source

@param [String] resource

@return [Hash]

# File lib/splicer/dynect/client.rb, line 40
def get(resource)
  execute({
    method: :get,
    url: resource_url(resource),
    headers: @headers,
    max_redirects: 20
  })
end
login() click to toggle source

Creates a client's session

@return [Boolean]

# File lib/splicer/dynect/client.rb, line 76
def login
  return true if logged_in?

  resp = post('Session', {
    user_name: @username,
    password: @password,
    customer_name: @customer
  })
  @headers['Auth-Token'] = resp['data']['token']
  true
end
logout() click to toggle source

Destroys the client's session

@return [Boolean]

# File lib/splicer/dynect/client.rb, line 100
def logout
  return false unless logged_in?
  delete('Session')
  @headers.delete('Auth-Token')
  true
end
noop() click to toggle source

Keeps the session alive

@return [Boolean] True if successful

# File lib/splicer/dynect/client.rb, line 91
def noop
  return false unless logged_in?
  put('Session')
  true
end
post(resource, payload={}) click to toggle source

@param [String] resource @param [Hash] payload

@return [Hash]

# File lib/splicer/dynect/client.rb, line 27
def post(resource, payload={})
  execute({
    method: :post,
    url: resource_url(resource),
    payload: payload.to_json,
    headers: @headers,
    max_redirects: 20
  })
end
put(resource, payload={}) click to toggle source

@param [String] resource @param [Hash] payload

@return [Hash]

# File lib/splicer/dynect/client.rb, line 53
def put(resource, payload={})
  execute({
    method: :put,
    url: resource_url(resource),
    payload: payload.to_json,
    headers: @headers
  })
end

Private Instance Methods

execute(args={}) click to toggle source

Wrapper around RestClient::Request.execute method

@param [Hash] args @raise [Splicer::Errors::RequestError] when the request fails @return [Hash]

# File lib/splicer/dynect/client.rb, line 119
def execute(args={})
  response = RestClient::Request.execute(args)
  Splicer.logger.debug "[SPLICER][DYNECT] method=#{args[:method]} url=#{args[:url]} response=#{response}"
  JSON.parse(response)
rescue RestClient::Exception => error
  Splicer.logger.debug "[SPLICER][DYNECT] method=#{args[:method]} url=#{args[:url]} response=#{error.response} message=#{error.message}"
  raise Splicer::Errors::RequestError.new(error)
end
logged_in?() click to toggle source

@return [Boolean]

# File lib/splicer/dynect/client.rb, line 110
def logged_in?
  !!@headers['Auth-Token']
end
resource_url(resource) click to toggle source
# File lib/splicer/dynect/client.rb, line 128
def resource_url resource
  [@base_url, resource.gsub(/^\//,'').gsub(/REST\//,'')].join('/')
end