Home > Store

Refactoring in Ruby

Register your product to gain access to bonus material or receive a coupon.

Refactoring in Ruby

eBook (Watermarked)

  • Your Price: $28.79
  • List Price: $35.99
  • Includes EPUB, MOBI, and PDF
  • About eBook Formats
  • This eBook includes the following formats, accessible from your Account page after purchase:

    ePub EPUB The open industry format known for its reflowable content and usability on supported mobile devices.

    MOBI MOBI The eBook format compatible with the Amazon Kindle and Amazon Kindle applications.

    Adobe Reader PDF The popular standard, used most often with the free Adobe® Reader® software.

    This eBook requires no passwords or activation to read. We customize your eBook by discreetly watermarking it with your name, making it uniquely yours.


  • Copyright 2010
  • Edition: 1st
  • eBook (Watermarked)
  • ISBN-10: 0-13-265140-8
  • ISBN-13: 978-0-13-265140-0

The First Hands-On, Practical, All-Ruby Refactoring Workbook!

Refactoring–the art of improving the design of existing code–has taken the world by storm. So has Ruby. Now, for the first time, there’s a refactoring workbook designed from the ground up for the dynamic Ruby language.

Refactoring in Ruby gives you all the realistic, hands-on practice you need to refactor Ruby code quickly and effectively. You’ll discover how to recognize “code smells,” which signal opportunities for improvement, and then perfect your program’s design one small, safe step at a time.

The book shows you when and how to refactor with both legacy code and during new test-driven development, and walks you through real-world refactoring in detail. The workbook concludes with several applications designed to help practice refactoring in realistic domains, plus a handy code review checklist you’ll refer to again and again. Along the way, you’ll learn powerful lessons about designing higher quality Ruby software–lessons that will enable you to experience the joy of writing consistently great code.

Refactoring in Ruby will help you

  • Recognize why poor code design occurs, so you can prevent it from occurring in your own code
  • Master better design techniques that lead to more efficient, reliable, and maintainable software
  • Fix code that’s too long, large, or difficult to follow
  • Ferret out duplication, and express each idea “once and only once”
  • Recognize missing or inadequately formed classes
  • Simplify overly complex relationships between classes and their subclasses
  • Achieve the right balance of responsibilities among objects
  • Make your code easier to test and change
  • Cope with incomplete library modules, and fix runaway dependencies
  • Learn the next steps to take after you refactor

Sample Content

Table of Contents

Foreword xvii

Preface xix

About the Authors xxiii

Part I: The Art of Refactoring 1


Chapter 1: A Refactoring Example 3

Sparkline Script 3

Consistency 6

Testability 8

Greedy Methods 8

Greedy Module 9

Comments 10

Whole Objects 11

Feature Envy 12

Uncommunicative Names 14

Derived Values 15

Wabi-Sabi 17

Summing Up 18

What’s Next 18

Chapter 2: The Refactoring Cycle 19

What Is Refactoring? 19

Smells Are Problems 20

The Refactoring Cycle 21

When Are We Done? 21

Test-Driven/Behavior-Driven Development 22

Exercise 23

What’s Next 23

Chapter 3: Refactoring Step by Step 25

The Refactoring Environment 25

Inside a Refactoring 26

The Generic Refactoring Micro-Process 30

Exercises 33

What’s Next 33

Chapter 4: Refactoring Practice 35

Read Other Books 35

Practice Refactoring 35

Exercises to Try 36

Participate in the Community 37

Exercise 38

What’s Next 38

Part II: Code Smells 39


Chapter 5: Measurable Smells 41

Comments 42

Long Method 44

Large Module 46

Long Parameter List 48

Exercises 49

Chapter 6: Names 57

Type Embedded in Name 59

Uncommunicative Name 60

Inconsistent Names 61

Exercises 62

Chapter 7: Unnecessary Complexity 65

Dead Code 66

Speculative Generality 68

Greedy Method 70

Procedural Code 72

Dynamic Code Creation 74

Exercises 76

Chapter 8: Duplication 79

Derived Value 80

Repeated Value 81

Duplicated Code 83

Alternative Modules with Different Interfaces 85

Exercises 86

Chapter 9: Conditional Logic 93

Nil Check 94

Special Case 96

Complicated Boolean Expression 98

Control Coupling 100

Simulated Polymorphism 101

Exercises 103

Chapter 10: Data 107

Open Secret 108

Data Class 110

Data Clump 112

Temporary Field 114

Exercises 115

Chapter 11: Inheritance 125

Implementation Inheritance 126

Refused Bequest 128

Inappropriate Intimacy (Subclass Form) 130

Lazy Class 131

Exercises 133

Chapter 12: Responsibility 135

Feature Envy 136

Utility Function 138

Global Variable 140

Inappropriate Intimacy (General Form) 141

Message Chain 143

Middle Man 145

Greedy Module 146

Exercises 148

Chapter 13: Accommodating Change 153

Divergent Change 154

Shotgun Surgery 156

Parallel Inheritance Hierarchies 158

Combinatorial Explosion 159

Exercises 160

Chapter 14: Libraries 163

Incomplete Library Module 164

Reinvented Wheel 166

Runaway Dependencies 167

Exercises 168

Part III: Programs to Refactor 171


Chapter 15: A Simple Game 173

Code 173

Refactoring 175

Development Episodes 180

Chapter 16: Time Recording 183

Preparing the Soil 187

Substitute Algorithm 191

Optional Extras 194

Chapter 17: Calculator 197

Code 198

Refactoring 209

Thank You 211

Part IV: Appendices 213


Appendix A: Answers to Selected Questions 215

The Refactoring Cycle 215

Refactoring Step by Step 216

Refactoring Practice 216

Measurable Smells 217

Names 220

Unnecessary Complexity 222

Duplication 225

Conditional Logic 230

Data 233

Inheritance 237

Responsibility 239

Accommodating Change 241

Libraries 244

A Simple Game 246

Time Recording 247

Appendix B: Ruby Refactoring Tools 251

Code Smell Detectors 251

Environments with Refactoring Support 252

Bibliography 253

Index 255


Submit Errata

More Information

Unlimited one-month access with your purchase
Free Safari Membership