Help us improve
Share bugs, ideas, or general feedback.
From ruby-rails
Provides Ruby implementations of all 23 GoF design patterns with guidance for object-oriented design, refactoring, architecture problems, and specific patterns like Factory, Singleton, Observer.
npx claudepluginhub el-feo/ai-context --plugin ruby-railsHow this skill is triggered — by the user, by Claude, or both
Slash command
/ruby-rails:design-patterns-rubyThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
<objective>
Covers 26 Gang of Four design patterns with PHP 8.3+ implementations, UML diagrams, and practical use cases.
Guides Ruby OOP: classes, modules, inheritance, mixins, method visibility (public/protected/private), super calls. Use for designing and refactoring Ruby object-oriented code.
Gang of Four patterns (Creational, Structural, Behavioral) and when to apply them.
Share bugs, ideas, or general feedback.
<quick_start> <pattern_selection> Object Creation Problems → Creational Patterns
Structural Problems → Structural Patterns
Behavioral Problems → Behavioral Patterns
<ruby_abstract_method> Ruby doesn't have built-in abstract methods. Use:
def abstract_method
raise NotImplementedError, "#{self.class} has not implemented method '#{__method__}'"
end
</ruby_abstract_method> </quick_start>
<when_to_use> Use this skill when encountering:
<pattern_quick_reference> Factory Method - Define interface for creation, let subclasses decide type
class Creator
def factory_method
raise NotImplementedError
end
def operation
product = factory_method
"Working with #{product.operation}"
end
end
class ConcreteCreator < Creator
def factory_method
ConcreteProduct.new
end
end
File: Ruby/src/factory_method/conceptual/main.rb
Singleton (thread-safe)
class Singleton
@instance_mutex = Mutex.new
private_class_method :new
def self.instance
return @instance if @instance
@instance_mutex.synchronize { @instance ||= new }
@instance
end
end
File: Ruby/src/singleton/conceptual/thread_safe/main.rb
See references/creational-patterns.md for Abstract Factory, Builder, Prototype.
**Decorator** - Wrap objects to add behavior dynamically ```ruby class Decorator < Component def initialize(component) @component = component enddef operation @component.operation end end
class ConcreteDecorator < Decorator def operation "Decorated(#{@component.operation})" end end
decorated = DecoratorB.new(DecoratorA.new(ConcreteComponent.new))
File: `Ruby/src/decorator/conceptual/main.rb`
**Adapter** - Convert interface to expected format
```ruby
class Adapter < Target
def initialize(adaptee)
@adaptee = adaptee
end
def request
"Adapted: #{@adaptee.specific_request}"
end
end
File: Ruby/src/adapter/conceptual/main.rb
See references/structural-patterns.md for Bridge, Composite, Facade, Flyweight, Proxy.
**Strategy** - Swap algorithms at runtime ```ruby class Context attr_writer :strategydef initialize(strategy) @strategy = strategy end
def execute @strategy.do_algorithm(data) end end
context = Context.new(StrategyA.new) context.strategy = StrategyB.new
File: `Ruby/src/strategy/conceptual/main.rb`
**Observer** - Notify subscribers of state changes
```ruby
class Subject
def initialize
@observers = []
end
def attach(observer)
@observers << observer
end
def detach(observer)
@observers.delete(observer)
end
def notify
@observers.each { |observer| observer.update(self) }
end
end
File: Ruby/src/observer/conceptual/main.rb
State - Object behavior changes based on internal state
class Context
attr_accessor :state
def transition_to(state)
@state = state
@state.context = self
end
def request
@state.handle
end
end
File: Ruby/src/state/conceptual/main.rb
See references/behavioral-patterns.md for Chain of Responsibility, Command, Iterator, Mediator, Memento, Template Method, Visitor. </pattern_quick_reference>
<ruby_idioms> <deep_copy> For Prototype pattern, use Marshal for deep copying:
Marshal.load(Marshal.dump(object))
</deep_copy>
<thread_safety> For Singleton and shared resources, use Mutex:
@mutex = Mutex.new
@mutex.synchronize { @instance ||= new }
</thread_safety>
<private_constructor> For Singleton pattern:
private_class_method :new
</private_constructor>
- `attr_reader :name` - read-only - `attr_writer :name` - write-only - `attr_accessor :name` - read/write<type_docs> Use YARD-style documentation:
# @param [String] value
# @return [Boolean]
def method(value)
end
</type_docs> </ruby_idioms>
<running_examples>
ruby Ruby/src/<pattern>/conceptual/main.rb
# Examples:
ruby Ruby/src/singleton/conceptual/thread_safe/main.rb
ruby Ruby/src/observer/conceptual/main.rb
ruby Ruby/src/strategy/conceptual/main.rb
ruby Ruby/src/decorator/conceptual/main.rb
Requires Ruby 3.2+. </running_examples>
<detailed_references>
<success_criteria>
ruby Ruby/src/<pattern>/conceptual/main.rb
</success_criteria>