Module: ApiFrame::EndpointMethods::ClassMethods

Defined in:
lib/api_frame/endpoint_methods.rb

Instance Method Summary collapse

Instance Method Details

#define_endpoint(name, method:, endpoint:, body: nil) ⇒ Object



53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
# File 'lib/api_frame/endpoint_methods.rb', line 53

def define_endpoint(name, method:, endpoint:, body: nil)
  define_method(name) do |*args, **kwargs|
    uri          = endpoint.respond_to?(:call) ? ApiFrame::Utils.call_proc_without_unknown_keywords(endpoint, *args, **kwargs) : endpoint
    request_body = body    .respond_to?(:call) ? ApiFrame::Utils.call_proc_without_unknown_keywords(body,     *args, **kwargs) : body
    
    perform_request(method, uri, body: request_body, query: kwargs.key?(:query) ? kwargs.fetch(:query) : nil, headers: kwargs.key?(:headers) ? kwargs.fetch(:headers) : nil).then do |response|
      if !kwargs.key?(:plain_response) || !kwargs.fetch(:plain_response)
        if response.is_a?(Net::HTTPSuccess)
          default_response_parser.call(response)
        else
          raise ApiFrame::NoSuccessError, response
        end
      else
        response
      end
    end
  end
end