class ApiBlueprint

Public Class Methods

new(output) click to toggle source
Calls superclass method
# File lib/api_blueprint.rb, line 12
def initialize(output)
  super
  @passed_examples = {}
  @group_level = 0
  RSpec.configuration.silence_filter_announcements = true
end

Public Instance Methods

example_passed(passed) click to toggle source
# File lib/api_blueprint.rb, line 23
def example_passed(passed)
  metadata = passed.example.metadata

  if metadata[:apidoc] &&
      metadata[:resource_group] &&
      metadata[:resource] &&
      metadata[:action] &&
      metadata[:action_description]

    request = @example_group_instance.request
    response = @example_group_instance.response
    description = description_array_from(passed.example.metadata).reverse.join(' ').gsub(/[\(\)]/, '..')

    @passed_examples.deep_merge!({
      metadata[:resource_group] => {
        metadata[:resource] => {
          metadata[:action] => {
            description: metadata[:action_description],
            parameters: metadata[:action_parameters],
            examples: {
              description => {
                request: {
                  parameters: request.parameters.except(*request.path_parameters.keys.map(&:to_s)).to_json,
                  format: request.format
                },
                source: passed.example.instance_variable_get(:@example_block).source,
                location: metadata[:location],
                response: {
                  status: response.status,
                  body: response.body
                }
              }
            }
          }
        }
      }
    })
  end
  @example_group_instance = nil
end
example_started(notification) click to toggle source
# File lib/api_blueprint.rb, line 19
def example_started(notification)
  @example_group_instance = notification.example.example_group_instance
end
stop(notification) click to toggle source
# File lib/api_blueprint.rb, line 64
def stop(notification)
  @passed_examples.sort_by { |k,v| k }.each do |resource_group_name, resource_group_resources|
    print_resource_group(resource_group_name, resource_group_resources)
  end
end

Private Instance Methods

description_array_from(example_metadata) click to toggle source

To include the descriptions of all the contexts that are below the action group, but not including resource/resource_group descriptions

# File lib/api_blueprint.rb, line 104
def description_array_from(example_metadata)
  parent = example_metadata[:parent_example_group] if example_metadata.key?(:parent_example_group)
  parent ||= example_metadata[:example_group] if example_metadata.key?(:example_group)
  if parent.nil? || parent[:action].nil?
    []
  else
    [example_metadata[:description]] + description_array_from(parent)
  end
end
print_action(action_name, action_metadata) click to toggle source
print_example(example_description, example_metadata) click to toggle source
print_resource(resource_name, actions) click to toggle source
print_resource_group(resource_group_name, resource_group_resources) click to toggle source