class Billy::Documentation

Attributes

method[RW]

Documentation includes the method definition and any commented lines preceding the method definition

mode[RW]
owner[W]

Public Class Methods

new(args) click to toggle source
# File lib/billygoat/documentation.rb, line 14
def initialize(args)
  args.each { |k,v| public_send("#{k}=",v) }
end

Public Instance Methods

block_parameters() click to toggle source
# File lib/billygoat/documentation.rb, line 71
def block_parameters
  parameters
    .select{ |pair| pair.first == :block }
    .map{ |pair| pair.last}
end
build() click to toggle source
# File lib/billygoat/documentation.rb, line 102
def build
  doc = lines
  doc[-1] = "goat #{owner} #{name} "
  required_parameters.each do |parameter|
    doc[-1] << "[#{parameter}] "
  end
  optional_parameters.each do |parameter|
    doc[-1] << "(#{parameter}) "
  end
  variable_parameters.each do |parameter|
    doc[-1] << "(*#{parameter}) "
  end
  block_parameters.each do |parameter|
    doc[-1] << "{&#{parameter}} "
  end
  doc << "\n"
  doc
end
build_markdown() click to toggle source
# File lib/billygoat/documentation.rb, line 121
def build_markdown
  doc = build
  doc.pop
  doc.map! { |line| line.match(/^\s*#/) ? "    #{line}" : line }
  doc.unshift "### #{doc.pop}"
  doc << "\n"
  doc.map! { |line| line.gsub(/(\[)/,'\[').gsub(/(\])/,'\]') }
  doc
end
file_name() click to toggle source
# File lib/billygoat/documentation.rb, line 33
def file_name
  @file_name ||= self.method.source_location.first
end
inspect() click to toggle source
# File lib/billygoat/documentation.rb, line 18
def inspect
  return unless file_name && line_number
  case mode
  when :markdown
    build_markdown
  else
    build
  end
end
inspect_markdown() click to toggle source
# File lib/billygoat/documentation.rb, line 28
def inspect_markdown
  return unless file_name && line_number
  build_markdown
end
line_number() click to toggle source
# File lib/billygoat/documentation.rb, line 37
def line_number
  @line_number ||= self.method.source_location.last
end
lines() click to toggle source
# File lib/billygoat/documentation.rb, line 98
def lines
  source[range].map(&unindent)
end
name() click to toggle source
# File lib/billygoat/documentation.rb, line 49
def name
  @name ||= self.method.name.downcase
end
optional_parameters() click to toggle source
# File lib/billygoat/documentation.rb, line 59
def optional_parameters
  parameters
    .select{ |pair| pair.first == :opt }
    .map{ |pair| pair.last}
end
owner() click to toggle source
# File lib/billygoat/documentation.rb, line 45
def owner
  @owner ||= self.method.owner.name.downcase
end
parameters() click to toggle source
# File lib/billygoat/documentation.rb, line 41
def parameters
  @parameters ||= self.method.parameters
end
range() click to toggle source
# File lib/billygoat/documentation.rb, line 85
def range
  head = tail = line_number - 1
  tail.downto(0).each do
    break unless source[head-1].match(/^\s*#/)
    head -= 1
  end
  (head..tail)
end
required_parameters() click to toggle source
# File lib/billygoat/documentation.rb, line 53
def required_parameters
  parameters
    .select{ |pair| pair.first == :req }
    .map{ |pair| pair.last}
end
source() click to toggle source
# File lib/billygoat/documentation.rb, line 81
def source
  source_file.split("\n")
end
source_file() click to toggle source
# File lib/billygoat/documentation.rb, line 77
def source_file
  File.read(file_name)
end
unindent() click to toggle source
# File lib/billygoat/documentation.rb, line 94
def unindent
  ->(line) { line.gsub(/^\s*/, '') }
end
variable_parameters() click to toggle source
# File lib/billygoat/documentation.rb, line 65
def variable_parameters
  parameters
    .select{ |pair| pair.first == :rest }
    .map{ |pair| pair.last}
end