Loading...
Loading...
This skill guides writing of new Ruby code following modern Ruby 3.x syntax, Sandi Metz's 4 Rules for Developers, and idiomatic Ruby best practices. Use when creating new Ruby files, writing Ruby methods, or refactoring Ruby code to ensure adherence to clarity, simplicity, and maintainability standards.
npx skill4agent add majesticlabs-dev/majestic-marketplace ruby-coderage = 49
name = "David"
user = { name:, age: }references/ruby-style-conventions.md# When exceeding 100 lines, extract secondary concerns:
class UserProfilePresenter # Presentation logic
class UserProfileValidator # Validation logic
class UserProfileNotifier # Notification logic# Good - 5 lines or fewer
def process_order
validate_order
calculate_totals
apply_discounts
finalize_payment
end
# Avoid - extract when too long
def process_order
return unless items.any?
return unless valid_address?
self.subtotal = items.sum(&:price)
self.tax = subtotal * tax_rate
self.total = subtotal + tax
charge_customer
send_confirmation
end# Parameter object when data is related
def create_post(post_params)
Post.create(user: post_params.user, title: post_params.title, content: post_params.content)
endlink_toform_for# Good - single object via facade
class DashboardController < ApplicationController
def show
@dashboard = DashboardFacade.new(current_user)
end
end
# Avoid - multiple instance variables
class DashboardController < ApplicationController
def show
@user = current_user
@posts = @user.posts.recent
@notifications = @user.notifications.unread
end
end@_calculation@user.profile.avatarMutexclass Configuration
@instance_mutex = Mutex.new
def self.instance
return @instance if @instance
@instance_mutex.synchronize { @instance ||= new }
end
enddef activate_user
return if user.active?
user.update(active: true)
send_activation_email unless email_sent?
end| Rule | Valid Exception |
|---|---|
| 100 lines | Clear SRP justification required |
| 5 lines | Complex but irreducible algorithms |
| 4 params | Rails view helpers exempt |
| 1 object | Simple views without facades |
references/sandi-metz.mdreferences/ruby-tips.mdreferences/ruby-style-conventions.md