class APIDoc
@@paths = {}
attr_accessor :version, :path, :parameters, :paging, :filter, :sort, :result, :description, :example, :ui
def self.paths
@@paths
end
def initialize(version, path, doc)
@version = version
@path = path
@doc = doc
doc.each_pair do |k,v|
instance_variable_set("@#{k}".to_sym, v)
end
@@paths[version] = {} unless @@paths[version]
@@paths[version][path] = self
end
def complete_path
'/api/' + version.to_s + '/' + path
end
def show_paging
paging || 'no'
end
def show_parameters
return 'none' unless parameters
list = []
parameters.keys.sort{ |a,b| a.to_s <=> b.to_s }.each do |p|
list << "#{p} — #{parameters[p]}"
end
list.join('
')
end
def show_filter
return 'none' unless filter
list = []
filter.keys.sort{ |a,b| a.to_s <=> b.to_s }.each do |f|
list << "#{f} — #{filter[f][:doc]}"
end
list.join('
')
end
def show_example
return '' if example.nil?
params = []
example.each_pair do |k,v|
params << "#{k}=#{v}"
end
if params.empty?
return complete_path
else
return complete_path + '?' + params.join('&')
end
end
def show_ui
return '' if example.nil?
ui
end
def show_sort
return 'none' unless sort
sort.map{ |s| "#{s}" }.join(', ')
end
def show_result
return 'unknown' if result.nil?
return result if result.is_a?(String)
'
' + JSON.pretty_generate(result).gsub(/"(STRING|INT|FLOAT|BOOL)"/, '\1') + '' end end