class DLClient

Public Class Methods

new(key, secret, host = nil, port = nil, verify_ssl = true) click to toggle source
# File lib/datalanche/client.rb, line 12
def initialize(key, secret, host = nil, port = nil, verify_ssl = true)

    @auth_key = key
    @auth_secret = secret
    @url = 'https://api.datalanche.com'
    @verify_ssl = verify_ssl
    @verify_mode = OpenSSL::SSL::VERIFY_PEER

    if host != nil
        @url = 'https://' + host
    end

    if port != nil
        @url = @url + ':' + port.to_s()
    end

    if verify_ssl != true
        @verify_mode = OpenSSL::SSL::VERIFY_NONE            
    end

end

Public Instance Methods

get_debug_info(res,req) click to toggle source
# File lib/datalanche/client.rb, line 42
def get_debug_info(res,req)
    info = Hash.new

    info['request'] = Hash.new
    info['request']['method'] = req['method']
    info['request']['url'] = req['url']
    info['request']['headers'] = req['headers']
    info['request']['body'] = req['body']

    info['response'] = Hash.new
    info['response']['http_status'] = res.code # r.status_code
    info['response']['message'] = res.message
    info['response']['http_version'] = res.http_version

    return info
end
key(key) click to toggle source
# File lib/datalanche/client.rb, line 34
def key(key)
    @auth_key = key
end
query(q = nil) click to toggle source
# File lib/datalanche/client.rb, line 59
def query(q = nil)
    if q == nil
        raise Exception('query == nil')
    end

    url = @url

    if q.params.has_key?('database')
        url = url + '/' + q.params['database']
        q.params.delete('database')
    end

    url = URI.parse(url + '/query')

    header = {
               # 'Accept-Encoding'=>'gzip', # will be resumed after method of decompression of gzip found
                'Content-Type'=>'application/json',
                'User-Agent'=>'Datalanche Ruby Client'
            }
    
    req = Net::HTTP::Post.new(url.path, header)
    req.basic_auth @auth_key, @auth_secret

    https = Net::HTTP.new(url.host,url.port)
    https.use_ssl = true 
    https.verify_mode = @verify_mode
    https.ssl_version = "SSLv3"

    req.body = "#{q.params.to_json}"
    res = https.request(req)

    result = Hash.new
    req_info = Hash.new

    req_info['headers'] = header
    req_info['url'] = url
    req_info['method'] = req.method
    req_info['body'] = JSON.parse(req.body)

    debug_info = self.get_debug_info(res,req_info)

    begin
        result['data'] = JSON.parse(res.body)
    rescue  # in case the server does not return a body
        result['data'] = nil
    end

    result['response'] = debug_info['response']
    result['request'] = debug_info['request']


    status_code = res.code.to_i 
    if not (200 <= status_code and status_code < 300)
        raise DLException.new(res.code, result['data'], debug_info),"Http request error: "
    end
    return result

end
secret(secret) click to toggle source
# File lib/datalanche/client.rb, line 38
def secret(secret)
    @auth_secret = secret
end