class APIBlueprint::OutputCollector

Collects example for API documentation

Attributes

configuration[RW]
resource_parameters[RW]
resources[RW]

Public Class Methods

new(configuration) click to toggle source
# File lib/api_blueprint/output_collector.rb, line 8
def initialize(configuration)
  @configuration = configuration
  @resources = {}
  @resource_parameters = {}
end

Public Instance Methods

add_example(metadata, example_block, request, response) click to toggle source
# File lib/api_blueprint/output_collector.rb, line 14
def add_example(metadata, example_block, request, response)
  @resources.deep_merge!(
    metadata[:resource_group] => build_resource(example_block, metadata,
                                                request, response)
  )
end

Private Instance Methods

build_action(example_block, metadata, request, response) click to toggle source
# File lib/api_blueprint/output_collector.rb, line 34
def build_action(example_block, metadata, request, response)
  example_description = metadata[:example_description] ||
                        metadata[:description].tr('()', '/')

  {
    description: metadata[:action_description],
    examples: {
      example_description => build_example(example_block, metadata,
                                           request, response)
    }
  }
end
build_example(example_block, metadata, request, response) click to toggle source
# File lib/api_blueprint/output_collector.rb, line 47
def build_example(example_block, metadata, request, response)
  {
    request: build_request(request),
    source: example_block.source,
    location: metadata[:location],
    response: build_response(response)
  }
end
build_request(request) click to toggle source
# File lib/api_blueprint/output_collector.rb, line 56
def build_request(request)
  {
    parameters: request_parameters(request),
    format: request.format
  }
end
build_resource(example_block, metadata, request, response) click to toggle source
# File lib/api_blueprint/output_collector.rb, line 23
def build_resource(example_block, metadata, request, response)
  @resource_parameters[metadata[:resource]] = metadata[:resource_parameters]

  {
    metadata[:resource] => {
      metadata[:action] => build_action(example_block, metadata, request,
                                        response)
    }
  }
end
build_response(response) click to toggle source
# File lib/api_blueprint/output_collector.rb, line 70
def build_response(response)
  {
    status: response.status,
    content_type: response.content_type.to_s,
    body: response_body(response)
  }
end
request_parameters(request) click to toggle source
# File lib/api_blueprint/output_collector.rb, line 63
def request_parameters(request)
  path_params = request.path_parameters.keys.map(&:to_s)
  request.parameters.except(*path_params).to_json
rescue Encoding::UndefinedConversionError
  'binary'
end
response_body(response) click to toggle source
# File lib/api_blueprint/output_collector.rb, line 78
def response_body(response)
  if response['Content-Transfer-Encoding'] == 'binary'
    'binary'
  else
    response.body
  end
end