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