class ApiccoSDK::Client
Public Class Methods
new(origin, rel_path:'api/v1', api:{}, intercept: ->(req) { req }
click to toggle source
# File lib/apicco-sdk/client.rb, line 5 def initialize(origin, rel_path:'api/v1', api:{}, intercept: ->(req) { req }) @rel_path = rel_path @origin = origin @intercept = intercept @api = discover_api(api) end
Public Instance Methods
method_missing(m, *args, &block)
click to toggle source
Calls superclass method
# File lib/apicco-sdk/client.rb, line 12 def method_missing(m, *args, &block) method_name = m.to_s super unless @api.key?(method_name) data = (args[0] || {}).transform_keys!(&:to_s) action, params = @api[method_name] required_params = params.inject([]) do |memo, p| memo << p[1..-1] if p[0] == "*" memo end missing_params = required_params.select { |p| data[p].nil? } fail "#{m} missing params: #{missing_params.join(", ")}" if missing_params.any? request(:post, "#{@url}/#{action}", data.to_json) end
respond_to_missing?(method_name, include_private = false)
click to toggle source
Calls superclass method
# File lib/apicco-sdk/client.rb, line 31 def respond_to_missing?(method_name, include_private = false) @api.key?(method_name) || super end
Private Instance Methods
_execute(method, url, payload, headers)
click to toggle source
# File lib/apicco-sdk/client.rb, line 68 def _execute(method, url, payload, headers) req = { method: method, url: url, payload: payload, headers: { Accept: "application/json", "Content-Type": "application/json", "User-Agent" => "Apicco Ruby SDK #{VERSION}" }.merge(headers) } @intercept.call(req) ::RestClient::Request.execute(req) end
discover_api(api)
click to toggle source
# File lib/apicco-sdk/client.rb, line 41 def discover_api(api) api = request(:get, "#{url}/discovery") if api.nil? || api.empty? parse_api_hash(api) end
parse_api_hash(h)
click to toggle source
# File lib/apicco-sdk/client.rb, line 46 def parse_api_hash(h) h .inject({}) do |memo, item| k, v = item new_key = underscore(k.gsub(".", "_")) memo[new_key] = [k, v] memo end end
parse_response(res)
click to toggle source
# File lib/apicco-sdk/client.rb, line 64 def parse_response(res) JSON.parse(res) end
request(method, url, payload = nil, headers = {})
click to toggle source
# File lib/apicco-sdk/client.rb, line 56 def request(method, url, payload = nil, headers = {}) response = _execute(method, url, payload, headers) parse_response(response) unless response.code == 204 rescue ::RestClient::ExceptionWithResponse => e raise e if !e.http_code || e.http_code > 501 parse_response(e.response) end
url()
click to toggle source
# File lib/apicco-sdk/client.rb, line 37 def url @url ||= "#{@origin}/#{@rel_path}" end