Polished Ruby Programming: Build better software with more intuitive, maintainable, scalable, and high-performance Ruby code
- Length: 434 pages
- Edition: 1
- Language: English
- Publisher: Packt Publishing
- Publication Date: 2021-07-09
- ISBN-10: 1801072728
- ISBN-13: 9781801072724
- Sales Rank: #224785 (See Top 100 Books)
Become an accomplished Ruby programmer by understanding the design principles, best practices, and trade-offs involved in implementation approaches to keep your Ruby applications maintainable in the long term
Key Features
- Understand the design principles behind polished Ruby code and trade-offs between implementation approaches
- Use metaprogramming and DSLs to reduce the amount of code needed without decreasing maintainability
- Learn Ruby web application design principles and strategies for databases, security, and testing
Book Description
Most successful Ruby applications become difficult to maintain over time as the codebase grows in size. Polished Ruby Programming provides you with recommendations and advice for designing Ruby programs that are easy to maintain in the long term.
This book takes you through implementation approaches for many common programming situations, the trade-offs inherent in each approach, and why you may choose to use different approaches in different situations. You’ll start by learning fundamental Ruby programming principles, such as correctly using core classes, class and method design, variable usage, error handling, and code formatting. Moving on, you’ll learn higher-level programming principles, such as library design, use of metaprogramming and domain-specific languages, and refactoring. Finally, you’ll learn principles specific to web application development, such as how to choose a database and web framework, and how to use advanced security features.
By the end of this Ruby programming book, you’ll have gained the skills you need to design robust, high-performance, scalable, and maintainable Ruby applications.
While most code examples and principles discussed in the book apply to all Ruby versions, some examples and principles are specific to Ruby 3.0, the latest release at the time of publication.
What you will learn
- Use Ruby’s core classes and design custom classes effectively
- Explore the principles behind variable usage and method argument choice
- Implement advanced error handling approaches such as exponential backoff
- Design extensible libraries and plugin systems in Ruby
- Use metaprogramming and DSLs to avoid code redundancy
- Implement different approaches to testing and understand their trade-offs
- Discover design patterns, refactoring, and optimization with Ruby
- Explore database design principles and advanced web app security
Who this book is for
If you already know how to program in Ruby and want to learn more about the principles and best practices behind writing maintainable, scalable, optimized, and well-structured Ruby code, then this Ruby book is for you. Intermediate to advanced-level working knowledge of the Ruby programming language is expected to get the most out of this book.
Table of Contents
- Getting the Most out of Core Classes
- Designing Useful Custom Classes
- Proper Variable Usage
- Methods and Their Arguments
- Handling Errors
- Formatting Code for Easy Reading
- Designing Your Library
- Designing For Extensibility
- Metaprogramming and When to Use It
- Designing Useful Domain-Specific Languages
- Testing to Ensure Your Code Works
- Handling Change
- Using Common Design Patterns
- Optimizing Your Library
- The Database Is Key
- Web Application Design Principles
- Robust Web Application Security
Polished Ruby Programming Contributors About the reviewers Preface Who this book is for What this book covers To get the most out of this book Download the example code files Conventions used Get in touch Reviews Section 1: Fundamental Ruby Programming Principles Chapter 1: Getting the Most out of Core Classes Technical requirements Learning when to use core classes Best uses for true, false, and nil objects Different numeric types for different needs Understanding how symbols differ from strings Learning how best to use arrays, hashes, and sets Implementing an in-memory database Working with Struct – one of the underappreciated core classes Summary Questions Further reading Chapter 2: Designing Useful Custom Classes Technical requirements Learning when to create a custom class Handling trade-offs in SOLID design The single-responsibility principle The open-closed principle The Liskov substitution principle The interface segregation principle The dependency inversion principle Deciding on larger classes or more classes Learning when to use custom data structures Summary Questions Chapter 3: Proper Variable Usage Technical requirements Using Ruby's favorite variable type – the local variable Increasing performance by adding local variables Avoiding unsafe optimizations Handling scope gate issues Naming considerations with local variables Learning how best to use instance variables Increasing performance with instance variables Handling scope issues with instance variables Naming considerations for instance variables Understanding how constants are just a type of variable Handling scope issues with constants Visibility differences between constants and class instance variables Naming considerations with constants Replacing class variables Replacing class variables with constants Replacing class variables with class instance variables using the superclass lookup approach Replacing class variables with class instance variables using the copy to subclass approach Avoiding global variables, most of the time Summary Questions Further reading Chapter 4: Methods and Their Arguments Technical requirements Understanding that there are no class methods, only instance methods Naming methods Special method names Using the many types of method arguments Positional arguments Optional positional arguments Rest arguments Keyword arguments Block arguments Learning about the importance of method visibility Fixing visibility mistakes Handling delegation Delegating to other objects Summary Questions Chapter 5: Handling Errors Technical requirements Handling errors with return values Handling errors with exceptions Considering performance when using exceptions Retrying transient errors Understanding more advanced retrying Breaking circuits Designing exception class hierarchies Using core exception classes Summary Questions Chapter 6: Formatting Code for Easy Reading Technical requirements Recognizing different perspectives of code formatting Learning how syntactic consistency affects maintainability Enforcing consistency with RuboCop Understanding the consequences of using arbitrary limits Checking basic code formatting with Ruby Realizing the actual importance of code formatting Summary Questions Section 2: Ruby Library Programming Principles Chapter 7: Designing Your Library Technical requirements Focusing on the user experience Library naming Library first impressions The simplest possible interface Determining the appropriate size for your library Handling complexity trade-offs during method design Fewer but more complex methods Summary Questions Chapter 8: Designing for Extensibility Technical requirements Using Ruby's extensibility features Designing plugin systems Designing a basic plugin system Handling changes to classes Plugin modifications to classes Supporting plugin dependencies Making plugin loading easier Handling subclasses in plugin systems Configuring plugins Understanding globally frozen, locally mutable design Summary Questions Chapter 9: Metaprogramming and When to Use It Technical requirements Learning the pros and cons of abstraction Eliminating redundancy Understanding different ways of metaprogramming methods Using method_missing judiciously Summary Questions Chapter 10: Designing Useful Domain-Specific Languages Technical requirements Designing your DSL Configuration DSLs DSLs for making specific changes DSLs for reducing the verbosity of code Libraries implemented as DSLs Implementing your DSL Learning when to use a DSL Summary Questions Chapter 11: Testing to Ensure Your Code Works Technical requirements Understanding why testing is so critical in Ruby Learning different approaches to testing Considering test complexity Understanding the many levels of testing Realizing that 100% coverage means nothing Summary Questions Chapter 12: Handling Change Technical requirements Considering reasons to refactor Learning about the refactoring process Implementing the most common Ruby refactoring techniques Extracting a method Extracting a class Refactoring to add features Removing features properly Removing methods Removing constants Summary Questions Chapter 13: Using Common Design Patterns Technical requirements Learning about the many design patterns that are built into Ruby The object pool design pattern The prototype design pattern The private class data design pattern The proxy design pattern Handling cases where there can be only one Dealing with nothing Visiting objects Adapting and strategizing Summary Questions Chapter 14: Optimizing Your Library Technical requirements Understanding that you probably don't need to optimize code Profiling first, optimizing second Understanding that no code is faster than no code Handling code where everything is slow Summary Questions Section 3: Ruby Web Programming Principles Chapter 15: The Database Is Key Technical requirements Learning why database design is so important Deciding on a database to use Understanding the most important database design principles Considerations when denormalizing your database design Other database design principles Treating the database as not just dumb storage Choosing the model layer Handling database and model errors Summary Further reading Questions Chapter 16: Web Application Design Principles Technical requirements Choosing between client-side and server-side design Deciding on a web framework Ruby on Rails Sinatra Grape Roda Designing URL paths Structuring with monoliths, microservices, and island chains Summary Questions Chapter 17: Robust Web Application Security Technical requirements Understanding that most security issues in Ruby web applications are high level Trusting input never Performing access control at the highest level possible Avoiding injection Script injection SQL injection Code injection Approaching high-security environments Limiting database access Internal firewalling Randomizing memory layouts Limiting filesystem access Limiting system call access Summary Questions Assessments Chapter 1 Chapter 2 Chapter 3 Chapter 4 Chapter 5 Chapter 6 Chapter 7 Chapter 8 Chapter 9 Chapter 10 Chapter 11 Chapter 12 Chapter 13 Chapter 14 Chapter 15 Chapter 16 Chapter 17 Why subscribe? Other Books You May Enjoy Packt is searching for authors like you Leave a review - let other readers know what you think
Donate to keep this site alive
How to download source code?
1. Go to: https://github.com/PacktPublishing
2. In the Find a repository… box, search the book title: Polished Ruby Programming: Build better software with more intuitive, maintainable, scalable, and high-performance Ruby code
, sometime you may not get the results, please search the main title.
3. Click the book title in the search results.
3. Click Code to download.
1. Disable the AdBlock plugin. Otherwise, you may not get any links.
2. Solve the CAPTCHA.
3. Click download link.
4. Lead to download server to download.