Skip to content
Back to skills

Create Step

ASecurity

Cria um novo step para o bootstrap macOS. Use quando o usuário pedir para adicionar uma nova configuração ou instalação ao bootstrap.

  • 666 stars
  • 0 votes
  • 0 copies
  • 2 views
  • Added February 8, 2026
toolsrubyshell

Security analysis

A100/100

Scanned February 12, 2026

npx -y skills add majiayu000/claude-skill-registry --skill create-step --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Create Step?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Create Step
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/majiayu000-create-step/badge)](https://www.skillsdirectory.com/skills/majiayu000-create-step)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
name: create-step
description: Cria um novo step para o bootstrap macOS. Use quando o usuário pedir para adicionar uma nova configuração ou instalação ao bootstrap.
---

# Criar Novo Step para Bootstrap

## Estrutura de um Step

Cada step precisa de dois arquivos:
1. `lib/bootstrap/steps/<nome>.rb` - Implementação
2. `test/steps/<nome>_test.rb` - Testes

## Template do Step

```ruby
# frozen_string_literal: true

require_relative '../step'

module Bootstrap
  module Steps
    class NomeDoStep < Step
      def name
        'Nome para Exibição'
      end

      def installed?
        # Retorna true se já está configurado (idempotência)
        # Exemplos:
        # - shell.file_exists?(path)
        # - shell.directory_exists?(path)
        # - shell.success?('which comando')
        # - Verificar conteúdo de arquivo de configuração
      end

      def install!
        # Executa a instalação/configuração
        # Use shell.run(command) para comandos não-interativos
        # Use shell.run_interactive(command) para comandos que precisam de TTY
      end

      private

      # Métodos auxiliares privados
    end
  end
end
```

## Template do Teste

```ruby
# frozen_string_literal: true

require_relative '../test_helper'
require 'bootstrap/steps/<nome>'

class NomeDoStepTest < Minitest::Test
  class MockShell
    attr_accessor :commands_run, :run_results, :existing_files, :success_results

    def initialize
      @commands_run = []
      @run_results = {}
      @existing_files = []
      @success_results = {}
    end

    def run(command)
      @commands_run << command
      @run_results[command] || Struct.new(:success?, :stderr, :output).new(true, '', '')
    end

    def run_interactive(command)
      @commands_run << command
      @run_results[command] || Struct.new(:success?, :stderr, :output).new(true, '', '')
    end

    def file_exists?(path)
      @existing_files.include?(path)
    end

    def directory_exists?(path)
      @existing_files.include?(path)
    end

    def success?(command)
      @commands_run << command
      @success_results.fetch(command, false)
    end
  end

  def setup
    @shell = MockShell.new
    @step = Bootstrap::Steps::NomeDoStep.new(shell: @shell)
  end

  def test_name
    assert_equal 'Nome para Exibição', @step.name
  end

  def test_installed_returns_false_when_not_configured
    # Configure mock para retornar estado não-instalado
    refute @step.installed?
  end

  def test_installed_returns_true_when_configured
    # Configure mock para retornar estado instalado
    assert @step.installed?
  end

  def test_install_executes_expected_commands
    @step.install!
    # Verifique comandos executados
    assert_includes @shell.commands_run, 'comando esperado'
  end

  def test_run_skips_when_already_configured
    # Configure mock para estado instalado
    result = @step.run!
    assert_equal :skipped, result[:status]
  end
end
```

## Checklist

1. [ ] Criar `lib/bootstrap/steps/<nome>.rb`
2. [ ] Implementar `name`, `installed?`, `install!`
3. [ ] Criar `test/steps/<nome>_test.rb`
4. [ ] Adicionar require em `bin/bootstrap`
5. [ ] Adicionar step na lista de steps em `bin/bootstrap`
6. [ ] Rodar `rake test` para validar

## Comandos Shell Disponíveis

| Método | Uso |
|--------|-----|
| `shell.run(cmd)` | Executa comando, captura output |
| `shell.run_interactive(cmd)` | Executa com TTY (para sudo, etc) |
| `shell.success?(cmd)` | Retorna true/false |
| `shell.file_exists?(path)` | Verifica arquivo |
| `shell.directory_exists?(path)` | Verifica diretório |

## Resultado de shell.run

```ruby
result = shell.run('comando')
result.success?  # true/false
result.output    # stdout (stripped)
result.stdout    # stdout raw
result.stderr    # stderr
```

## Exemplos de installed?

```ruby
# Verificar se programa existe
def installed?
  shell.success?('which programa')
end

# Verificar se arquivo de configuração existe
def installed?
  shell.file_exists?(CONFIG_PATH)
end

# Verificar valor de configuração
def installed?
  result = shell.run('defaults read com.apple.dock tilesize')
  result.success? && result.output.strip.to_i == 36
end

# Combinar múltiplas verificações
def installed?
  programa_instalado? && configuracao_correta?
end
```

## Exemplos de install!

```ruby
# Instalar via Homebrew
def install!
  result = shell.run('brew install programa')
  raise "Falhou: #{result.stderr}" unless result.success?
end

# Comando interativo (precisa de senha)
def install!
  result = shell.run_interactive('sudo comando')
  raise 'Falhou' unless result.success?
end

# Criar arquivo de configuração
def install!
  File.write(CONFIG_PATH, CONFIG_CONTENT)
end

# Múltiplas etapas
def install!
  instalar_dependencia
  configurar_sistema
  reiniciar_servico
end
```

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…

Newsletter

Get the weekly list of safe new skills, and the ones we pulled.