class ApiBlueprint::Collect::Preprocessor
Attributes
naming[R]
Public Class Methods
new(options = {})
click to toggle source
# File lib/api_blueprint/collect/preprocessor.rb, line 4 def initialize(options = {}) @naming = options[:naming] end
Public Instance Methods
action_name(request)
click to toggle source
# File lib/api_blueprint/collect/preprocessor.rb, line 14 def action_name(request) model = resource_name(request) prefix = %w{a e i o u}.include?(model[0].downcase) ? 'an' : 'a' if (n = naming) && (n = n[model.underscore]) && (n = n[request['route']['action']]) return n end case request['route']['action'] when 'index' "List all #{model.pluralize}" when 'show' "Retrieve single #{model.singularize}" when 'update' "Update an existing #{model.singularize}" when 'destroy' "Remove an existing #{model.singularize}" else request['route']['action'].humanize + " #{prefix} #{model.singularize}" end # request['route']['action'].humanize end
preprocess(info)
click to toggle source
# File lib/api_blueprint/collect/preprocessor.rb, line 38 def preprocess(info) any_request = info[:requests].first info[:path] = any_request['request']['path'].sub(/\d+$/, '{id}') info[:method] = any_request['request']['method'] info[:params] = collect_request_params(info[:requests]) info[:requests].each do |request| preprocess_request(request) end unique_requests = [] info[:requests].each do |request| unique_requests.reject! do |existing_request| existing_request[:title] == request[:title] end unique_requests.push(request) end info[:requests] = unique_requests end
resource_name(request)
click to toggle source
# File lib/api_blueprint/collect/preprocessor.rb, line 8 def resource_name(request) request['route']['controller'].singularize.split('_').map do |word| word.camelize end.join(' ').pluralize end
Private Instance Methods
clear_files(params)
click to toggle source
# File lib/api_blueprint/collect/preprocessor.rb, line 121 def clear_files(params) p = {} params.each do |key, value| if value.is_a?(Hash) if value['original_filename'].present? p[key] = "file <#{value['original_filename']}>" else p[key] = clear_files(value) end else p[key] = value end end p end
collect_merged_params(merged_params)
click to toggle source
# File lib/api_blueprint/collect/preprocessor.rb, line 75 def collect_merged_params(merged_params) params = {} merged_params.each do |param, value| if value.is_a?(Hash) if value['original_filename'].present? params[param] = { :type => 'file', :example => value['original_filename'] } else params[param] = { :type => 'nested', :params => collect_merged_params(value) } end elsif value.is_a?(Array) items = value.collect { |i| collect_merged_params(i) } params[param] = { :type => 'array', :params => items.inject(&:merge) } else if value == true || value == false type = 'boolean' value = value ? 'true' : 'false' elsif value.to_i.to_s == value type = 'integer' elsif value.to_f.to_s == value type = 'decimal' value = value.to_f.round(6).to_s else type = 'string' end params[param] = { :type => type, :example => value } end end params end
collect_request_params(requests)
click to toggle source
# File lib/api_blueprint/collect/preprocessor.rb, line 62 def collect_request_params(requests) merged_params = {} requests.sort_by do |request| -request['response']['status'] end.each do |request| merged_params.deep_merge!(request['request']['params']) end merged_params = Hash[merged_params.select { |k,v| ! v.is_a?(Hash) || v.any? }] collect_merged_params(merged_params) end
preprocess_headers(headers)
click to toggle source
# File lib/api_blueprint/collect/preprocessor.rb, line 166 def preprocess_headers(headers) header_key_length = headers.collect do |key, _| key.length end.max headers.collect do |key, value| "#{key.split("_").map(&:camelize).join("-")}:#{' ' * (header_key_length - key.length)} #{value}" end.join("\n") end
preprocess_request(request)
click to toggle source
# File lib/api_blueprint/collect/preprocessor.rb, line 139 def preprocess_request(request) if request['request']['params'].present? params = Hash[request['request']['params'].select { |k, v| ! v.is_a?(Hash) || v.any?}] params = clear_files(params) request[:params] = JSON.pretty_generate(params) if params.any? end if request['response']['body'].is_a?(Hash) request[:body] = JSON.pretty_generate(request['response']['body']) else request[:body] = request['response']['body'] end request[:request_headers] = preprocess_headers({ # 'Accept' => request['request']['accept'], 'Content-Type' => request['request']['content_type'] }.merge(request['request']['headers']).select { |_, v| v.present? }) request[:response_headers] = preprocess_headers({ 'Status' => request['response']['status'], 'Content-Type' => request['response']['content_type'] }) request[:title] = request['spec']['title_parts'][1..-1].join(' ') request[:title] = request[:title][0].upcase + request[:title][1..-1] end