Class: Ask::Skills::Formatter

Inherits:
Object
  • Object
show all
Defined in:
lib/ask/skills/formatter.rb

Instance Method Summary collapse

Constructor Details

#initialize(skills) ⇒ Formatter

Returns a new instance of Formatter.



6
7
8
# File 'lib/ask/skills/formatter.rb', line 6

def initialize(skills)
  @skills = skills.respond_to?(:skills) ? skills.skills : skills
end

Instance Method Details

#to_prompt_sectionObject



10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
# File 'lib/ask/skills/formatter.rb', line 10

def to_prompt_section
  return "" if @skills.empty? || @skills.values.all? { |s| s.is_a?(Array) && s.empty? }

  lines = ["", "## Available Skills", ""]
  @skills.each_value do |skill|
    line = skill.to_prompt_entry
    if skill.tags.any?
      line += " [#{skill.tags.join(", ")}]"
    end
    lines << line
  end
  lines << ""
  lines << "When a task matches a skill's description, load it for step-by-step methodology."
  lines << ""
  lines.join("\n")
end

#to_xmlObject



27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
# File 'lib/ask/skills/formatter.rb', line 27

def to_xml
  return "" if @skills.empty?

  lines = ["", "<available_skills>"]
  @skills.each_value do |skill|
    lines << "  <skill>"
    lines << "    <name>#{escape_xml(skill.name)}</name>"
    lines << "    <description>#{escape_xml(skill.description)}</description>"
    if skill.tags.any?
      lines << "    <tags>#{escape_xml(skill.tags.join(", "))}</tags>"
    end
    if skill.siblings.any?
      lines << "    <siblings>"
      skill.siblings.each do |category, files|
        lines << "      <#{category}>"
        files.each { |f| lines << "        <file>#{escape_xml(f)}</file>" }
        lines << "      </#{category}>"
      end
      lines << "    </siblings>"
    end
    lines << "  </skill>"
  end
  lines << "</available_skills>"
  lines.join("\n")
end