class Aristotle::Presenter

Public Class Methods

new(klass) click to toggle source
# File lib/aristotle/presenter.rb, line 3
def initialize(klass)
  @klass = klass
end

Public Instance Methods

html_rules(show_code: true) click to toggle source
# File lib/aristotle/presenter.rb, line 7
def html_rules(show_code: true)
  @klass.commands.map do |command_title, commands|
    "<strong>#{command_title}</strong>"+
        "<ul>"+
        commands.map do |command|
          "<li>"+
              format_fragment(command, :action, show_code: show_code)+
              " <strong style='color:blue'>IF</strong> "+
              format_fragment(command, :condition, show_code: show_code)+
              "</li>"
        end.join +
        "</ul>"
  end.join('<br>').html_safe
end

Protected Instance Methods

find_code(file, line_number) click to toggle source
# File lib/aristotle/presenter.rb, line 48
def find_code(file, line_number)
  lines = load_file(file)
  first_line = lines[line_number - 1]
  indention = first_line.index(/[^ ]/)

  code_lines = lines[(line_number - 1)..-1]
  end_regexp = Regexp.new('^' + (' ' * indention) + 'end *')
  to = code_lines.find_index { |line| line =~ end_regexp } + 1

  code_lines.first(to).map { |line| line[indention..-1] }
rescue
  nil
end
format_fragment(fragment, part, show_code: true) click to toggle source
# File lib/aristotle/presenter.rb, line 24
def format_fragment(fragment, part, show_code: true)
  return '' if part != :action && part != :condition

  text = fragment.send(part).to_s
  text.gsub!(/'([^']+)'/, '<strong>\1</strong>')

  proc = fragment.send("#{part}_proc")

  return "<span style='color:red'>#{text}</span>" if proc.blank?
  return text unless show_code

  code = find_code(*proc.source_location) || 'no code found'

  code_block = "<span style='color:#aaaaaa;'>#{proc.source_location.join(':')}</span>\n"+
      "<span style='color:#333333'>#{code.join("\n")}</span>"

  "<span style='position:relative;cursor:help;' onmouseover='this.children[0].style.display=\"block\";' onmouseout='this.children[0].style.display=\"none\";'>"+
      "<pre style='position:absolute;cursor:text;display:none;background:#ffffff;margin-top:0;padding:6px 8px;box-shadow:2px 2px 8px rgba(0,0,0,0.3);z-index:30000;'>"+
          "#{code_block}"+
      "</pre>"+
      "#{text}"+
  "</span>"
end
load_file(file) click to toggle source
# File lib/aristotle/presenter.rb, line 62
def load_file(file)
  @files ||= {}
  @files[file] ||= open(file).read.split("\n").map(&:rstrip)
end