module Flex::ClassProxy::Templates::Doc

Public Instance Methods

doc(*names) click to toggle source
# File lib/flex/class_proxy/templates/doc.rb, line 6
        def doc(*names)
          names = templates.keys if names.empty?
          doc = "\n"
          names.each do |name|
            next unless templates.include?(name)
            block = ''
            temp = templates[name]
            meth_call = [context, name].join('.')
            block << <<-meth_call
########## #{meth_call} ##########
#{'-' * temp.class.to_s.length}
#{temp.class}
#{temp.to_source}
meth_call
            temp.partials.each do |par_name|
              par = partials[par_name]
              block << <<-partial
#{'-' * par.class.to_s.length}
#{par.class}
#{par.to_source}
partial
            end
            block << "\nUsage:\n"
            block << build_usage(meth_call, temp)
            block << "\n "
            doc << block.split("\n").map{|l| '#  ' + l}.join("\n")
            doc << <<-meth.gsub(/^ {14}/m,'')

def #{meth_call}(*vars)
  ## this is a stub, used for reference
  super
end

meth
          end
          puts doc
        end
info(*names) click to toggle source
# File lib/flex/deprecation.rb, line 116
def info(*names)
  Deprecation.warn 'flex.info', 'flex.doc'
  doc *names
end
usage(name) click to toggle source
# File lib/flex/class_proxy/templates/doc.rb, line 44
def usage(name)
  meth_call = [context, name].join('.')
  puts build_usage(meth_call, templates[name])
end

Private Instance Methods

build_usage(meth_call, temp) click to toggle source
# File lib/flex/class_proxy/templates/doc.rb, line 51
def build_usage(meth_call, temp)
  variables = temp.instance_eval do
                interpolate
                @base_variables.deep_merge @host_flex && @host_flex.variables, @temp_variables
              end
  all_tags  = temp.tags + temp.partials
  return meth_call if all_tags.size == 0
  lines = all_tags.map do |t|
            comments = 'partial' if t.to_s[0] == '_'
            line = ['', t.inspect]
            line + if variables.has_key?(t)
                     ["#{variables[t].inspect},", comments_to_s(comments)]
                   else
                     ["#{to_code(t)},", comments_to_s(comments, 'required')]
                   end
          end
  lines.sort! { |a,b| b[3] <=> a[3] }
  lines.first[0] = meth_call
  lines.last[2].chop!
  max = lines.transpose.map { |c| c.map(&:length).max }
  lines.map { |line| "%-#{max[0]}s %-#{max[1]}s => %-#{max[2]}s  %s" % line }.join("\n")
end
comments_to_s(*comments) click to toggle source
# File lib/flex/class_proxy/templates/doc.rb, line 74
def comments_to_s(*comments)
  comments = comments.compact
  return '' if comments == []
  "# #{comments.join(' ')}"
end
to_code(name) click to toggle source
# File lib/flex/class_proxy/templates/doc.rb, line 80
def to_code(name)
  keys = name.to_s.split('.').map{|s| s =~ /^[0..9]+$/ ? s.to_i : s.to_sym}
  code = keys.shift.to_s
  return code if keys.empty?
  keys.each{|k| code << "[#{k.inspect}]"}
  code
end