Method: OpenApi.generate_doc

Defined in:
lib/open_api.rb

.generate_doc(doc_name) ⇒ Object



34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
# File 'lib/open_api.rb', line 34

def generate_doc(doc_name)
  settings, doc = init_hash(doc_name)
  [*(bdc = settings[:base_doc_classes]), *bdc.flat_map(&:descendants)].each do |kls|
    next if kls.oas[:doc].blank?
    doc[:paths].merge!(kls.oas[:apis])
    doc[:tags] << kls.oas[:doc][:tag]
    doc[:components].deep_merge!(kls.oas[:doc][:components] || { })
    OpenApi.routes_index[kls.oas[:route_base]] = doc_name
  end

  doc[:components].delete_if { |_, v| v.blank? }
  doc[:tags]  = doc[:tags].sort { |a, b| a[:name] <=> b[:name] }
  doc[:paths] = doc[:paths].sort.to_h
  OpenApi.docs[doc_name] = doc#.delete_if { |_, v| v.blank? }
end