Class: RailsSkills::Generators::InstallGenerator

Inherits:
Rails::Generators::Base
  • Object
show all
Includes:
SymlinkSupport
Defined in:
lib/generators/rails_skills/install/install_generator.rb

Instance Method Summary collapse

Instance Method Details

#copy_claude_settings ⇒ Object



45
46
47
# File 'lib/generators/rails_skills/install/install_generator.rb', line 45

def copy_claude_settings
  template "settings.local.json.tt", "#{RailsSkills::CLAUDE_DIR}/settings.local.json"
end

#create_claude_directory ⇒ Object



23
24
25
26
27
28
# File 'lib/generators/rails_skills/install/install_generator.rb', line 23

def create_claude_directory
  empty_directory RailsSkills::CLAUDE_DIR
  empty_directory "#{RailsSkills::CLAUDE_DIR}/commands"
  empty_directory "#{RailsSkills::CLAUDE_DIR}/rules"
  empty_directory "#{RailsSkills::CLAUDE_DIR}/agents" unless options[:skip_agents]
end

#create_codex_directory ⇒ Object



30
31
32
# File 'lib/generators/rails_skills/install/install_generator.rb', line 30

def create_codex_directory
  empty_directory RailsSkills::CODEX_DIR
end

#create_default_agent ⇒ Object



85
86
87
88
89
# File 'lib/generators/rails_skills/install/install_generator.rb', line 85

def create_default_agent
  return if options[:skip_agents]

  template "agents/rails-developer.md.tt", "#{RailsSkills::CLAUDE_DIR}/agents/rails-developer.md"
end

#create_skills_directory ⇒ Object



16
17
18
19
20
21
# File 'lib/generators/rails_skills/install/install_generator.rb', line 16

def create_skills_directory
  empty_directory RailsSkills::SKILLS_DIR
  RailsSkills::DEFAULT_CATEGORIES.each do |category|
    empty_directory "#{RailsSkills::SKILLS_DIR}/#{category}"
  end
end

#create_skills_targets ⇒ Object



34
35
36
37
38
39
40
41
42
43
# File 'lib/generators/rails_skills/install/install_generator.rb', line 34

def create_skills_targets
  RailsSkills::SKILL_TARGETS.each do |target|
    dest = File.join(destination_root, target)
    if File.symlink?(dest)
      File.delete(dest)
      say_status :remove, "#{target} (old symlink)", :yellow
    end
    empty_directory target
  end
end

#install_default_skills ⇒ Object



49
50
51
52
53
54
55
56
57
58
59
# File 'lib/generators/rails_skills/install/install_generator.rb', line 49

def install_default_skills
  # services - empty with .keep
  install_skill_folder("services")

  # stack - rails, rails_skills skills
  install_skill("stack/rails")
  install_skill("stack/rails_skills")

  # workflows - commit skill
  install_skill("workflows/commit")
end

#install_rules_and_commands ⇒ Object



79
80
81
82
83
# File 'lib/generators/rails_skills/install/install_generator.rb', line 79

def install_rules_and_commands
  install_rule("code-style")
  install_rule("testing")
  install_command("quality")
end


61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
# File 'lib/generators/rails_skills/install/install_generator.rb', line 61

def link_skills
  skills_root = File.join(destination_root, RailsSkills::SKILLS_DIR)
  return unless File.directory?(skills_root)

  Dir.children(skills_root).sort.each do |category|
    category_dir = File.join(skills_root, category)
    next unless File.directory?(category_dir)
    next if category.start_with?(".")

    Dir.children(category_dir).sort.each do |name|
      next unless File.directory?(File.join(category_dir, name))
      next if name.start_with?(".")

      create_skill_symlink(name, "#{RailsSkills::SKILLS_DIR}/#{category}/#{name}")
    end
  end
end

#show_instructions ⇒ Object



91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
# File 'lib/generators/rails_skills/install/install_generator.rb', line 91

def show_instructions
  say ""
  say "RailsSkills installed successfully!", :green
  say ""
  say "Directory structure:", :yellow
  say "  skills/"
  say "    services/      <- service-specific skills"
  say "    stack/         <- technology stack skills (rails)"
  say "    workflows/     <- workflow skills (commit)"
  RailsSkills::SKILL_TARGETS.each do |target|
    say "  #{target}/"
    say "    rails/         -> ../../skills/stack/rails"
    say "    commit/        -> ../../skills/workflows/commit"
    say "    rails_skills/  -> ../../skills/stack/rails_skills"
  end
  say ""
  say "Skills are flattened into #{RailsSkills::SKILL_TARGETS.join(' and ')}", :blue
  say ""
  say "Next steps:", :yellow
  say "  rails g rails_skills:skill services/payments    # Create a service skill"
  say "  rails g rails_skills:skill stack/postgres      # Create a stack skill"
  say "  rails g rails_skills:skill workflows/deploy    # Create a workflow skill"
  say "  rails g rails_skills:skill my_folder/my_skill  # Custom folders work too"
  say ""
end