Synopses & Reviews
How do you write truly elegant code with Ruby? Ruby Best Practices is for programmers who want to use Ruby as experienced Rubyists do. Written by the developer of the Ruby project Prawn, this concise book explains how to design beautiful APIs and domain-specific languages with Ruby, as well as how to work with functional programming ideas and techniques that can simplify your code and make you more productive. You'll learn how to write code that's readable, expressive, and much more.
Ruby Best Practices will help you:
- Understand the secret powers unlocked by Ruby's code blocks
- Learn how to bend Ruby code without breaking it, such as mixing in modules on the fly
- Discover the ins and outs of testing and debugging, and how to design for testability
- Learn to write faster code by keeping things simple
- Develop strategies for text processing and file management, including regular expressions
- Understand how and why things can go wrong
- Reduce cultural barriers by leveraging Ruby's multilingual capabilities
This book also offers you comprehensive chapters on driving code through tests, designing APIs, and project maintenance. Learn how to make the most of this rich, beautiful language with Ruby Best Practices.
With this concise book, Ruby programmers learn how to design beautiful APIs and domain-specific languages, write code that's readable and expressive, and work with functional programming ideas and techniques that can simplify code and make them more productive.
About the Author
Gregory T. Brown is a New Haven, CT based Rubyist who spends most of his time on free software projects in Ruby. His main projects are Prawn and Ruport, and he is also the author of the upcoming book Ruby Best Practices. He also is in possession of a small bamboo plant that seems to be invincible, and he is quite proud of this accomplishment.
Table of Contents
Foreword; Preface; Audience; About This Book; Conventions Used in This Book; Using Code Examples; Safari® Books Online; How to Contact Us; Acknowledgments; Chapter 1: Driving Code Through Tests; 1.1 A Quick Note on Testing Frameworks; 1.2 Designing for Testability; 1.3 Testing Fundamentals; 1.4 Advanced Testing Techniques; 1.5 Keeping Things Organized; 1.6 Conclusions; Chapter 2: Designing Beautiful APIs; 2.1 Designing for Convenience: Ruport's Table( ) feature; 2.2 Ruby's Secret Power: Flexible Argument Processing; 2.3 Ruby's Other Secret Power: Code Blocks; 2.4 Avoiding Surprises; 2.5 Conclusions; Chapter 3: Mastering the Dynamic Toolkit; 3.1 BlankSlate: A BasicObject on Steroids; 3.2 Building Flexible Interfaces; 3.3 Implementing Per-Object Behavior; 3.4 Extending and Modifying Preexisting Code; 3.5 Building Classes and Modules Programmatically; 3.6 Registering Hooks and Callbacks; 3.7 Conclusions; Chapter 4: Text Processing and File Management; 4.1 Line-Based File Processing with State Tracking; 4.2 Regular Expressions; 4.3 Working with Files; 4.4 The tempfile Standard Library; 4.5 Text-Processing Strategies; 4.6 Conclusions; Chapter 5: Functional Programming Techniques; 5.1 Laziness Can Be a Virtue (A Look at lazy.rb); 5.2 Minimizing Mutable State and Reducing Side Effects; 5.3 Modular Code Organization; 5.4 Memoization; 5.5 Infinite Lists; 5.6 Higher-Order Procedures; 5.7 Conclusions; Chapter 6: When Things Go Wrong; 6.1 A Process for Debugging Ruby Code; 6.2 Capturing the Essence of a Defect; 6.3 Scrutinizing Your Code; 6.4 Working with Logger; 6.5 Conclusions; Chapter 7: Reducing Cultural Barriers; 7.1 m17n by Example: A Look at Ruby's CSV Standard Library; 7.2 Portable m17n Through UTF-8 Transcoding; 7.3 m17n in Standalone Scripts; 7.4 m17n-Safe Low-Level Text Processing; 7.5 Localizing Your Code; 7.6 Conclusions; Chapter 8: Skillful Project Maintenance; 8.1 Exploring a Well-Organized Ruby Project (Haml); 8.2 Conventions to Know About; 8.3 API Documentation via RDoc; 8.4 The RubyGems Package Manager; 8.5 Rake: Ruby's Built-in Build Utility; 8.6 Conclusions; Writing Backward-Compatible Code; Avoiding a Mess; Nonportable Features in Ruby 1.9; Workarounds for Common Issues; Conclusions; Leveraging Ruby's Standard Library; Why Do We Need a Standard Library?; Pretty-Printer for Ruby Objects (pp); Working with HTTP and FTP (open-uri); Working with Dates and Times (date); Lexical Parsing with Regular Expressions (strscan); Cryptographic Hash Functions (digest); Mathematical Ruby Scripts (mathn); Working with Tabular Data (csv); Transactional Filesystem-Based Data Storage (pstore); Human-Readable Data Serialization (json); Embedded Ruby for Code Generation (erb); Conclusions; Ruby Worst Practices; Not-So-Intelligent Design; The Downside of Cleverness; Conclusions; Colophon;