Refactoring - Ruby Edition
Extract Method
Inline Method
Inline Temp
Replace Temp with Query
Replace Temp with Chain
Introduce Explaining Variable
Split Temporary Variable
Remove Assignments to Parameters
Replace Method with Method Object
Substitute Algorithm
Replace Loop with Collection Closure Method
Extract Surrounding Method
Introduce Class Annotation
Introduce Named Parameter
Remove Named Parameter
Remove Unused Default Parameter
Dynamic Method Definition
Replace Dynamic Receptor with Dynamic Method Definition
Isolate Dynamic Receptor
Move Eval from Runtime to Parse Time
Move Method
Move Field
Extract Class
Inline Class
Hide Delegate
Remove Middle Man
Self Encapsulate Field
Replace Data Value with Object
Change Value to Reference
Change Reference to Value
Replace Array with Object
Replace Hash with Object
Change Unidirectional Association to Bidirectional
Change Bidirectional Association to Unidirectional
Replace Magic Number with Symbolic Constant
Encapsulate Collection
Replace Record with Data Class
Replace Type Code with Polymorphism
Replace Type Code with Module Extension
Replace Type Code with State/Strategy
Replace Subclass with Fields
Lazily Initialized Attribute
Eagerly Initialized Attribute
Decompose Conditional
Recompose Conditional
Consolidate Conditional Expression
Consolidate Duplicate Conditional Fragments
Remove Control Flag
Replace Nested Conditional with Guard Clauses
Replace Conditional with Polymorphism
Introduce Null Object
Introduce Assertion
Rename Method
Add Parameter
Remove Parameter
Separate Query from Modifier
Parameterize Method
Replace Parameter with Explicit Methods
Preserve Whole Object
Replace Parameter with Method
Introduce Parameter Object
Remove Setting Method
Hide Method
Replace Constructor with Factory Method
Replace Error Code with Exception
Replace Exception with Test
Introduce Gateway
Introduce Expression Builder
Pull Up Method
Push Down Method
Extract Module
Inline Module
Extract Subclass
Introduce Inheritance
Collapse Hierarchy
Form Template Method
Replace Inheritance with Delegation
Replace Delegation with Hierarchy
Replace Abstract Superclass with Module
The Nature of the Game
Why Big Refactorings Are Important
Four Big Refactorings
Tease Apart Inheritance
Convert Procedural Design to Objects
Separate Domain from Presentation
Extract Hierarchy