class Autodoc::Document

Constants

DEFAULT_DOCUMENT_PATH_FROM_EXAMPLE

Public Class Methods

new(context, example) click to toggle source
# File lib/autodoc/document.rb, line 18
def initialize(context, example)
  @context = context
  @example = example
end
render(*args) click to toggle source
# File lib/autodoc/document.rb, line 14
def self.render(*args)
  new(*args).render
end

Public Instance Methods

identifier() click to toggle source
# File lib/autodoc/document.rb, line 37
def identifier
  title.gsub(" ", "-").gsub(/[:\/]/, "").downcase
end
pathname() click to toggle source
# File lib/autodoc/document.rb, line 23
def pathname
  @pathname ||= begin
    Autodoc.configuration.pathname + document_path_from_example.call(example)
  end
end
render() click to toggle source
# File lib/autodoc/document.rb, line 29
def render
  ERB.new(Autodoc.configuration.template, nil, "-").result(binding)
end
title() click to toggle source
# File lib/autodoc/document.rb, line 33
def title
  "#{method} #{path}"
end

Private Instance Methods

action() click to toggle source
# File lib/autodoc/document.rb, line 179
def action
  request.params[:action]
end
controller() click to toggle source
# File lib/autodoc/document.rb, line 175
def controller
  request.params[:controller]
end
description() click to toggle source
# File lib/autodoc/document.rb, line 191
def description
  if @context.respond_to?(:description)
    @context.description.strip_heredoc
  else
    example.description.sub(/\A./, &:upcase).concat('.')
  end
end
document_path_from_example() click to toggle source
# File lib/autodoc/document.rb, line 43
def document_path_from_example
  Autodoc.configuration.document_path_from_example || DEFAULT_DOCUMENT_PATH_FROM_EXAMPLE
end
example() click to toggle source
# File lib/autodoc/document.rb, line 47
def example
  if ::RSpec::Core::Version::STRING.match(/\A(?:3\.|2.99\.)/)
    @example
  else
    @context.example
  end
end
has_validators?() click to toggle source
# File lib/autodoc/document.rb, line 213
def has_validators?
  !!(defined?(WeakParameters) && validators)
end
method() click to toggle source
# File lib/autodoc/document.rb, line 75
def method
  request.request_method
end
parameters() click to toggle source
# File lib/autodoc/document.rb, line 209
def parameters
  validators.map {|validator| Parameter.new(validator) }.join("\n")
end
parameters_section() click to toggle source
# File lib/autodoc/document.rb, line 203
def parameters_section
  if has_validators? && parameters.present?
    "\n### Parameters\n#{parameters}\n"
  end
end
path() click to toggle source
# File lib/autodoc/document.rb, line 199
def path
  example.full_description[%r<(GET|POST|PATCH|PUT|DELETE) ([^ ]+)>, 2]
end
request() click to toggle source
# File lib/autodoc/document.rb, line 55
def request
  @request ||= begin
    if using_rack_test?
      ActionDispatch::Request.new(@context.last_request.env)
    else
      @context.request
    end
  end
end
request_body() click to toggle source
# File lib/autodoc/document.rb, line 116
def request_body
  if instance_variable_defined?(:@request_body)
    @request_body
  else
    @request_body = begin
      case
      when request.try(:content_type) == "multipart/form-data"
        "multipart/form-data"
      when request.headers["Content-Type"].try(:include?, "application/json")
        request_body_parsed_as_json
      else
        request.body.string
      end
    end
  end
end
request_body_parsed_as_json() click to toggle source
# File lib/autodoc/document.rb, line 133
def request_body_parsed_as_json
  JSON.pretty_generate(JSON.parse(request.body.string))
rescue JSON::ParserError
end
request_body_section() click to toggle source
# File lib/autodoc/document.rb, line 112
def request_body_section
  "\n\n#{request_body}" if request_body.present?
end
request_header() click to toggle source
# File lib/autodoc/document.rb, line 79
def request_header
  table = request_header_from_fixed_keys
  table.merge!(request_header_from_http_prefix)
  table.reject! {|key, value| value.blank? }
  table = Hash[table.map {|key, value| [key.split(?_).map(&:downcase).map(&:camelize).join(?-), value] }]
  table.except!(*Autodoc.configuration.suppressed_request_header)
  table.map {|key, value| [key, value].join(": ") }.sort.join("\n")
end
request_header_from_fixed_keys() click to toggle source
# File lib/autodoc/document.rb, line 98
def request_header_from_fixed_keys
  table = request.headers
  table = table.env if table.respond_to?(:env)
  table.slice("CONTENT_TYPE", "CONTENT_LENGTH", "LOCATION")
end
request_header_from_http_prefix() click to toggle source
# File lib/autodoc/document.rb, line 88
def request_header_from_http_prefix
  request.headers.inject({}) do |table, (key, value)|
    if key.to_s.start_with?("HTTP_")
      table.merge(key.to_s.gsub(/^HTTP_/, "") => value)
    else
      table
    end
  end
end
request_http_version() click to toggle source
# File lib/autodoc/document.rb, line 104
def request_http_version
  request.env["HTTP_VERSION"] || "HTTP/1.1"
end
request_query() click to toggle source
# File lib/autodoc/document.rb, line 108
def request_query
  "?#{URI.decode_www_form_component(request.query_string.force_encoding(Encoding::UTF_8))}" unless request.query_string.empty?
end
response() click to toggle source
# File lib/autodoc/document.rb, line 65
def response
  @response ||= begin
    if using_rack_test?
      @context.last_response
    else
      @context.response
    end
  end
end
response_body() click to toggle source
# File lib/autodoc/document.rb, line 153
def response_body
  if instance_variable_defined?(:@response_body)
    @response_body
  else
    @response_body = begin
      case
      when response.header["Content-Type"].try(:include?, "image/")
        response.header["Content-Type"]
      when response.header["Content-Type"].try(:include?, "application/json")
        response_body_parsed_as_json
      else
        response.body
      end
    end
  end
end
response_body_parsed_as_json() click to toggle source
# File lib/autodoc/document.rb, line 170
def response_body_parsed_as_json
  JSON.pretty_generate(JSON.parse(response.body))
rescue JSON::ParserError
end
response_body_section() click to toggle source
# File lib/autodoc/document.rb, line 149
def response_body_section
  "\n\n#{response_body}" if response_body.present?
end
response_header() click to toggle source
# File lib/autodoc/document.rb, line 138
def response_header
  table = response.headers.clone
  table = table.to_hash if table.respond_to?(:to_hash)
  table.except!(*Autodoc.configuration.suppressed_response_header)
  table.map {|key, value| [key, value].join(": ") }.sort.join("\n")
end
response_http_version() click to toggle source
# File lib/autodoc/document.rb, line 145
def response_http_version
  response.header["HTTP_VERSION"] || "HTTP/1.1"
end
transaction() click to toggle source
# File lib/autodoc/document.rb, line 187
def transaction
  @transaction ||= Autodoc::Transaction.build(@context)
end
using_rack_test?() click to toggle source
# File lib/autodoc/document.rb, line 183
def using_rack_test?
  !!defined?(Rack::Test::Methods) && @context.class.ancestors.include?(Rack::Test::Methods)
end
validators() click to toggle source
# File lib/autodoc/document.rb, line 217
def validators
  WeakParameters.stats[controller][action].try(:validators)
end