class RspecApiDocumentation::Views::ApiBlueprintExample
Constants
- TOTAL_SPACES_INDENTATION
Public Class Methods
new(example, configuration)
click to toggle source
Calls superclass method
# File lib/rspec_api_documentation/views/api_blueprint_example.rb, line 6 def initialize(example, configuration) super self.template_name = "rspec_api_documentation/api_blueprint_example" end
Public Instance Methods
extension()
click to toggle source
# File lib/rspec_api_documentation/views/api_blueprint_example.rb, line 43 def extension Writers::ApiBlueprintWriter::EXTENSION end
parameters()
click to toggle source
Calls superclass method
# File lib/rspec_api_documentation/views/api_blueprint_example.rb, line 11 def parameters super.map do |parameter| parameter.merge({ :required => !!parameter[:required], :has_example => !!parameter[:example], :has_type => !!parameter[:type] }) end end
requests()
click to toggle source
Calls superclass method
# File lib/rspec_api_documentation/views/api_blueprint_example.rb, line 21 def requests super.map do |request| request[:request_headers_text] = remove_utf8_for_json(remove_content_type(request[:request_headers_text])) request[:request_headers_text] = indent(request[:request_headers_text]) request[:request_content_type] = content_type(request[:request_headers]) request[:request_content_type] = remove_utf8_for_json(request[:request_content_type]) request[:request_body] = body_to_json(request, :request) request[:request_body] = indent(request[:request_body]) request[:response_headers_text] = remove_utf8_for_json(remove_content_type(request[:response_headers_text])) request[:response_headers_text] = indent(request[:response_headers_text]) request[:response_content_type] = content_type(request[:response_headers]) request[:response_content_type] = remove_utf8_for_json(request[:response_content_type]) request[:response_body] = body_to_json(request, :response) request[:response_body] = indent(request[:response_body]) request[:has_request?] = has_request?(request) request[:has_response?] = has_response?(request) request end end
Private Instance Methods
body_to_json(http_call, message_direction)
click to toggle source
http_call: the hash that contains all information about the HTTP
request and response.
message_direction: either `request` or `response`.
# File lib/rspec_api_documentation/views/api_blueprint_example.rb, line 82 def body_to_json(http_call, message_direction) content_type = http_call["#{message_direction}_content_type".to_sym] body = http_call["#{message_direction}_body".to_sym] # e.g request_body if json?(content_type) && body body = JSON.pretty_generate(JSON.parse(body)) end body end
content_type(headers)
click to toggle source
# File lib/rspec_api_documentation/views/api_blueprint_example.rb, line 107 def content_type(headers) headers && headers.fetch("Content-Type", nil) end
has_request?(metadata)
click to toggle source
# File lib/rspec_api_documentation/views/api_blueprint_example.rb, line 61 def has_request?(metadata) metadata.any? do |key, value| [:request_body, :request_headers, :request_content_type].include?(key) && value end end
has_response?(metadata)
click to toggle source
# File lib/rspec_api_documentation/views/api_blueprint_example.rb, line 67 def has_response?(metadata) metadata.any? do |key, value| [:response_status, :response_body, :response_headers, :response_content_type].include?(key) && value end end
indent(string)
click to toggle source
# File lib/rspec_api_documentation/views/api_blueprint_example.rb, line 73 def indent(string) string.tap do |str| str.gsub!(/\n/, "\n" + (" " * TOTAL_SPACES_INDENTATION)) if str end end
json?(string)
click to toggle source
# File lib/rspec_api_documentation/views/api_blueprint_example.rb, line 111 def json?(string) string =~ /application\/.*json/ end
remove_content_type(headers)
click to toggle source
`Content-Type` header is removed because the information would be duplicated since it's already present in `request`.
# File lib/rspec_api_documentation/views/api_blueprint_example.rb, line 51 def remove_content_type(headers) return unless headers headers .split("\n") .reject { |header| header.start_with?('Content-Type:') } .join("\n") end
remove_utf8_for_json(headers)
click to toggle source
JSON requests should use UTF-8 by default according to www.ietf.org/rfc/rfc4627.txt, so we will remove `charset=utf-8` when we find it to remove noise.
# File lib/rspec_api_documentation/views/api_blueprint_example.rb, line 96 def remove_utf8_for_json(headers) return unless headers headers .split("\n") .map { |header| header.gsub!(/; *charset=utf-8/, "") if json?(header) header } .join("\n") end