class Fdoc::Endpoint
Endpoints represent the schema for an API endpoint The consume_* methods will raise exceptions if input differs from the schema
Attributes
endpoint_path[R]
service[R]
Public Class Methods
new(endpoint_path, service=Fdoc::Service.default_service)
click to toggle source
# File lib/fdoc/endpoint.rb, line 10 def initialize(endpoint_path, service=Fdoc::Service.default_service) @endpoint_path = endpoint_path @schema = YAML.load_file(@endpoint_path) @service = service end
Public Instance Methods
consume_request(params, successful=true)
click to toggle source
# File lib/fdoc/endpoint.rb, line 16 def consume_request(params, successful=true) if successful schema = set_additional_properties_false_on(request_parameters.dup) JSON::Validator.validate!(schema, stringify_keys(params)) end end
consume_response(params, status_code, successful=true)
click to toggle source
# File lib/fdoc/endpoint.rb, line 23 def consume_response(params, status_code, successful=true) response_code = response_codes.find do |rc| rc["successful"] == successful && ( rc["status"] == status_code || # 200 rc["status"].to_i == status_code # "200 OK" ) end if !response_code raise Fdoc::UndocumentedResponseCode, 'Undocumented response: %s, successful: %s' % [ status_code, successful ] elsif successful schema = set_additional_properties_false_on(response_parameters.dup) JSON::Validator.validate!(schema, stringify_keys(params)) else true end end
deprecated?()
click to toggle source
properties
# File lib/fdoc/endpoint.rb, line 57 def deprecated? @schema["deprecated"] end
description()
click to toggle source
# File lib/fdoc/endpoint.rb, line 61 def description @schema["description"] end
path()
click to toggle source
# File lib/fdoc/endpoint.rb, line 49 def path @path ||= endpoint_path. gsub(service.service_dir, ""). match(/\/?(.*)[-\/][A-Z]+\.fdoc/)[1] end
request_parameters()
click to toggle source
# File lib/fdoc/endpoint.rb, line 65 def request_parameters @schema["requestParameters"] ||= {} end
response_codes()
click to toggle source
# File lib/fdoc/endpoint.rb, line 73 def response_codes @schema["responseCodes"] ||= [] end
response_parameters()
click to toggle source
# File lib/fdoc/endpoint.rb, line 69 def response_parameters @schema["responseParameters"] ||= {} end
verb()
click to toggle source
# File lib/fdoc/endpoint.rb, line 45 def verb @verb ||= endpoint_path.match(/([A-Z]*)\.fdoc$/)[1] end
Protected Instance Methods
set_additional_properties_false_on(value)
click to toggle source
default additionalProperties on objects to false create a copy, so we don’t mutate the input
# File lib/fdoc/endpoint.rb, line 81 def set_additional_properties_false_on(value) if value.kind_of? Hash copy = value.dup if value["type"] == "object" || value.has_key?("properties") copy["additionalProperties"] ||= false end value.each do |key, hash_val| unless key == "additionalProperties" copy[key] = set_additional_properties_false_on(hash_val) end end copy elsif value.kind_of? Array copy = value.map do |arr_val| set_additional_properties_false_on(arr_val) end else value end end
stringify_keys(obj)
click to toggle source
# File lib/fdoc/endpoint.rb, line 102 def stringify_keys(obj) case obj when Hash result = {} obj.each do |k, v| result[k.to_s] = stringify_keys(v) end result when Array then obj.map { |v| stringify_keys(v) } else obj end end