Class: Aidp::Skills::Wizard::Builder

Inherits:
Object
  • Object
show all
Defined in:
lib/aidp/skills/wizard/builder.rb

Overview

Builds Skill objects from wizard responses

Takes user input from the wizard and constructs a valid Skill object. Handles template inheritance by merging metadata and content.

Examples:

Building a new skill

builder = Builder.new
responses = { id: "my_skill", name: "My Skill", ... }
skill = builder.build(responses)

Building from a template

builder = Builder.new(base_skill: template)
responses = { id: "my_skill", ... }
skill = builder.build(responses)  # Inherits from template

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(base_skill: nil) ⇒ Builder

Initialize builder

Parameters:

  • base_skill (Skill, nil) (defaults to: nil)

    Optional base skill for inheritance



28
29
30
# File 'lib/aidp/skills/wizard/builder.rb', line 28

def initialize(base_skill: nil)
  @base_skill = base_skill
end

Instance Attribute Details

#base_skillObject (readonly)

Returns the value of attribute base_skill.



23
24
25
# File 'lib/aidp/skills/wizard/builder.rb', line 23

def base_skill
  @base_skill
end

Instance Method Details

#build(responses) ⇒ Skill

Build a Skill from wizard responses

Parameters:

  • responses (Hash)

    Wizard responses

Options Hash (responses):

  • :id (String)

    Skill ID

  • :name (String)

    Skill name

  • :description (String)

    Description

  • :version (String)

    Version (default: “1.0.0”)

  • :expertise (Array<String>)

    Expertise areas

  • :keywords (Array<String>)

    Keywords

  • :when_to_use (Array<String>)

    When to use

  • :when_not_to_use (Array<String>)

    When not to use

  • :compatible_providers (Array<String>)

    Compatible providers

  • :content (String)

    Markdown content

Returns:

  • (Skill)

    Built skill



46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
# File 'lib/aidp/skills/wizard/builder.rb', line 46

def build(responses)
  # Merge with base skill if provided
  merged = if base_skill
    merge_with_base(responses)
  else
    responses
  end

  # Create skill with merged attributes
  # Note: source_path will be set by Writer when saved
  Skill.new(
    id: merged[:id],
    name: merged[:name],
    description: merged[:description],
    version: merged[:version] || "1.0.0",
    expertise: Array(merged[:expertise]),
    keywords: Array(merged[:keywords]),
    when_to_use: Array(merged[:when_to_use]),
    when_not_to_use: Array(merged[:when_not_to_use]),
    compatible_providers: Array(merged[:compatible_providers]),
    content: merged[:content],
    source_path: merged[:source_path] || "<pending>"
  )
end

#to_skill_md(skill) ⇒ String

Generate YAML frontmatter + content for writing

Parameters:

  • skill (Skill)

    Skill to serialize

Returns:

  • (String)

    Complete SKILL.md content



75
76
77
78
# File 'lib/aidp/skills/wizard/builder.rb', line 75

def to_skill_md(skill)
  frontmatter = build_frontmatter(skill)
  "#{frontmatter}\n#{skill.content}"
end