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