class DocLoader
DocLoader
reads RDoc
documentation from RDoc
store and builds a hash that will be passed to HTML template or written to JSON file.
Public Class Methods
new(options, store)
click to toggle source
# File lib/rdoc/generator/doc_loader.rb, line 4 def initialize(options, store) @options = options @store = store end
Public Instance Methods
load()
click to toggle source
# File lib/rdoc/generator/doc_loader.rb, line 9 def load build_classes end
Private Instance Methods
build_classes()
click to toggle source
# File lib/rdoc/generator/doc_loader.rb, line 15 def build_classes classes = @store.all_classes_and_modules classes = classes.reject do |klass| skip_class? klass.full_name end class_list = classes.map do |klass| { id: klass.full_name.strip, title: klass.full_name, kind: get_class_kind(klass.full_name), comment: get_comment(klass), groups: build_groups(klass) } end stable_sort_by! class_list do |klass| klass[:id] end with_labels class_list end
build_groups(klass)
click to toggle source
# File lib/rdoc/generator/doc_loader.rb, line 39 def build_groups(klass) members = build_members(klass) groups = {} members.each do |member| group = get_builtin_group(member) next unless group group_id = make_id(klass, group[:type].to_s) unless groups.include? group_id groups[group_id] = group.merge( id: group_id, members: [] ) end groups[group_id][:members] << member end group_list = groups.values group_list.each do |group| stable_sort_by! group[:members] do |member| member[:id] end end stable_sort_by! group_list do |group| builtin_group_order.index group[:type] end group_list end
build_labels(object)
click to toggle source
# File lib/rdoc/generator/doc_loader.rb, line 139 def build_labels(object) labels = [] case object[:kind] when :module, :class, :constant, :included, :extended labels << { id: object[:kind].capitalize, title: object[:kind].to_s } when :method labels << if object[:level] == :class { id: 'ClassMethod', title: 'class method' } else { id: 'InstanceMethod', title: 'instance method' } end when :attribute labels << if object[:level] == :class { id: 'ClassAttribute', title: 'class attribute' } else { id: 'InstanceAttribute', title: 'instance attribute' } end end if object[:visibility] labels << { id: object[:visibility].capitalize, title: object[:visibility].to_s } end labels end
build_members(klass)
click to toggle source
# File lib/rdoc/generator/doc_loader.rb, line 74 def build_members(klass) members = [] method_members = build_members_from_list klass, klass.method_list do |member| member[:kind] = :method end attr_members = build_members_from_list klass, klass.attributes do |member| member[:kind] = :attribute end const_members = build_members_from_list klass, klass.constants do |member| member[:kind] = :constant end extends_members = build_members_from_list klass, klass.extends do |member| member[:kind] = :extended end include_members = build_members_from_list klass, klass.includes do |member| member[:kind] = :included end members.push(*method_members) members.push(*attr_members) members.push(*const_members) members.push(*extends_members) members.push(*include_members) with_labels members end
build_members_from_list(klass, member_list) { |member| ... }
click to toggle source
# File lib/rdoc/generator/doc_loader.rb, line 106 def build_members_from_list(klass, member_list) members = [] member_list.each do |m| next if skip_member? m.name member = {} member[:id] = make_id(klass, m.name) member[:title] = get_title(m) member[:signature] = get_signature(m) member[:comment] = get_comment(m) if m.respond_to? :markup_code member[:code] = m.markup_code if m.markup_code && m.markup_code != '' end if m.respond_to? :type member[:level] = m.type.to_sym if m.type end if m.respond_to? :visibility member[:visibility] = m.visibility.to_sym if m.visibility end yield member members << member end members end
builtin_group_order()
click to toggle source
# File lib/rdoc/generator/doc_loader.rb, line 224 def builtin_group_order %i[ ExtendedClasses IncludedModules Constants ClassAttributes ClassMethods InstanceAttributes InstanceMethods ] end
get_builtin_group(member)
click to toggle source
# File lib/rdoc/generator/doc_loader.rb, line 236 def get_builtin_group(member) case member[:kind] when :method case member[:level] when :instance { title: 'Instance Methods', type: :InstanceMethods, kind: :method, level: :instance } when :class { title: 'Class Methods', type: :ClassMethods, kind: :method, level: :class } end when :attribute case member[:level] when :instance { title: 'Instance Attributes', type: :InstanceAttributes, kind: :attribute, level: :instance } when :class { title: 'Class Attributes', type: :ClassAttributes, kind: :attribute, level: :class } end when :constant { title: 'Constants', type: :Constants, kind: :constant } when :extended { title: 'Extended Classes', type: :ExtendedClasses, kind: :extended } when :included { title: 'Included Modules', type: :IncludedModules, kind: :included } end end
get_class_kind(class_name)
click to toggle source
# File lib/rdoc/generator/doc_loader.rb, line 216 def get_class_kind(class_name) if @store.all_modules.select { |m| m.full_name == class_name }.size == 1 :module else :class end end
get_comment(object)
click to toggle source
# File lib/rdoc/generator/doc_loader.rb, line 208 def get_comment(object) if object.comment.respond_to? :text object.description.strip else object.comment end end
get_signature(object)
click to toggle source
# File lib/rdoc/generator/doc_loader.rb, line 201 def get_signature(object) if object.respond_to? :arglists return object.arglists if object.arglists end '' end
get_title(object)
click to toggle source
# File lib/rdoc/generator/doc_loader.rb, line 197 def get_title(object) object.name end
make_id(klass, name)
click to toggle source
# File lib/rdoc/generator/doc_loader.rb, line 193 def make_id(klass, name) klass.full_name.strip + '::' + name end
skip_class?(class_name)
click to toggle source
# File lib/rdoc/generator/doc_loader.rb, line 300 def skip_class?(class_name) if @options.sf_filter_classes @options.sf_filter_classes.match(class_name).nil? else false end end
skip_member?(member_name)
click to toggle source
# File lib/rdoc/generator/doc_loader.rb, line 308 def skip_member?(member_name) if @options.sf_filter_members @options.sf_filter_members.match(member_name).nil? else false end end
stable_sort_by!(array) { |e| ... }
click to toggle source
# File lib/rdoc/generator/doc_loader.rb, line 293 def stable_sort_by!(array) sorted = array.each_with_index.sort_by do |e, n| [yield(e), n] end array.replace(sorted.map(&:first)) end
with_labels(array)
click to toggle source
# File lib/rdoc/generator/doc_loader.rb, line 186 def with_labels(array) array.each do |object| object[:labels] = build_labels(object) end array end