# Ruby Pro

> 当用 Ruby/Rails 写惯用代码、做元编程 DSL、开发 gem、写测试或做性能优化时使用；产出符合社区惯例的 Ruby 代码、Rails MVC 应用、RSpec/Minitest 测试、gem 规范与 benchmark-ips 基准；不适用于其他语言运行时、仅需基础语法解释、或无法改动 Gemfile 与工具链的场景；触发词：Rails、ActiveRecord、元编程、RSpec、RuboCop、gem 开发

- Skill: `findscripter/ruby-pro` (Agent Skill)
- Install (CLI): `npx skillmds@latest add findscripter/ruby-pro`
- Raw SKILL.md: https://api.skillmd.com/api/skills/findscripter/ruby-pro/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Coding & Dev Tools
- License: MIT
- Author: findscripter (https://skillmd.com/u/findscripter)
- Updated: 2026-09-17
- Page: https://skillmd.com/skills/findscripter/ruby-pro

---

## 何时使用

适用：
- 用 Ruby/Rails 写惯用、可维护的代码，或对既有 Ruby 工程做架构与代码质量评审。
- 设计元编程能力（模块/mixin、DSL），用块与枚举器抽象复杂逻辑。
- 开发 gem 并管理依赖与版本；用 RSpec/Minitest 补测试；做性能剖析与优化。

不该用（负边界）：
- 需要其他语言或运行时。
- 只需基础 Ruby 语法解释。
- 无法改动 Gemfile、`.rubocop.yml` 或工具链（代码生成与优化无从落地）。

## 步骤

1. 对齐前提：确认 Ruby/Rails 版本、目标（功能/重构/调优）、约束与必需输入。
2. 选型：依据场景选惯用法——元编程做 DSL、块与枚举器做迭代、组合优先于继承。
3. 实现：遵循 Ruby/Rails 惯例与命名，异常用 `rescue/ensure` 显式处理，配套 RSpec/Minitest。
4. 优化：先测量后优化——用 benchmark-ips / ruby-prof 定位热点再调；可读性优先于性能。
5. 验收：跑 RuboCop 静态检查与测试套件，输出重构建议；相关时附 Gemfile 与 `.rubocop.yml`。

## 指令

- 拥抱 Ruby 表达力：善用块、`Enumerable`、关键字参数；元编程（`define_method`、`method_missing`、`Module#included`）服务于清晰的 DSL，而非炫技。
- 异常处理显式化：`begin/rescue/ensure` 收尾资源，按具体异常类捕获，不裸 `rescue`。
- 可读性优先、性能其次：只在有 benchmark 数据时调优，禁止凭直觉。
- 测试用 RSpec 或 Minitest，配 fixtures/mocks；Rails 走 MVC，胖模型瘦控制器。
- 关键命令：
  - 运行测试：`bundle exec rspec` / `bundle exec rake test`
  - 静态检查与自动修复：`bundle exec rubocop` / `rubocop -a`
  - 性能基准：`require "benchmark/ips"` → `Benchmark.ips { |x| x.report(...) ; x.compare! }`
  - 剖析热点：`ruby-prof` / `stackprof`
  - gem 脚手架与发布：`bundle gem <name>` → 在 `.gemspec` 用语义化版本 → `gem build` / `gem push`

## 示例

用 `Benchmark.ips` 对比两种实现：

```ruby
require "benchmark/ips"

Benchmark.ips do |x|
  x.report("map")     { (1..1000).map { |i| i * 2 } }
  x.report("each_with_object") do
    (1..1000).each_with_object([]) { |i, a| a << i * 2 }
  end
  x.compare!
end
```

典型请求：
- "把这段遗留 Ruby 重构成惯用写法并补 RSpec"
- "为这个配置层设计一个简洁的 DSL"
- "用 benchmark-ips 定位并优化这段循环的瓶颈"
- "搭一个带语义化版本和测试的 gem 骨架"

## 注意事项

- 输出不能替代环境内的实测、测试与专家评审；落地前务必跑通测试套件与 RuboCop。
- 元编程会牺牲可读性与调试性，仅在收益明确时使用；优先简单方案。
- 输入、权限、安全边界或验收标准缺失时，先停下来澄清再动手。
- 仅在任务确实落在上述范围内时使用本技能。

## 互见

- Rails 后端架构、ActiveRecord 查询优化相关技能。
- 通用性能剖析与遗留代码现代化方法论。
- 测试策略与覆盖率（RSpec/Minitest）相关技能。

---
采编自 sickn33/antigravity-awesome-skills（MIT）。

