module RspecApiDocumentation::DSL::Endpoint

DSL methods available inside the RSpec example.

Constants

URL_PARAMS_REGEX

Public Instance Methods

authentication(type, value, opts = {}) click to toggle source
# File lib/rspec_api_documentation/dsl/endpoint.rb, line 80
def authentication(type, value, opts = {})
  name, new_opts =
    case type
    when :basic then ['Authorization', opts.merge(type: type)]
    when :apiKey then [opts[:name], opts.merge(type: type, in: :header)]
    else raise 'Not supported type for authentication'
    end
  header(name, value)
  example.metadata[:authentications] ||= {}
  example.metadata[:authentications][name] = new_opts
end
do_request(extra_params = {}) click to toggle source
# File lib/rspec_api_documentation/dsl/endpoint.rb, line 35
def do_request(extra_params = {})
  @extra_params = extra_params

  params_or_body = nil
  path_or_query = path

  extended_parameters
  extract_route_parameters!

  if http_method == :get && !query_string.blank?
    path_or_query += "?#{query_string}"
  else
    if respond_to?(:raw_post)
      params_or_body = raw_post
    else
      formatter = RspecApiDocumentation.configuration.request_body_formatter
      case formatter
      when :json
        params_or_body = params.empty? ? nil : params.to_json
      when :xml
        params_or_body = params.to_xml
      when Proc
        params_or_body = formatter.call(params)
      else
        params_or_body = params
      end
    end
  end

  rspec_api_documentation_client.send(http_method, path_or_query, params_or_body, headers)
end
example() click to toggle source
# File lib/rspec_api_documentation/dsl/endpoint.rb, line 158
def example
  RSpec.current_example
end
explanation(text) click to toggle source
# File lib/rspec_api_documentation/dsl/endpoint.rb, line 154
def explanation(text)
  example.metadata[:explanation] = text
end
extended_parameters() click to toggle source
# File lib/rspec_api_documentation/dsl/endpoint.rb, line 106
def extended_parameters
  example.metadata[:extended_parameters] ||= Params.new(self, example, extra_params).extended
end
extract_route_parameters!() click to toggle source
# File lib/rspec_api_documentation/dsl/endpoint.rb, line 92
def extract_route_parameters!
  example.metadata[:route].gsub(URL_PARAMS_REGEX) do |match|
    value =
      if extra_params.keys.include?($1)
        extra_params[$1]
      elsif respond_to?($1)
        send($1)
      else
        match
      end
    extended_parameters << {name: match[1..-1], value: value, in: :path}
  end
end
header(name, value) click to toggle source
# File lib/rspec_api_documentation/dsl/endpoint.rb, line 75
def header(name, value)
  example.metadata[:headers] ||= {}
  example.metadata[:headers][name] = value
end
headers() click to toggle source
# File lib/rspec_api_documentation/dsl/endpoint.rb, line 110
def headers
  return unless example.metadata[:headers]
  example.metadata[:headers].inject({}) do |hash, (header, value)|
    if value.is_a?(Symbol)
      hash[header] = send(value) if respond_to?(value)
    else
      hash[header] = value
    end
    hash
  end
end
http_method() click to toggle source
# File lib/rspec_api_documentation/dsl/endpoint.rb, line 122
def http_method
  example.metadata[:method]
end
in_path?(param) click to toggle source
# File lib/rspec_api_documentation/dsl/endpoint.rb, line 134
def in_path?(param)
  path_params.include?(param)
end
method() click to toggle source
# File lib/rspec_api_documentation/dsl/endpoint.rb, line 126
def method
  http_method
end
params() click to toggle source
# File lib/rspec_api_documentation/dsl/endpoint.rb, line 71
def params
  Params.new(self, example, extra_params).call
end
path() click to toggle source
# File lib/rspec_api_documentation/dsl/endpoint.rb, line 142
def path
  example.metadata[:route].gsub(URL_PARAMS_REGEX) do |match|
    if extra_params.keys.include?($1)
      delete_extra_param($1)
    elsif respond_to?($1)
      escape send($1)
    else
      escape match
    end
  end
end
path_params() click to toggle source
# File lib/rspec_api_documentation/dsl/endpoint.rb, line 138
def path_params
  example.metadata[:route].scan(URL_PARAMS_REGEX).flatten
end
query_string() click to toggle source
# File lib/rspec_api_documentation/dsl/endpoint.rb, line 67
def query_string
  build_nested_query(params || {})
end
status() click to toggle source
# File lib/rspec_api_documentation/dsl/endpoint.rb, line 130
def status
  rspec_api_documentation_client.status
end

Private Instance Methods

delete_extra_param(key) click to toggle source
# File lib/rspec_api_documentation/dsl/endpoint.rb, line 177
def delete_extra_param(key)
  @extra_params.delete(key.to_sym) || @extra_params.delete(key.to_s)
end
extra_params() click to toggle source
# File lib/rspec_api_documentation/dsl/endpoint.rb, line 168
def extra_params
  return {} if @extra_params.nil?
  @extra_params.inject({}) do |h, (k, v)|
    v = v.is_a?(Hash) ? v.stringify_keys : v
    h[k.to_s] = v
    h
  end
end
rspec_api_documentation_client() click to toggle source
# File lib/rspec_api_documentation/dsl/endpoint.rb, line 164
def rspec_api_documentation_client
  send(RspecApiDocumentation.configuration.client_method)
end