class Acenda::API

Public Class Methods

new(client_id, client_secret, store_url, verify_ssl = true, debug = false) click to toggle source
# File lib/acenda-client.rb, line 98
def initialize(client_id, client_secret, store_url, verify_ssl = true, debug = false)
    if (client_id.is_a? String and client_secret.is_a? String and store_url.is_a? String)
        raise Acenda::APIErrorClient, "store_url MUST be a valid URL" unless store_url =~ URI::regexp
        @logger = Logger.new(STDOUT)
        @config = {
            :client_id => client_id,
            :client_secret => client_secret,
            :store_url => store_url + (store_url.split('').last == '/' ? 'api' : '/api'),
            :access_token => nil,
            :acenda_api_url => store_url,
            :verify_ssl => verify_ssl,
            :debug => debug
        }

        @logger.info "Acenda:: Configuration:"  if @config[:debug] == true
        @logger.info @config.to_json
        puts "\r\n" if @config[:debug] == true

    else
        raise Acenda::APIErrorClient, "Wrong parameters type provided to Acenda::API"
    end
end

Public Instance Methods

query(verb, uri, params={}) click to toggle source
# File lib/acenda-client.rb, line 121
def query(verb, uri, params={})
    if (verb.is_a? String and uri.is_a? String and params.is_a? Hash)
        generate_token() if (!@config[:access_token])

        json_headers = {"Content-Type" => "application/json",
        "Accept" => "application/json"}
        begin
            case verb.downcase
            when "get"
                query = generate_query(uri, params)

                http = Net::HTTP.new(query.host, query.port)
                
                http.use_ssl = true if query.scheme == "https"
                http.verify_mode = OpenSSL::SSL::VERIFY_NONE if query.scheme == "https" and !@config[:verify_ssl] 
                
                @logger.info "Acenda:: URI:" if @config[:debug] == true
                @logger.info uri.to_s if @config[:debug] == true
                @logger.info "Acenda:: PARAMS:" if @config[:debug] == true
                @logger.info params if @config[:debug] == true
                puts "\r\n" if @config[:debug] == true

                return Acenda::Response.new(http.get(query), query, params, @config[:debug])
            when "post"
                query = generate_query(uri)

                http = Net::HTTP.new(query.host, query.port)
                
                http.use_ssl = true if query.scheme == "https"
                http.verify_mode = OpenSSL::SSL::VERIFY_NONE if query.scheme == "https" and !@config[:verify_ssl] 

                @logger.info "Acenda:: URI:" if @config[:debug] == true
                @logger.info uri.to_s if @config[:debug] == true
                @logger.info "Acenda:: PARAMS:" if @config[:debug] == true
                @logger.info params if @config[:debug] == true
                puts "\r\n" if @config[:debug] == true
                
                return Acenda::Response.new http.post(query, params.to_json, json_headers), query, params, @config[:debug]
            when "put"
                query = generate_query(uri)

                http = Net::HTTP.new(query.host, query.port)
                
                http.use_ssl = true if query.scheme == "https"
                http.verify_mode = OpenSSL::SSL::VERIFY_NONE if query.scheme == "https" and !@config[:verify_ssl] 

                @logger.info "Acenda:: URI:" if @config[:debug] == true
                @logger.info uri.to_s if @config[:debug] == true
                @logger.info "Acenda:: PARAMS:" if @config[:debug] == true
                @logger.info params if @config[:debug] == true
                puts "\r\n" if @config[:debug] == true

                return Acenda::Response.new(http.put(query, params.to_json, json_headers), query, params, @config[:debug])
            when "delete"
                query = generate_query(uri, params)

                http = Net::HTTP.new(query.host, query.port)
                
                http.use_ssl = true if query.scheme == "https"
                http.verify_mode = OpenSSL::SSL::VERIFY_NONE if query.scheme == "https" and !@config[:verify_ssl] 

                @logger.info "Acenda:: URI:" if @config[:debug] == true
                @logger.info uri.to_s if @config[:debug] == true
                @logger.info "Acenda:: PARAMS:" if @config[:debug] == true
                @logger.info params if @config[:debug] == true
                puts "\r\n" if @config[:debug] == true

                return Acenda::Response.new(http.delete(query), query, params, @config[:debug])
            else
                raise Acenda::APIErrorClient, "Verb not recognized yet"
            end
        rescue => e
            e.backtrace.push("\r\nError custom trace:\r\nQuery: #{query}\r\n\r\nParams: #{params}\r\n")
        end
    else
        raise Acenda::APIErrorClient, "Wrong parameters type provided to Acenda::API.query"
    end
end

Private Instance Methods

generate_query(uri, params={}) click to toggle source
# File lib/acenda-client.rb, line 202
def generate_query(uri, params={})
    params = params.merge :access_token => @config[:access_token]

    parameters = ""
    params.each_with_index do |(k,v), i|
        parameters += "&" unless i < 1
        parameters += k.to_s+"="+URI.encode(v.to_s)
    end if params != ""

    @route = @config[:store_url]
    @route += (uri.split('').first == '/') ? uri : '/'+uri
    @route += (uri.count('?') > 0 ? '&' : '?')+parameters
    
    @route = URI(@route)

    return @route
end
generate_token() click to toggle source
# File lib/acenda-client.rb, line 220
def generate_token()
    json_headers = {"Content-Type" => "application/json",
        "Accept" => "application/json"}

    uri = URI.parse(@config[:acenda_api_url]+"/oauth/token")
    http = Net::HTTP.new(uri.host, uri.port)
    
    http.use_ssl = true if uri.scheme == "https"
    http.verify_mode = OpenSSL::SSL::VERIFY_NONE if uri.scheme == "https" and !@config[:verify_ssl] 

    params = {
        "client_id" => @config[:client_id],
        "client_secret" => @config[:client_secret],
        "grant_type" => "client_credentials"
    }

    @logger.info "Acenda:: URI:" if @config[:debug] == true
    @logger.info uri.to_s if @config[:debug] == true
    @logger.info "Acenda:: PARAMS:" if @config[:debug] == true
    @logger.info params if @config[:debug] == true
    puts "\r\n" if @config[:debug] == true

    begin
        response = Acenda::Response.new http.post(uri, params.to_json, json_headers), uri, params, @config[:debug]
    rescue => e
        e.backtrace.push("\r\nError custom trace:\r\nQuery: #{query}\r\n\r\nParams: #{params}\r\n")
    end
    @config[:access_token] = response.get_result()[:access_token] unless response.get_code() != 200
    raise Acenda::APIErrorHTTP, "Token generation failed #{response.get_code()}" if response.get_code() != 200
end