Files
claude-engineering-plugin/plugins/compound-engineering/skills/dhh-ruby-style/references/resources.md
Kieran Klaassen 6c5b3e40db [2.9.0] Rename plugin to compound-engineering
BREAKING: Plugin renamed from compounding-engineering to compound-engineering.
Users will need to reinstall with the new name:

  claude /plugin install compound-engineering

Changes:
- Renamed plugin directory and all references
- Updated documentation counts (24 agents, 19 commands)
- Added julik-frontend-races-reviewer to docs

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-12-02 17:32:16 -08:00

180 lines
5.5 KiB
Markdown

# DHH Ruby Style Resources
Links to source material, documentation, and further reading for mastering DHH's Ruby/Rails style.
## Primary Source Code
### Campfire (Once)
The main codebase this style guide is derived from.
- **Repository**: https://github.com/basecamp/once-campfire
- **Messages Controller**: https://github.com/basecamp/once-campfire/blob/main/app/controllers/messages_controller.rb
- **JavaScript/Stimulus**: https://github.com/basecamp/once-campfire/tree/main/app/javascript
- **Deployment**: Single Docker container with SQLite
### Other 37signals Open Source
- **Solid Queue**: https://github.com/rails/solid_queue - Database-backed Active Job backend
- **Solid Cache**: https://github.com/rails/solid_cache - Database-backed Rails cache
- **Solid Cable**: https://github.com/rails/solid_cable - Database-backed Action Cable adapter
- **Kamal**: https://github.com/basecamp/kamal - Zero-downtime deployment tool
- **Turbo**: https://github.com/hotwired/turbo-rails - Hotwire's SPA-like page accelerator
- **Stimulus**: https://github.com/hotwired/stimulus - Modest JavaScript framework
## Articles & Blog Posts
### Controller Organization
- **How DHH Organizes His Rails Controllers**: https://jeromedalbert.com/how-dhh-organizes-his-rails-controllers/
- Definitive article on REST-pure controller design
- Documents the "only 7 actions" philosophy
- Shows how to create new controllers instead of custom actions
### Testing Philosophy
- **37signals Dev - Pending Tests**: https://dev.37signals.com/pending-tests/
- How 37signals handles incomplete tests
- Pragmatic approach to test coverage
- **37signals Dev - All About QA**: https://dev.37signals.com/all-about-qa/
- QA philosophy at 37signals
- Balance between automated and manual testing
### Architecture & Deployment
- **Deploy Campfire on Railway**: https://railway.com/deploy/campfire
- Single-container deployment example
- SQLite in production patterns
## Official Documentation
### Rails Guides (DHH's Vision)
- **Rails Doctrine**: https://rubyonrails.org/doctrine
- The philosophical foundation
- Convention over configuration explained
- "Optimize for programmer happiness"
### Hotwire
- **Hotwire**: https://hotwired.dev/
- Official Hotwire documentation
- Turbo Drive, Frames, and Streams
- **Turbo Handbook**: https://turbo.hotwired.dev/handbook/introduction
- **Stimulus Handbook**: https://stimulus.hotwired.dev/handbook/introduction
### Current Attributes
- **Rails API - CurrentAttributes**: https://api.rubyonrails.org/classes/ActiveSupport/CurrentAttributes.html
- Official documentation for the Current pattern
- Thread-isolated attribute singleton
## Videos & Talks
### DHH Keynotes
- **RailsConf Keynotes**: Search YouTube for "DHH RailsConf"
- Annual state of Rails addresses
- Philosophy and direction discussions
### Hotwire Tutorials
- **Hotwire Demo by DHH**: Original demo showing the approach
- **GoRails Hotwire Series**: Practical implementation tutorials
## Books
### By DHH & 37signals
- **Getting Real**: https://basecamp.com/gettingreal
- Product development philosophy
- Less is more approach
- **Remote**: Working remotely philosophy
- **It Doesn't Have to Be Crazy at Work**: Calm company culture
### Rails Books
- **Agile Web Development with Rails**: The original Rails book
- **The Rails Way**: Comprehensive Rails patterns
## Gems & Tools Used
### Core Stack
```ruby
# Gemfile patterns from Campfire
gem "rails", "~> 8.0"
gem "sqlite3"
gem "propshaft" # Asset pipeline
gem "importmap-rails" # JavaScript imports
gem "turbo-rails" # Hotwire Turbo
gem "stimulus-rails" # Hotwire Stimulus
gem "solid_queue" # Job backend
gem "solid_cache" # Cache backend
gem "solid_cable" # WebSocket backend
gem "kamal" # Deployment
gem "thruster" # HTTP/2 proxy
gem "image_processing" # Active Storage variants
```
### Development
```ruby
group :development do
gem "web-console"
gem "rubocop-rails-omakase" # 37signals style rules
end
group :test do
gem "capybara"
gem "selenium-webdriver"
end
```
## RuboCop Configuration
37signals publishes their RuboCop rules:
- **rubocop-rails-omakase**: https://github.com/rails/rubocop-rails-omakase
- Official Rails/37signals style rules
- Use this for consistent style enforcement
```yaml
# .rubocop.yml
inherit_gem:
rubocop-rails-omakase: rubocop.yml
# Project-specific overrides if needed
```
## Community Resources
### Forums & Discussion
- **Ruby on Rails Discourse**: https://discuss.rubyonrails.org/
- **Reddit r/rails**: https://reddit.com/r/rails
### Podcasts
- **Remote Ruby**: Ruby/Rails discussions
- **Ruby Rogues**: Long-running Ruby podcast
- **The Bike Shed**: Thoughtbot's development podcast
## Key Philosophy Documents
### The Rails Doctrine Pillars
1. Optimize for programmer happiness
2. Convention over Configuration
3. The menu is omakase
4. No one paradigm
5. Exalt beautiful code
6. Provide sharp knives
7. Value integrated systems
8. Progress over stability
9. Push up a big tent
### DHH Quotes to Remember
> "The vast majority of Rails controllers can use the same seven actions."
> "If you're adding a custom action, you're probably missing a controller."
> "Clear code is better than clever code."
> "The test file should be a love letter to the code."
> "SQLite is enough for most applications."
## Version History
This style guide is based on:
- Campfire source code (2024)
- Rails 8.0 conventions
- Ruby 3.3 syntax preferences
- Hotwire 2.0 patterns
Last updated: 2024