class ApidocoDsl::ApiDoc
Constants
- SETTABLE
attr_reader :api
Attributes
doc_description[RW]
doc_endpoint[RW]
doc_examples[RW]
doc_header[RW]
doc_http_method[RW]
doc_markdown[RW]
doc_name[RW]
doc_namespace[RW]
doc_published[RW]
doc_request_example[RW]
doc_request_params[RW]
doc_resource[RW]
doc_response_example[RW]
doc_response_params[RW]
doc_return_code[RW]
doc_sort_order[RW]
Public Class Methods
new(api)
click to toggle source
# File lib/apidoco_dsl/api_doc.rb, line 16 def initialize(api) @api = api @doc_request_params = [] @doc_response_params = [] @doc_examples = [] @doc_namespace = @api.namespace @doc_resource = @api.resource @param_destination = 'request' end
Public Instance Methods
description(txt = nil, path: nil)
click to toggle source
# File lib/apidoco_dsl/api_doc.rb, line 60 def description(txt = nil, path: nil) if path txt = File.read(path) erb = ERB.new(txt).result html = Kramdown::Document.new(erb).to_html @doc_description = ERB.new(html).result else @doc_description = txt end end
doc_file()
click to toggle source
# File lib/apidoco_dsl/api_doc.rb, line 75 def doc_file doc_name.gsub(/\s/, '').underscore end
doc_folder()
click to toggle source
# File lib/apidoco_dsl/api_doc.rb, line 71 def doc_folder doc_namespace.split('::').map(&:underscore).map(&:downcase).join('/') + "/#{doc_resource.to_s.underscore}/" end
example_request(path: nil) { || ... }
click to toggle source
# File lib/apidoco_dsl/api_doc.rb, line 46 def example_request(path: nil) ex = {} ex['request'] = yield if block_given? ex['request'] = JSON.parse(File.read(path)) if path @doc_examples << ex end
example_response(path: nil) { || ... }
click to toggle source
# File lib/apidoco_dsl/api_doc.rb, line 53 def example_response(path: nil) ex = {} ex['response'] = yield if block_given? ex['response'] = JSON.parse(File.read(path)) if path @doc_examples << ex end
method_missing(name, *args)
click to toggle source
Calls superclass method
# File lib/apidoco_dsl/api_doc.rb, line 37 def method_missing(name, *args) return set_attribute(name, *args) if SETTABLE.include?(name.to_s) super end
param_key()
click to toggle source
# File lib/apidoco_dsl/api_doc.rb, line 26 def param_key "Document" end
returns(code: 200, &block)
click to toggle source
# File lib/apidoco_dsl/api_doc.rb, line 30 def returns(code: 200, &block) @doc_return_code = translate_return_code(code) @param_destination = 'response' self.instance_exec(&block) if block_given? @param_destination = 'request' end
set_attribute(name, value)
click to toggle source
# File lib/apidoco_dsl/api_doc.rb, line 42 def set_attribute(name, value) self.send(:"doc_#{name}=", value) end
to_json()
click to toggle source
# File lib/apidoco_dsl/api_doc.rb, line 79 def to_json doc = {} doc['published'] = doc_published unless doc_published.nil? doc['name'] = doc_name unless doc_name.nil? doc['end_point'] = doc_endpoint unless doc_endpoint.nil? doc['http_method'] = doc_http_method unless doc_http_method.nil? doc['params'] = unroll_parameters(doc_request_params, []) unless doc_request_params.empty? doc['response_params'] = unroll_parameters(doc_response_params, []) unless doc_response_params.empty? doc['header'] = doc_header unless doc_header.nil? doc['description'] = doc_description unless doc_description.nil? doc['examples'] = doc_examples unless doc_examples.empty? doc['sort_order'] = doc_sort_order unless doc_sort_order.nil? doc['return_code'] = doc_return_code doc['markdown'] = doc_markdown return JSON.pretty_generate(doc) end
Private Instance Methods
push_to()
click to toggle source
# File lib/apidoco_dsl/api_doc.rb, line 175 def push_to self.send(:"doc_#{@param_destination}_params") end
translate_return_code(code)
click to toggle source
# File lib/apidoco_dsl/api_doc.rb, line 99 def translate_return_code(code) trans = { 100 => :continue, 101 => :switching_protocols, 102 => :processing, 200 => :ok, 201 => :created, 202 => :accepted, 203 => :non_authoritative_information, 204 => :no_content, 205 => :reset_content, 206 => :partial_content, 207 => :multi_status, 226 => :im_used, 300 => :multiple_choices, 301 => :moved_permanently, 302 => :found, 303 => :see_other, 304 => :not_modified, 305 => :use_proxy, 307 => :temporary_redirect, 400 => :bad_request, 401 => :unauthorized, 402 => :payment_required, 403 => :forbidden, 404 => :not_found, 405 => :method_not_allowed, 406 => :not_acceptable, 407 => :proxy_authentication_required, 408 => :request_timeout, 409 => :conflict, 410 => :gone, 411 => :length_required, 412 => :precondition_failed, 413 => :request_entity_too_large, 414 => :request_uri_too_long, 415 => :unsupported_media_type, 416 => :requested_range_not_satisfiable, 417 => :expectation_failed, 422 => :unprocessable_entity, 423 => :locked, 424 => :failed_dependency, 426 => :upgrade_required, 500 => :internal_server_error, 501 => :not_implemented, 502 => :bad_gateway, 503 => :service_unavailable, 504 => :gateway_timeout, 505 => :http_version_not_supported, 507 => :insufficient_storage, 510 => :not_extended }.invert trans[code] || code end
unroll_parameters(params, unrolled = [])
click to toggle source
# File lib/apidoco_dsl/api_doc.rb, line 155 def unroll_parameters(params, unrolled = []) # Unrolling parameters is a matter of recursively seeking down through each base set of params for # each of _their_ params, and assigning/setting keys appropriately. params.each do |pr| if pr.params.any? unrolled << pr.to_h duped = pr.params.dup duped.each{|d| d.parent = pr; } unroll_parameters(duped, unrolled) else unrolled << pr.to_h end end return unrolled end