Ruby

Write reliable Ruby avoiding mutable string traps, block pitfalls, and metaprogramming bugs.

Audits

Pass

Install

openclaw skills install ruby

Quick Reference

TopicFile
Mutable strings, object equalityobjects.md
Proc vs lambda, return behaviorblocks.md
Visibility, method_missingmethods.md
Array/hash mutation trapscollections.md
define_method, eval trapsmetaprogramming.md
ActiveRecord, N+1, callbacksrails.md

Critical Rules

  • Strings are mutable — s = "hi"; s << "!"; t = s means t also has "!"
  • == vs equal? vs eql?== value, equal? identity, eql? hash equality
  • Default hash value is shared — Hash.new([]) shares same array, use block form
  • return in proc returns from enclosing method — use lambda for local return
  • Block variable shadows outer scope — x = 1; [2].each { |x| }; x is still 1 (3.0+)
  • method_missing without respond_to_missing? — breaks respond_to? checks
  • private in Ruby is per-object — self.private_method fails, implicit receiver works
  • ||= doesn't work for false/nil distinction — false ||= true replaces false
  • Frozen string literals — # frozen_string_literal: true makes strings immutable
  • Symbol#to_proc&:method_name only works with no-argument methods
  • rescue => e without type — catches StandardError, not Exception
  • ensure always runs — even after return, use for cleanup