Module: OpenApi
- Defined in:
- lib/open_api.rb,
lib/open_api/dsl.rb,
lib/open_api/config.rb,
lib/open_api/router.rb,
lib/oas_objs/helpers.rb,
lib/oas_objs/ref_obj.rb,
lib/open_api/dsl/api.rb,
lib/open_api/version.rb,
lib/oas_objs/param_obj.rb,
lib/oas_objs/header_obj.rb,
lib/oas_objs/schema_obj.rb,
lib/open_api/config_dsl.rb,
lib/oas_objs/example_obj.rb,
lib/open_api/dsl/helpers.rb,
lib/open_api/support/tip.rb,
lib/oas_objs/callback_obj.rb,
lib/oas_objs/response_obj.rb,
lib/oas_objs/media_type_obj.rb,
lib/open_api/dsl/components.rb,
lib/oas_objs/combined_schema.rb,
lib/oas_objs/request_body_obj.rb,
lib/oas_objs/schema_obj_helpers.rb
Defined Under Namespace
Modules: Config, ConfigDSL, DSL, Helpers, Router, Tip
Constant Summary
collapse
- VERSION =
"2.2.0"
Class Method Summary
collapse
Class Method Details
.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
end
|
.generate_docs(read_on_controller) ⇒ Object
27
28
29
30
31
32
|
# File 'lib/open_api.rb', line 27
def generate_docs(read_on_controller)
return Tip.no_config if Config.docs.keys.blank?
traverse_controllers if read_on_controller
Dir[*Array(Config.doc_location)].each { |file| require file }
Config.docs.keys.map { |name| [ name, generate_doc(name) ] }.to_h
end
|
.init_hash(doc_name) ⇒ Object
50
51
52
53
54
55
56
57
58
59
60
|
# File 'lib/open_api.rb', line 50
def init_hash(doc_name)
settings = Config.docs[doc_name]
doc = { openapi: '3.0.0', **settings.slice(:info, :servers) }.merge!(
security: settings[:global_security] || [], tags: [ ], paths: { },
components: {
securitySchemes: settings[:securitySchemes] || { },
schemas: { }, parameters: { }, requestBodies: { }
}
)
[ settings, doc ]
end
|
.traverse_controllers ⇒ Object
62
63
64
65
66
|
# File 'lib/open_api.rb', line 62
def traverse_controllers
Dir['./app/controllers/**/*_controller.rb'].each do |file|
file.sub('./app/controllers/', '').sub('.rb', '').camelize.constantize
end
end
|
.write_docs(if: true, read_on_controller: true) ⇒ Object
16
17
18
19
20
21
22
23
24
25
|
# File 'lib/open_api.rb', line 16
def write_docs(if: true, read_on_controller: true)
(docs = generate_docs(read_on_controller)) and Tip.loaded
return unless binding.local_variable_get :if
FileUtils.mkdir_p Config.file_output_path
docs.each do |name, doc|
File.write "#{Config.file_output_path}/#{name}.json", JSON.pretty_generate(doc)
Tip.generated(name.to_s.rjust(docs.keys.map(&:size).max))
end
end
|