class ApiBlueprintFormatter::ActionFormatter

Parses example metadata for Actions and outputs markdown in accordance with the API Blueprint spec.

Spec: github.com/apiaryio/api-blueprint/blob/master/API%20Blueprint%20Specification.md#def-action-section

Attributes

action_metadata[R]
action_name[R]

Public Class Methods

new(action_name, action_metadata) click to toggle source
# File lib/api_blueprint/action_formatter.rb, line 9
def initialize(action_name, action_metadata)
  @action_name = action_name
  @action_metadata = action_metadata
  @parameters = action_metadata[:parameters] || []
end

Public Instance Methods

format() click to toggle source
# File lib/api_blueprint/action_formatter.rb, line 15
def format
  output = []
  output << "## #{action_name}"
  output << ''
  output << action_metadata[:description].to_s
  output << ''
  output += format_parameters
  output << ''

  output.join("\n")
end

Private Instance Methods

action_header(param, data) click to toggle source
# File lib/api_blueprint/action_formatter.rb, line 62
def action_header(param, data)
  param_signature = "#{param}#{params_example_string(data)}#{param_attributes_string(data)}"
  multiline_description = !members(param).empty?

  header = "+ #{param_signature}"
  header += " - #{data[:description]}" unless multiline_description
  header
end
format_members(param) click to toggle source
# File lib/api_blueprint/action_formatter.rb, line 87
def format_members(param)
  out = []
  unless members(param).empty?
    out << indent_lines(8, '+ Members')
    members(param).each do |member|
      out << indent_lines(12, "+ `#{member}`")
    end
  end
  out
end
format_param(param, data) click to toggle source
# File lib/api_blueprint/action_formatter.rb, line 42
def format_param(param, data)
  out = []
  out << indent_lines(4, action_header(param, data))

  if multiline_description(param)
    out << ''
    out << indent_lines(8, data[:description])
    out << ''
  end

  out << indent_lines(8, "+ Default: #{data[:default]}") if data[:default]
  out += format_members(param)

  out
end
format_parameters() click to toggle source
# File lib/api_blueprint/action_formatter.rb, line 29
def format_parameters
  return [] if @parameters.empty?

  output = ['']
  output << '+ Parameters'
  @parameters.each_pair do |param, data|
    output += format_param(param, data)
  end
  output << ''

      output
end
members(param) click to toggle source
# File lib/api_blueprint/action_formatter.rb, line 83
def members(param)
  @action_metadata[:parameters][param].fetch(:members, [])
end
multiline_description(param) click to toggle source
# File lib/api_blueprint/action_formatter.rb, line 58
def multiline_description(param)
  members(param).size > 0
end
param_attributes_string(data) click to toggle source
# File lib/api_blueprint/action_formatter.rb, line 71
def param_attributes_string(data)
  optional = data[:optional] ? 'optional' : nil
  param_attributes = [data[:type], optional].compact

  " (#{param_attributes.join(', ')})" unless param_attributes.empty?
end
params_example_string(data) click to toggle source
# File lib/api_blueprint/action_formatter.rb, line 78
def params_example_string(data)
  return '' unless data[:example]
  ": #{data[:example]}"
end