413 lines
7.2 KiB
Markdown
413 lines
7.2 KiB
Markdown
# Ruby Bundler Skill
|
|
|
|
Intelligent Bundler operations for managing Ruby dependencies.
|
|
|
|
## When to Activate
|
|
|
|
This skill activates when:
|
|
- User requests to install gems or dependencies
|
|
- User mentions Gemfile or bundle commands
|
|
- User asks about dependency management
|
|
- Gemfile.lock conflicts detected
|
|
- Missing gem errors occur
|
|
|
|
## Core Capabilities
|
|
|
|
### 1. Install Dependencies
|
|
|
|
**Basic Installation:**
|
|
```bash
|
|
bundle install
|
|
```
|
|
|
|
**Install for specific groups:**
|
|
```bash
|
|
# Development and test only
|
|
bundle install --without production
|
|
|
|
# Production only
|
|
bundle install --deployment
|
|
```
|
|
|
|
**Update Bundler first if needed:**
|
|
```bash
|
|
gem install bundler
|
|
bundle install
|
|
```
|
|
|
|
### 2. Add New Gems
|
|
|
|
**Interactive Gem Addition:**
|
|
|
|
When user requests: "Add [gem_name] gem"
|
|
|
|
1. **Check if gem exists:**
|
|
- Search RubyGems.org
|
|
- Show latest version
|
|
- Show brief description
|
|
|
|
2. **Suggest Gemfile entry:**
|
|
```ruby
|
|
# For runtime dependency
|
|
gem 'gem_name', '~> X.Y'
|
|
|
|
# For development/test
|
|
group :development, :test do
|
|
gem 'gem_name', '~> X.Y'
|
|
end
|
|
|
|
# For test only
|
|
group :test do
|
|
gem 'rspec', '~> 3.12'
|
|
end
|
|
```
|
|
|
|
3. **Add to appropriate group:**
|
|
- Runtime dependencies → main section
|
|
- Testing tools → :test group
|
|
- Development tools → :development group
|
|
- Code quality → :development (rubocop, etc.)
|
|
|
|
4. **Install the gem:**
|
|
```bash
|
|
bundle install
|
|
```
|
|
|
|
5. **Verify installation:**
|
|
```bash
|
|
bundle list | grep gem_name
|
|
```
|
|
|
|
### 3. Update Dependencies
|
|
|
|
**Update all gems:**
|
|
```bash
|
|
bundle update
|
|
```
|
|
|
|
**Update specific gem:**
|
|
```bash
|
|
bundle update gem_name
|
|
```
|
|
|
|
**Update conservatively (patch versions only):**
|
|
```bash
|
|
bundle update --patch
|
|
```
|
|
|
|
**Update minor versions:**
|
|
```bash
|
|
bundle update --minor
|
|
```
|
|
|
|
### 4. Audit for Security
|
|
|
|
**Check for vulnerabilities:**
|
|
```bash
|
|
bundle audit
|
|
```
|
|
|
|
**Install bundler-audit if missing:**
|
|
```bash
|
|
gem install bundler-audit
|
|
bundle audit
|
|
```
|
|
|
|
**Update vulnerable gems:**
|
|
```bash
|
|
bundle audit check --update
|
|
```
|
|
|
|
### 5. Clean Up
|
|
|
|
**Remove unused gems:**
|
|
```bash
|
|
bundle clean
|
|
```
|
|
|
|
**Clean with forced removal:**
|
|
```bash
|
|
bundle clean --force
|
|
```
|
|
|
|
### 6. Troubleshoot Issues
|
|
|
|
**Common Issues & Solutions:**
|
|
|
|
**Issue: "Could not find gem 'X'"**
|
|
```bash
|
|
# Solution 1: Update bundler
|
|
gem install bundler
|
|
bundle install
|
|
|
|
# Solution 2: Clear cache
|
|
bundle clean --force
|
|
bundle install
|
|
|
|
# Solution 3: Update Gemfile.lock
|
|
rm Gemfile.lock
|
|
bundle install
|
|
```
|
|
|
|
**Issue: Version conflicts**
|
|
```bash
|
|
# Show dependency tree
|
|
bundle viz --without production
|
|
|
|
# Or use bundle info
|
|
bundle info gem_name
|
|
```
|
|
|
|
**Issue: Platform-specific gems**
|
|
```ruby
|
|
# In Gemfile
|
|
gem 'pg', platforms: :ruby
|
|
gem 'sqlite3', platforms: [:mingw, :mswin, :x64_mingw, :jruby]
|
|
```
|
|
|
|
### 7. Gem Information
|
|
|
|
**Show gem details:**
|
|
```bash
|
|
bundle info gem_name
|
|
```
|
|
|
|
**List all gems:**
|
|
```bash
|
|
bundle list
|
|
```
|
|
|
|
**Show outdated gems:**
|
|
```bash
|
|
bundle outdated
|
|
```
|
|
|
|
## Interactive Workflows
|
|
|
|
### Workflow 1: Add New Gem
|
|
|
|
**User Request:** "Add pry-byebug for debugging"
|
|
|
|
**Response:**
|
|
```
|
|
I'll add pry-byebug to your Gemfile.
|
|
|
|
Gem: pry-byebug
|
|
Latest Version: 3.10.1
|
|
Description: Combines pry with byebug for debugging
|
|
|
|
This is a development tool, so I'll add it to the :development group.
|
|
|
|
Adding to Gemfile:
|
|
```ruby
|
|
group :development do
|
|
gem 'pry-byebug', '~> 3.10'
|
|
end
|
|
```
|
|
|
|
Running bundle install...
|
|
✓ Successfully installed pry-byebug 3.10.1
|
|
|
|
You can now use it by adding `binding.pry` in your code.
|
|
```
|
|
|
|
### Workflow 2: Update Dependencies
|
|
|
|
**User Request:** "Update all my gems"
|
|
|
|
**Response:**
|
|
```
|
|
Before updating, let me check what's outdated:
|
|
|
|
Outdated gems:
|
|
- rspec: 3.11.0 → 3.12.0 (minor update)
|
|
- rubocop: 1.45.1 → 1.50.2 (minor update)
|
|
- nokogiri: 1.14.2 → 1.14.3 (patch update)
|
|
|
|
Recommendation:
|
|
1. Update patch versions first (safest): bundle update --patch
|
|
2. Update minor versions: bundle update --minor
|
|
3. Update all: bundle update
|
|
|
|
Would you like me to:
|
|
a) Update patch versions only (safest)
|
|
b) Update minor versions
|
|
c) Update everything
|
|
d) Update specific gems only
|
|
```
|
|
|
|
### Workflow 3: Security Audit
|
|
|
|
**User Request:** "Check for security issues"
|
|
|
|
**Response:**
|
|
```
|
|
Running security audit with bundler-audit...
|
|
|
|
Found 2 vulnerabilities:
|
|
|
|
1. HIGH: CVE-2023-XXXX in nokogiri (1.14.2)
|
|
Solution: Update to >= 1.14.3
|
|
|
|
2. MEDIUM: CVE-2023-YYYY in rack (2.2.6)
|
|
Solution: Update to >= 2.2.7
|
|
|
|
Recommended action:
|
|
bundle update nokogiri rack
|
|
|
|
Would you like me to update these gems now?
|
|
```
|
|
|
|
## Smart Suggestions
|
|
|
|
### Suggest Missing Gems
|
|
|
|
When user writes code using common patterns, suggest relevant gems:
|
|
|
|
**Pattern: API calls**
|
|
```ruby
|
|
# User writes HTTP client code
|
|
"I notice you're making HTTP requests. Consider adding:"
|
|
gem 'faraday', '~> 2.7' # Modern HTTP client
|
|
# or
|
|
gem 'httparty', '~> 0.21' # Simple HTTP client
|
|
```
|
|
|
|
**Pattern: JSON parsing**
|
|
```ruby
|
|
# User parses JSON
|
|
"For better JSON handling, consider:"
|
|
gem 'oj', '~> 3.14' # Faster JSON parser
|
|
```
|
|
|
|
**Pattern: Environment variables**
|
|
```ruby
|
|
# User uses ENV[]
|
|
"For environment management, you already have dotenv in common libs!"
|
|
gem 'dotenv', '~> 2.8'
|
|
```
|
|
|
|
**Pattern: Background jobs**
|
|
```ruby
|
|
# User mentions async/background processing
|
|
"For background jobs, you commonly use:"
|
|
gem 'sidekiq', '~> 7.0'
|
|
```
|
|
|
|
## Version Constraint Guidelines
|
|
|
|
**Pessimistic versioning (~>):**
|
|
```ruby
|
|
gem 'rails', '~> 7.0.4' # >= 7.0.4, < 7.1
|
|
gem 'rspec', '~> 3.12' # >= 3.12, < 4.0
|
|
```
|
|
|
|
**Exact version (avoid unless necessary):**
|
|
```ruby
|
|
gem 'specific_gem', '1.2.3' # Only 1.2.3
|
|
```
|
|
|
|
**Greater than or equal:**
|
|
```ruby
|
|
gem 'compatible_gem', '>= 2.0' # Any version >= 2.0
|
|
```
|
|
|
|
**Best Practice:** Use pessimistic (~>) for stability
|
|
|
|
## Gemfile Organization
|
|
|
|
**Recommended Structure:**
|
|
```ruby
|
|
source 'https://rubygems.org'
|
|
|
|
ruby '3.2.0' # Specify Ruby version
|
|
|
|
# Core runtime dependencies
|
|
gem 'dotenv'
|
|
gem 'pg', '~> 1.6'
|
|
|
|
# Development tools
|
|
group :development do
|
|
gem 'pry'
|
|
gem 'rubocop', require: false
|
|
end
|
|
|
|
# Test tools
|
|
group :test do
|
|
gem 'rspec', '~> 3.12'
|
|
gem 'factory_bot', '~> 6.5'
|
|
gem 'timecop'
|
|
end
|
|
|
|
# Development & Test
|
|
group :development, :test do
|
|
gem 'pry-byebug'
|
|
end
|
|
|
|
# Platform-specific
|
|
platforms :ruby do
|
|
gem 'sqlite3', '~> 2.1'
|
|
end
|
|
```
|
|
|
|
## Response Format
|
|
|
|
When performing bundle operations:
|
|
|
|
**Action Taken:**
|
|
- Command executed
|
|
- Result summary
|
|
|
|
**Changes:**
|
|
- New gems added
|
|
- Gems updated (old → new version)
|
|
- Gems removed
|
|
|
|
**Next Steps:**
|
|
- Suggested actions
|
|
- Related configuration needed
|
|
- Documentation references
|
|
|
|
## Configuration
|
|
|
|
Users can customize behavior in `.claude/settings.json`:
|
|
|
|
```json
|
|
{
|
|
"plugins": {
|
|
"rubyist": {
|
|
"bundler": {
|
|
"autoInstall": true,
|
|
"suggestGems": true,
|
|
"securityAudit": true,
|
|
"versionStrategy": "pessimistic"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
```
|
|
|
|
## Error Handling
|
|
|
|
Always wrap bundle commands with error handling:
|
|
|
|
```bash
|
|
if bundle install; then
|
|
echo "✓ Successfully installed dependencies"
|
|
else
|
|
echo "✗ Installation failed"
|
|
echo "Trying with bundle update..."
|
|
bundle update
|
|
fi
|
|
```
|
|
|
|
## Best Practices
|
|
|
|
1. **Always review Gemfile changes** before committing
|
|
2. **Commit Gemfile.lock** to ensure consistent environments
|
|
3. **Use bundle audit regularly** for security
|
|
4. **Keep gems updated** but test thoroughly
|
|
5. **Group gems appropriately** (development, test, production)
|
|
6. **Use pessimistic versioning** for stability
|
|
7. **Document why** specific versions are pinned
|