class JokerDMAPI::Client

Constants

DEFAULT_URI

Public Class Methods

connection(username, password, uri = DEFAULT_URI) { |connection| ... } click to toggle source
# File lib/joker-dmapi/client.rb, line 24
def self.connection(username, password, uri = DEFAULT_URI, &block)
  connection = self.new(username, password, uri)
  if block_given?
    yield connection
    connection.logout
  else
    connection
  end
end
new(username, password, uri = DEFAULT_URI) click to toggle source
# File lib/joker-dmapi/client.rb, line 20
def initialize(username, password, uri = DEFAULT_URI)
  @username, @password, @uri = username, password, uri
end

Public Instance Methods

logout() click to toggle source
# File lib/joker-dmapi/client.rb, line 34
def logout
  unless @auth_sid.nil?
    query :logout
    @auth_sid = nil
  end
end
query(request, params = {}) click to toggle source
# File lib/joker-dmapi/client.rb, line 41
def query(request, params = {})
  response = query_no_raise request, params
  return response if response[:headers][:status_code] == '0'
  return response if request == :logout && response[:headers][:status_code] == '1000'
  raise_response response
end
tlds() click to toggle source
# File lib/joker-dmapi/client.rb, line 48
def tlds
  auth_sid unless @auth_sid
  @tlds
end

Private Instance Methods

auth_sid() click to toggle source
# File lib/joker-dmapi/client.rb, line 94
def auth_sid
  if @auth_sid.nil?
    response = request(:login, username: @username, password: @password)
    raise "Authentication error" unless response[:headers].has_key? :auth_sid
    @auth_sid = response[:headers][:auth_sid]
    @tlds = response[:body].split "\n"
  end
  @auth_sid
end
parse_attributes(attributes) click to toggle source
# File lib/joker-dmapi/client.rb, line 69
def parse_attributes(attributes)
  attributes.split("\n").inject({}) do |h, line|
    attribute = parse_line line
    h.merge!(attribute) if attribute.is_a? Hash
    h
  end
end
parse_line(line) click to toggle source
# File lib/joker-dmapi/client.rb, line 60
def parse_line(line)
  parts = line.split /\s*:\s*/, 2
  if parts.length == 2
    { parts[0].downcase.gsub('-', '_').gsub('.', '_').to_sym => parts[1] }
  else
    line
  end
end
parse_response(response) click to toggle source
# File lib/joker-dmapi/client.rb, line 77
def parse_response(response)
  response.each_line { |line| puts "<< #{line}" } if ENV['JOKER_DMAPI_DEBUG']
  parts = response.split "\n\n", 2
  { headers: parse_attributes(parts[0]), body: parts[1] }
end
query_no_raise(request, params = {}) click to toggle source
# File lib/joker-dmapi/client.rb, line 55
def query_no_raise(request, params = {})
  params['auth-sid'] = auth_sid
  request(request, params.inject({}) { |r, (key, value)| r[key.to_s.gsub('_', '-')] = value; r })
end
raise_response(response) click to toggle source
# File lib/joker-dmapi/client.rb, line 104
def raise_response(response)
  raise "\n\n" + response[:headers].inject([]) { |s, (key, value)| s << "#{key}: #{value}"}.join("\n") +
          "\n\n" + response[:body] + "\n\n"
end
request(request, params = {}) click to toggle source
# File lib/joker-dmapi/client.rb, line 83
def request(request, params = {})
  request = request.to_s.gsub('_', '-')
  uri = Addressable::URI.parse(@uri + request)
  uri.query_values = params
  http = Net::HTTP.new(uri.host, uri.port)
  http.use_ssl = true
  http.verify_mode = OpenSSL::SSL::VERIFY_NONE
  puts ">> #{uri}" if ENV['JOKER_DMAPI_DEBUG']
  parse_response http.request(Net::HTTP::Get.new(uri.request_uri)).body
end