Gregory T. Brown是康涅狄格州紐黑文市的一位Ruby愛(ài)好者,他的大多數(shù)時(shí)間都花在了與Ruby語(yǔ)言相關(guān)的自由軟件項(xiàng)目上。他是Ruport的原作者,并且是Prawn的作者,該Ruby庫(kù)被用來(lái)生成PDF文檔。
圖書目錄
Foreword Preface 1. Driving Code Through Tests A Quick Note on Testing Frameworks Designing for Testability Testing Fundamentals Well-Focused Examples Testing Exceptions Run the Whole Suite at Once Advanced Testing Techniques Using Mocks and Stubs Testing Complex Output Keeping Things Organized Embedding Tests in Library Files Test Helpers Custom Assertions Conclusions 2. Designing Beautiful APIs Designing for Convenience: Ruport’s Table( ) feature Ruby’s Secret Power: Flexible Argument Processing Standard Ordinal Arguments Ordinal Arguments with Optional Parameters Pseudo-Keyword Arguments Treating Arguments As an Array Ruby’s Other Secret Power: Code Blocks Working with Enumerable Using Blocks to Abstract Pre- and Postprocessing Blocks As Dynamic Callbacks Blocks for Interface Simplification Avoiding Surprises Use attr_reader, attr_writer, and attr_accessor Understand What method? and method! Mean Make Use of Custom Operators Conclusions 3. Mastering the Dynamic Toolkit BlankSlate: A BasicObject on Steroids Building Flexible Interfaces Making instance_eval( ) Optional Handling Messages with method_missing( ) and send( ) Dual-Purpose Accessors Implementing Per-Object Behavior Extending and Modifying Preexisting Code Adding New Functionality Modification via Aliasing Per-Object Modification Building Classes and Modules Programmatically Registering Hooks and Callbacks Detecting Newly Added Functionality Tracking Inheritance Tracking Mixins Conclusions 4. Text Processing and File Management Line-Based File Processing with State Tracking Regular Expressions Don’t Work Too Hard Anchors Are Your Friends Use Caution When Working with Quantifiers Working with Files Using Pathname and FileUtils The tempfile Standard Library Automatic Temporary Directory Handling Collision Avoidance Same Old I/O Operations Automatic Unlinking Text-Processing Strategies Advanced Line Processing Atomic Saves Conclusions 5. Functional Programming Techniques Laziness Can Be a Virtue (A Look at lazy.rb) Minimizing Mutable State and Reducing Side Effects Modular Code Organization Memoization Infinite Lists Higher-Order Procedures Conclusions 6. When Things Go Wrong A Process for Debugging Ruby Code Capturing the Essence of a Defect Scrutinizing Your Code Utilizing Reflection Improving inspect Output Finding Needles in a Haystack Working with Logger Conclusions 7. Reducing Cultural Barriers m17n by Example: A Look at Ruby’s CSV Standard Library Portable m17n Through UTF-8 Transcoding Source Encodings Working with Files Transcoding User Input in an Organized Fashion m17n in Standalone Scripts Inferring Encodings from Locale Customizing Encoding Defaults m17n-Safe Low-Level Text Processing Localizing Your Code Conclusions 8. Skillful Project Maintenance Exploring a Well-Organized Ruby Project (Haml) Conventions to Know About What Goes in a README Laying Out Your Library Executables Tests Examples API Documentation via RDoc Basic Documentation Techniques and Guidelines Controlling Output with RDoc Directives The RubyGems Package Manager Writing a Gem::Specification Working with Dependencies Rake: Ruby’s Built-in Build Utility Conclusions A. Writing Backward-Compatible Code B. Leveraging Ruby’s Standard Library C. Ruby Worst Practices Index