class Nexmo::OAS::Renderer::Presenters::RequestBodyRaw

Public Class Methods

new(parameters, options = {}, endpoint = nil) click to toggle source
# File lib/nexmo/oas/renderer/presenters/request_body_raw.rb, line 8
def initialize(parameters, options = {}, endpoint = nil)
  @parameters = parameters
  @options = options
  @endpoint = endpoint
end

Public Instance Methods

array?(parameter) click to toggle source
# File lib/nexmo/oas/renderer/presenters/request_body_raw.rb, line 110
def array?(parameter)
  return parameter['items'] unless parameter.respond_to?(:array?)

  parameter.array?
end
collection?(parameter) click to toggle source
# File lib/nexmo/oas/renderer/presenters/request_body_raw.rb, line 116
def collection?(parameter)
  return parameter['properties'] unless parameter.respond_to?(:collection?)

  parameter.collection?
end
example(parameter) click to toggle source
# File lib/nexmo/oas/renderer/presenters/request_body_raw.rb, line 92
def example(parameter)
  return parameter['example'] unless parameter.respond_to?(:example)

  parameter.example
end
generate_request(parameters = nil, options = nil) click to toggle source
# File lib/nexmo/oas/renderer/presenters/request_body_raw.rb, line 41
def generate_request(parameters = nil, options = nil)
  parameters ||= @parameters
  options ||= @options
  output = {}

  parameters.each do |parameter|
    next if options['required_only'] && optional?(parameter, options['required'])

    parameter_name = name(parameter)
    param = parameter

    # This is all required to handle an edge case where parameter.name is an OasParser::Property
    # Which happens when you use a oneOf inside items in a property.
    # I believe this is a bug, but it's a BC break in the parser

    if parameter_name.instance_of?(OasParser::Property)
      parameter_name = parameter.owner.name
      param = OasParser::Parameter.new(parameter_name, parameter.schema)
    end

    if param.raw['items'] && param.raw['example']
      output[parameter_name] = param.raw['example']
    elsif param.raw['items'] && param.raw['items']['oneOf']
      param = param.raw['items']['oneOf'][0]
      output[parameter_name] = [generate_request(properties(param).map(&:name))]
    elsif collection?(param) && properties?(param)
      nested_output = generate_request(properties(param))
      next unless nested_output.keys.length.positive?

      nested_output = [nested_output] if param.array?
      output[parameter_name] = nested_output
    else
      ex = example(param)
      next unless ex

      if ex.is_a?(String)
        # Remove line breaks
        ex = ex.gsub('<br />', ' ')
      end
      output[parameter_name] = ex
    end
  end
  output
end
items(parameter) click to toggle source
# File lib/nexmo/oas/renderer/presenters/request_body_raw.rb, line 86
def items(parameter)
  return parameter['items'] unless parameter.respond_to?(:items)

  parameter.items
end
name(parameter) click to toggle source
# File lib/nexmo/oas/renderer/presenters/request_body_raw.rb, line 98
def name(parameter)
  return parameter['name'] unless parameter.respond_to?(:name)

  parameter.name
end
optional?(parameter, allow_list) click to toggle source
# File lib/nexmo/oas/renderer/presenters/request_body_raw.rb, line 128
def optional?(parameter, allow_list)
  return false if allow_list&.include?(name(parameter))

  return false unless parameter.respond_to?(:required)

  return false unless parameter.schema

  !parameter.required
end
properties(parameter) click to toggle source
# File lib/nexmo/oas/renderer/presenters/request_body_raw.rb, line 104
def properties(parameter)
  return parameter['properties'] unless parameter.respond_to?(:properties)

  parameter.properties
end
properties?(parameter) click to toggle source
# File lib/nexmo/oas/renderer/presenters/request_body_raw.rb, line 122
def properties?(parameter)
  return parameter['properties'] unless parameter.respond_to?(:collection?)

  parameter.properties.size.positive?
end
to_format(format) click to toggle source
# File lib/nexmo/oas/renderer/presenters/request_body_raw.rb, line 14
def to_format(format)
  return to_urlencoded if format == 'application/x-www-form-urlencoded'

  to_json
end
to_json(*_args) click to toggle source
# File lib/nexmo/oas/renderer/presenters/request_body_raw.rb, line 37
def to_json(*_args)
  JSON.pretty_generate(generate_request)
end
to_urlencoded() click to toggle source
# File lib/nexmo/oas/renderer/presenters/request_body_raw.rb, line 20
def to_urlencoded
  example = ''
  body = URI.encode_www_form(generate_request)
  if @endpoint
    servers = @endpoint.path.servers || @endpoint.definition.servers
    path = @endpoint.path.path.gsub(/\{(.+?)\}/, ':\1')
    uri = URI("#{servers[0]['url']}#{path}")
    example += "#{@endpoint.method.upcase} #{uri.path} HTTP/1.1\n"
    example += "Host: #{uri.host} \n"
    example += "Content-Type: application/x-www-form-urlencoded\n"
    example += "Content-Length: #{body.length}\n"
    example += "\n"
  end
  example += body
  example
end