1
0
Fork 0
mirror of https://github.com/rails/rails.git synced 2022-11-09 12:12:34 -05:00
rails--rails/railties/lib/rails/api/generator.rb
Robin Dupret 94bab8662a Remove Active Storage duplicated classes from the API site
Since cb5af0d7, some classes that are under Active Storage are now
part of the API site.

However, these classes aren't nested under a definition of the
`ActiveStorage` module but rather name-spaced under it like
`ActiveStorage::Foo`.

Thus, these classes are present both under the ActiveStorage label
and at the root of the site's sidebar so we have to strip out
duplicates.

[ci skip]
2017-08-26 19:07:51 +02:00

37 lines
1.2 KiB
Ruby

# frozen_string_literal: true
require "sdoc"
class RDoc::Generator::API < RDoc::Generator::SDoc # :nodoc:
RDoc::RDoc.add_generator self
def generate_class_tree_level(classes, visited = {})
# Only process core extensions on the first visit and remove
# Active Storage duplicated classes that are at the top level
# since they aren't nested under a definition of the `ActiveStorage` module.
if visited.empty?
classes = classes.reject { |klass| active_storage?(klass) }
core_exts, classes = classes.partition { |klass| core_extension?(klass) }
super.unshift([ "Core extensions", "", "", build_core_ext_subtree(core_exts, visited) ])
else
super
end
end
private
def build_core_ext_subtree(classes, visited)
classes.map do |klass|
[ klass.name, klass.document_self_or_methods ? klass.path : "", "",
generate_class_tree_level(klass.classes_and_modules, visited) ]
end
end
def core_extension?(klass)
klass.name != "ActiveSupport" && klass.in_files.any? { |file| file.absolute_name.include?("core_ext") }
end
def active_storage?(klass)
klass.name != "ActiveStorage" && klass.in_files.all? { |file| file.absolute_name.include?("active_storage") }
end
end