GlobalNamesArchitecture/idigbio_client

View on GitHub
lib/idigbio_client/helper.rb

Summary

Maintainability
A
0 mins
Test Coverage
module IdigbioClient
  # Private internal methods
  module Helper
    def query(opts)
      url, params = url_params(opts)
      resp = post?(opts[:method]) ? post(url, params) : get(url, params)
      resp = JSON.parse(resp.body, symbolize_names: true) if resp
      sleep(0.3)
      block_given? ? yield(resp) : resp
    end

    def url_params(opts)
      opts = { method: "post" }.merge(opts)
      url = URL + opts[:path]
      params = HEADERS.merge(params: opts[:params].to_json)
      [url, params]
    end

    def post?(method)
      !method.to_s.match(/get/i)
    end

    def post(url, params)
      request(:post, url, params)
    end

    def get(url, params)
      params[:query] = params.delete(:params)
      request(:get, url, params)
    end

    def request(method, url, params)
      RestClient.send(method, url, params) do |resp, _req, _res|
        resp.code == 200 ? resp : nil
      end
    end

    def normalize_type(type)
      type = type.to_s
      return type if IdigbioClient.types.include?(type)
      sym_types = types.map { |t| ":#{t}" }.join(", ")
      fail "Unknown type :#{type}. Types: #{sym_types}"
    end

    def symbolize(h)
      h.keys.each do |k|
        sym = k.to_sym
        h[sym] = h.delete(k)
        symbolize(h[sym]) if h[sym].is_a? Hash
      end
    end
  end
end