134 lines
		
	
	
		
			3.5 KiB
		
	
	
	
		
			Ruby
		
	
	
	
		
		
			
		
	
	
			134 lines
		
	
	
		
			3.5 KiB
		
	
	
	
		
			Ruby
		
	
	
	
| 
								 | 
							
								lib_dir = File.expand_path(File.join(File.dirname(__FILE__), '../../../lib'))
							 | 
						||
| 
								 | 
							
								$LOAD_PATH.unshift(lib_dir)
							 | 
						||
| 
								 | 
							
								$LOAD_PATH.uniq!
							 | 
						||
| 
								 | 
							
								require 'yard-google-code'
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								include Helpers::ModuleHelper
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								def init
							 | 
						||
| 
								 | 
							
								  sections :header, :box_info, :pre_docstring, T('docstring'), :children,
							 | 
						||
| 
								 | 
							
								    :constant_summary, [T('docstring')], :inherited_constants,
							 | 
						||
| 
								 | 
							
								    :inherited_methods,
							 | 
						||
| 
								 | 
							
								    :methodmissing, [T('method_details')],
							 | 
						||
| 
								 | 
							
								    :attribute_details, [T('method_details')],
							 | 
						||
| 
								 | 
							
								    :method_details_list, [T('method_details')]
							 | 
						||
| 
								 | 
							
								end
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								def pre_docstring
							 | 
						||
| 
								 | 
							
								  return if object.docstring.blank?
							 | 
						||
| 
								 | 
							
								  erb(:pre_docstring)
							 | 
						||
| 
								 | 
							
								end
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								def children
							 | 
						||
| 
								 | 
							
								  @inner = [[:modules, []], [:classes, []]]
							 | 
						||
| 
								 | 
							
								  object.children.each do |child|
							 | 
						||
| 
								 | 
							
								    @inner[0][1] << child if child.type == :module
							 | 
						||
| 
								 | 
							
								    @inner[1][1] << child if child.type == :class
							 | 
						||
| 
								 | 
							
								  end
							 | 
						||
| 
								 | 
							
								  @inner.map! {|v| [v[0], run_verifier(v[1].sort_by {|o| o.name.to_s })] }
							 | 
						||
| 
								 | 
							
								  return if (@inner[0][1].size + @inner[1][1].size) == 0
							 | 
						||
| 
								 | 
							
								  erb(:children)
							 | 
						||
| 
								 | 
							
								end
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								def methodmissing
							 | 
						||
| 
								 | 
							
								  mms = object.meths(:inherited => true, :included => true)
							 | 
						||
| 
								 | 
							
								  return unless @mm = mms.find {|o| o.name == :method_missing && o.scope == :instance }
							 | 
						||
| 
								 | 
							
								  erb(:methodmissing)
							 | 
						||
| 
								 | 
							
								end
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								def method_listing(include_specials = true)
							 | 
						||
| 
								 | 
							
								  return @smeths ||= method_listing.reject {|o| special_method?(o) } unless include_specials
							 | 
						||
| 
								 | 
							
								  return @meths if @meths
							 | 
						||
| 
								 | 
							
								  @meths = object.meths(:inherited => false, :included => false)
							 | 
						||
| 
								 | 
							
								  @meths = sort_listing(prune_method_listing(@meths))
							 | 
						||
| 
								 | 
							
								  @meths
							 | 
						||
| 
								 | 
							
								end
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								def special_method?(meth)
							 | 
						||
| 
								 | 
							
								  return true if meth.name(true) == '#method_missing'
							 | 
						||
| 
								 | 
							
								  return true if meth.constructor?
							 | 
						||
| 
								 | 
							
								  false
							 | 
						||
| 
								 | 
							
								end
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								def attr_listing
							 | 
						||
| 
								 | 
							
								  return @attrs if @attrs
							 | 
						||
| 
								 | 
							
								  @attrs = []
							 | 
						||
| 
								 | 
							
								  [:class, :instance].each do |scope|
							 | 
						||
| 
								 | 
							
								    object.attributes[scope].each do |name, rw|
							 | 
						||
| 
								 | 
							
								      @attrs << (rw[:read] || rw[:write])
							 | 
						||
| 
								 | 
							
								    end
							 | 
						||
| 
								 | 
							
								  end
							 | 
						||
| 
								 | 
							
								  @attrs = sort_listing(prune_method_listing(@attrs, false))
							 | 
						||
| 
								 | 
							
								end
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								def constant_listing
							 | 
						||
| 
								 | 
							
								  return @constants if @constants
							 | 
						||
| 
								 | 
							
								  @constants = object.constants(:included => false, :inherited => false)
							 | 
						||
| 
								 | 
							
								  @constants += object.cvars
							 | 
						||
| 
								 | 
							
								  @constants = run_verifier(@constants)
							 | 
						||
| 
								 | 
							
								  @constants
							 | 
						||
| 
								 | 
							
								end
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								def sort_listing(list)
							 | 
						||
| 
								 | 
							
								  list.sort_by {|o| [o.scope.to_s, o.name.to_s.downcase] }
							 | 
						||
| 
								 | 
							
								end
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								def docstring_full(obj)
							 | 
						||
| 
								 | 
							
								  docstring = ""
							 | 
						||
| 
								 | 
							
								  if obj.tags(:overload).size == 1 && obj.docstring.empty?
							 | 
						||
| 
								 | 
							
								    docstring = obj.tag(:overload).docstring
							 | 
						||
| 
								 | 
							
								  else
							 | 
						||
| 
								 | 
							
								    docstring = obj.docstring
							 | 
						||
| 
								 | 
							
								  end
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  if docstring.summary.empty? && obj.tags(:return).size == 1 && obj.tag(:return).text
							 | 
						||
| 
								 | 
							
								    docstring = Docstring.new(obj.tag(:return).text.gsub(/\A([a-z])/) {|x| x.upcase }.strip)
							 | 
						||
| 
								 | 
							
								  end
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  docstring
							 | 
						||
| 
								 | 
							
								end
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								def docstring_summary(obj)
							 | 
						||
| 
								 | 
							
								  docstring_full(obj).summary
							 | 
						||
| 
								 | 
							
								end
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								def groups(list, type = "Method")
							 | 
						||
| 
								 | 
							
								  if groups_data = object.groups
							 | 
						||
| 
								 | 
							
								    others = list.select {|m| !m.group }
							 | 
						||
| 
								 | 
							
								    groups_data.each do |name|
							 | 
						||
| 
								 | 
							
								      items = list.select {|m| m.group == name }
							 | 
						||
| 
								 | 
							
								      yield(items, name) unless items.empty?
							 | 
						||
| 
								 | 
							
								    end
							 | 
						||
| 
								 | 
							
								  else
							 | 
						||
| 
								 | 
							
								    others = []
							 | 
						||
| 
								 | 
							
								    group_data = {}
							 | 
						||
| 
								 | 
							
								    list.each do |meth|
							 | 
						||
| 
								 | 
							
								      if meth.group
							 | 
						||
| 
								 | 
							
								        (group_data[meth.group] ||= []) << meth
							 | 
						||
| 
								 | 
							
								      else
							 | 
						||
| 
								 | 
							
								        others << meth
							 | 
						||
| 
								 | 
							
								      end
							 | 
						||
| 
								 | 
							
								    end
							 | 
						||
| 
								 | 
							
								    group_data.each {|group, items| yield(items, group) unless items.empty? }
							 | 
						||
| 
								 | 
							
								  end
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  scopes(others) {|items, scope| yield(items, "#{scope.to_s.capitalize} #{type} Summary") }
							 | 
						||
| 
								 | 
							
								end
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								def scopes(list)
							 | 
						||
| 
								 | 
							
								  [:class, :instance].each do |scope|
							 | 
						||
| 
								 | 
							
								    items = list.select {|m| m.scope == scope }
							 | 
						||
| 
								 | 
							
								    yield(items, scope) unless items.empty?
							 | 
						||
| 
								 | 
							
								  end
							 | 
						||
| 
								 | 
							
								end
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								def mixed_into(object)
							 | 
						||
| 
								 | 
							
								  unless globals.mixed_into
							 | 
						||
| 
								 | 
							
								    globals.mixed_into = {}
							 | 
						||
| 
								 | 
							
								    list = run_verifier Registry.all(:class, :module)
							 | 
						||
| 
								 | 
							
								    list.each {|o| o.mixins.each {|m| (globals.mixed_into[m.path] ||= []) << o } }
							 | 
						||
| 
								 | 
							
								  end
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  globals.mixed_into[object.path] || []
							 | 
						||
| 
								 | 
							
								end
							 |