Ruby Cookbook (Paperback)
內容描述
Description
Do you want to push Ruby to its limits? The Ruby Cookbook is the most
comprehensive problem-solving guide to today's hottest programming language.
It gives you hundreds of solutions to real-world problems, with clear
explanations and thousands of lines of code you can use in your own
projects.
From data structures and algorithms, to integration with cutting-edge
technologies, the Ruby Cookbook has something for every programmer. Beginners
and advanced Rubyists alike will learn how to program with:
Strings and numbers
Arrays and hashes
Classes, modules, and namespaces
Reflection and metaprogramming
XML and HTML processing
Ruby on Rails (including Ajax integration)
Databases
Graphics
Internet services like email, SSH, and BitTorrent
Web services
Multitasking
Graphical and terminal interfaces
If you need to write a web application, this book shows you how to get
started with Rails. If you're a system administrator who needs to rename
thousands of files, you'll see how to use Ruby for this and other everyday
tasks. You'll learn how to read and write Excel spreadsheets, classify text
with Bayesian filters, and create PDF files. We've even included a few silly
tricks that were too cool to leave out, like how to blink the lights on your
keyboard.
The Ruby Cookbook is the most useful book yet written about Ruby. When you
need to solve a problem, don't reinvent the wheel: look it up in the
Cookbook.
Table of
Contents
Preface
- Strings 1.1 Building a String from
Parts 1.2 Substituting Variables into
Strings 1.3 Substituting Variables into an
Existing String 1.4 Reversing a String by Words
or Characters 1.5 Representing Unprintable
Characters 1.6 Converting Between Characters and
Values 1.7 Converting Between Strings and
Symbols 1.8 Processing a String One Character at
a Time 1.9 Processing a String One Word at a
Time 1.10 Changing the Case of a String
1.11 Managing Whitespace
1.12 Testing Whether an Object Is String-Like
1.13 Getting the Parts of a String You Want 1.14
Handling International Encodings 1.15
Word-Wrapping Lines of Text 1.16 Generating a
Succession of Strings 1.17 Matching Strings with
Regular Expressions 1.18 Replacing Multiple
Patterns in a Single Pass 1.19 Validating an
Email Address 1.20 Classifying Text with a
Bayesian Analyzer - Numbers 2.1 Parsing a Number from a
String 2.2 Comparing Floating-Point
Numbers 2.3 Representing Numbers to Arbitrary
Precision 2.4 Representing Rational
Numbers 2.5 Generating Random Numbers
2.6 Converting Between Numeric Bases
2.7 Taking Logarithms 2.8 Finding
Mean, Median, and Mode 2.9 Converting Between
Degrees and Radians 2.10 Multiplying
Matrices 2.11 Solving a System of Linear
Equations 2.12 Using Complex Numbers
2.13 Simulating a Subclass of Fixnum
2.14 Doing Math with Roman Numbers
2.15 Generating a Sequence of Numbers 2.16
Generating Prime Numbers 2.17 Checking a Credit
Card Checksum - Date and Time 3.1 Finding Today's
Date 3.2 Parsing Dates, Precisely or
Fuzzily 3.3 Printing a Date
3.4 Iterating Over Dates 3.5 Doing Date
Arithmetic 3.6 Counting the Days Since an
Arbitrary Date 3.7 Converting Between Time
Zones 3.8 Checking Whether Daylight Saving Time
Is in Effect 3.9 Converting Between Time and
DateTime Objects 3.10 Finding the Day of the
Week 3.11 Handling Commercial Dates
3.12 Running a Code Block Periodically
3.13 Waiting a Certain Amount of Time
3.14 Adding a Timeout to a Long-Running Operation - Arrays 4.1 Iterating Over an
Array 4.2 Rearranging Values Without Using
Temporary Variables 4.3 Stripping Duplicate
Elements from an Array 4.4 Reversing an
Array 4.5 Sorting an Array
4.6 Ignoring Case When Sorting Strings 4.7
Making Sure a Sorted Array Stays Sorted 4.8
Summing the Items of an Array 4.9 Sorting an
Array by Frequency of Appearance 4.10 Shuffling
an Array 4.11 Getting the N Smallest Items of an
Array 4.12 Building Up a Hash Using
Injection 4.13 Extracting Portions of
Arrays 4.14 Computing Set Operations on
Arrays 4.15 Partitioning or Classifying a Set - Hashes 5.1 Using Symbols as Hash
Keys 5.2 Creating a Hash with a Default
Value 5.3 Adding Elements to a Hash
5.4 Removing Elements from a Hash
5.5 Using an Array or Other Modifiable Object as a Hash Key
5.6 Keeping Multiple Values for the Same Hash Key
5.7 Iterating Over a Hash
5.8 Iterating Over a Hash in Insertion Order 5.9
Printing a Hash 5.10 Inverting a Hash
5.11 Choosing Randomly from a Weighted List
5.12 Building a Histogram
5.13 Remapping the Keys and Values of a Hash 5.14
Extracting Portions of Hashes 5.15 Searching a
Hash with Regular Expressions - Files and Directories 6.1 Checking
to See If a File Exists 6.2 Checking Your Access
to a File 6.3 Changing the Permissions on a
File 6.4 Seeing When a File Was Last Used
6.5 Listing a Directory 6.6
Reading the Contents of a File 6.7 Writing to a
File 6.8 Writing to a Temporary File
6.9 Picking a Random Line from a File
6.10 Comparing Two Files 6.11
Performing Random Access on "Read-Once" Input Streams
6.12 Walking a Directory Tree 6.13 Locking
a File 6.14 Backing Up to Versioned
Filenames 6.15 Pretending a String Is a
File 6.16 Redirecting Standard Input or
Output 6.17 Processing a Binary File
6.18 Deleting a File 6.19
Truncating a File 6.20 Finding the Files You
Want 6.21 Finding and Changing the Current
Working Directory - Code Blocks and Iteration 7.1
Creating and Invoking a Block 7.2 Writing a
Method That Accepts a Block 7.3 Binding a Block
Argument to a Variable 7.4 Blocks as Closures:
Using Outside Variables Within a Code Block 7.5
Writing an Iterator Over a Data Structure 7.6
Changing the Way an Object Iterates 7.7 Writing
Block Methods That Classify or Collect 7.8
Stopping an Iteration 7.9 Looping Through
Multiple Iterables in Parallel 7.10 Hiding Setup
and Cleanup in a Block Method 7.11 Coupling
Systems Loosely with Callbacks - Objects and Classes 8.1 Managing
Instance Data 8.2 Managing Class Data
8.3 Checking Class or Module Membership
8.4 Writing an Inherited Class 8.5
Overloading Methods 8.6 Validating and Modifying
Attribute Values 8.7 Defining a Virtual
Attribute 8.8 Delegating Method Calls to Another
Object 8.9 Converting and Coercing Objects to
Different Types 8.10 Getting a Human-Readable
Printout of Any Object 8.11 Accepting or Passing
a Variable Number of Arguments 8.12 Simulating
Keyword Arguments 8.13 Calling a Superclass's
Method 8.14 Creating an Abstract Method
8.15 Freezing an Object to Prevent Changes
8.16 Making a Copy of an Object
8.17 Declaring Constants 8.18 Implementing Class
and Singleton Methods 8.19 Controlling Access by
Making Methods Private - Modules and Namespaces 9.1
Simulating Multiple Inheritance with Mixins 9.2
Extending Specific Objects with Modules 9.3
Mixing in Class Methods 9.4 Implementing
Enumerable: Write One Method, Get 22 Free 9.5
Avoiding Naming Collisions with Namespaces 9.6
Automatically Loading Libraries as Needed 9.7
Including Namespaces 9.8 Initializing Instance
Variables Defined by a Module 9.9 Automatically
Initializing Mixed-In Modules - Reflection and Metaprogramming 10.1
Finding an Object's Class and Superclass 10.2
Listing an Object's Methods 10.3 Listing Methods
Unique to an Object 10.4 Getting a Reference to a
Method 10.5 Fixing Bugs in Someone Else's
Class 10.6 Listening for Changes to a
Class 10.7 Checking Whether an Object Has
Necessary Attributes 10.8 Responding to Calls to
Undefined Methods 10.9 Automatically Initializing
Instance Variables 10.10 Avoiding Boilerplate
Code with Metaprogramming 10.11 Metaprogramming
with String Evaluations 10.12 Evaluating Code in
an Earlier Context 10.13 Undefining a
Method 10.14 Aliasing Methods
10.15 Doing Aspect-Oriented Programming
10.16 Enforcing Software Contracts - XML and HTML 11.1 Checking XML
Well-Formedness 11.2 Extracting Data from a
Document's Tree Structure 11.3 Extracting Data
While Parsing a Document 11.4 Navigating a
Document with XPath 11.5 Parsing Invalid
Markup 11.6 Converting an XML Document into a
Hash 11.7 Validating an XML Document
11.8 Substituting XML Entities
11.9 Creating and Modifying XML Documents
11.10 Compressing Whitespace in an XML Document
11.11 Guessing a Document's Encoding 11.12
Converting from One Encoding to Another 11.13
Extracting All the URLs from an HTML Document
11.14 Transforming Plain Text to HTML 11.15
Converting HTML Documents from the Web into Text
11.16 A Simple Feed Aggregator - Graphics and Other File Formats
12.1 Thumbnailing Images 12.2 Adding Text to an
Image 12.3 Converting One Image Format to
Another 12.4 Graphing Data
12.5 Adding Graphical Context with Sparklines
12.6 Strongly Encrypting Data 12.7 Parsing
Comma-Separated Data 12.8 Parsing
Not-Quite-Comma-Separated Data 12.9 Generating
and Parsing Excel Spreadsheets 12.10 Compressing
and Archiving Files with Gzip and Tar 12.11
Reading and Writing ZIP Files 12.12 Reading and
Writing Configuration Files 12.13 Generating PDF
Files 12.14 Representing Data as MIDI Music - Databases and Persistence 13.1
Serializing Data with YAML 13.2 Serializing Data
with Marshal 13.3 Persisting Objects with
Madeleine 13.4 Indexing Unstructured Text with
SimpleSearch 13.5 Indexing Structured Text with
Ferret 13.6 Using Berkeley DB Databases
13.7 Controlling MySQL on Unix
13.8 Finding the Number of Rows Returned by a Query
13.9 Talking Directly to a MySQL Database
13.10 Talking Directly to a PostgreSQL Database
13.11 Using Object Relational Mapping with ActiveRecord
13.12 Using Object Relational Mapping with Og
13.13 Building Queries Programmatically
13.14 Validating Data with ActiveRecord
13.15 Preventing SQL Injection Attacks 13.16
Using Transactions in ActiveRecord 13.17 Adding
Hooks to Table Events 13.18 Adding Taggability
with a Database Mixin - Internet Services 14.1 Grabbing the
Contents of a Web Page 14.2 Making an HTTPS Web
Request 14.3 Customizing HTTP Request
Headers 14.4 Performing DNS Queries
14.5 Sending Mail 14.6
Reading Mail with IMAP 14.7 Reading Mail with
POP3 14.8 Being an FTP Client
14.9 Being a Telnet Client 14.10
Being an SSH Client 14.11 Copying a File to
Another Machine 14.12 Being a BitTorrent
Client 14.13 Pinging a Machine
14.14 Writing an Internet Server
14.15 Parsing URLs 14.16 Writing a CGI
Script 14.17 Setting Cookies and Other HTTP
Response Headers 14.18 Handling File Uploads via
CGI 14.19 Running Servlets with WEBrick
14.20 A Real-World HTTP Client - Web Development: Ruby on Rails 15.1
Writing a Simple Rails Application to Show System Status
15.2 Passing Data from the Controller to the View
15.3 Creating a Layout for Your Header and Footer
15.4 Redirecting to a Different Location
15.5 Displaying Templates with Render 15.6
Integrating a Database with Your Rails Application
15.7 Understanding Pluralization Rules
15.8 Creating a Login System 15.9 Storing Hashed
User Passwords in the Database 15.10 Escaping
HTML and JavaScript for Display 15.11 Setting and
Retrieving Session Information 15.12 Setting and
Retrieving Cookies 15.13 Extracting Code into
Helper Functions 15.14 Refactoring the View into
Partial Snippets of Views 15.15 Adding DHTML
Effects with script.aculo.us 15.16 Generating
Forms for Manipulating Model Objects 15.17
Creating an Ajax Form 15.18 Exposing Web Services
on Your Web Site 15.19 Sending Mail with
Rails 15.20 Automatically Sending Error Messages
to Your Email 15.21 Documenting Your Web
Site 15.22 Unit Testing Your Web Site
15.23 Using breakpoint in Your Web Application - Web Services and Distributed Programming
16.1 Searching for Books on Amazon 16.2
Finding Photos on Flickr 16.3 Writing an XML-RPC
Client 16.4 Writing a SOAP Client
16.5 Writing a SOAP Server 16.6
Searching the Web with Google's SOAP Service 16.7
Using a WSDL File to Make SOAP Calls Easier 16.8
Charging a Credit Card 16.9 Finding the Cost to
Ship Packages via UPS or FedEx 16.10 Sharing a
Hash Between Any Number of Computers 16.11
Implementing a Distributed Queue 16.12 Creating a
Shared "Whiteboard" 16.13 Securing DRb Services
with Access Control Lists 16.14 Automatically
Discovering DRb Services with Rinda 16.15
Proxying Objects That Can't Be Distributed 16.16
Storing Data on Distributed RAM with MemCached
16.17 Caching Expensive Results with MemCached
16.18 A Remote-Controlled Jukebox - Testing, Debugging, Optimizing, and Documenting
17.1 Running Code Only in Debug Mode
17.2 Raising an Exception 17.3 Handling an
Exception 17.4 Rerunning After an
Exception 17.5 Adding Logging to Your
Application 17.6 Creating and Understanding
Tracebacks 17.7 Writing Unit Tests
17.8 Running Unit Tests 17.9
Testing Code That Uses External Resources 17.10
Using breakpoint to Inspect and Change the
State
of Your Application 17.11 Documenting Your
Application 17.12 Profiling Your
Application 17.13 Benchmarking Competing
Solutions 17.14 Running Multiple Analysis Tools
at Once 17.15 Who's Calling That Method? A Call
Graph Analyzer - Packaging and Distributing Software
18.1 Finding Libraries by Querying Gem Respositories
18.2 Installing and Using a Gem 18.3
Requiring a Specific Version of a Gem 18.4
Uninstalling a Gem 18.5 Reading Documentation for
Installed Gems 18.6 Packaging Your Code as a
Gem 18.7 Distributing Your Gems
18.8 Installing and Creating Standalone Packages with
setup.rb - Automating Tasks with Rake 19.1
Automatically Running Unit Tests 19.2
Automatically Generating Documentation 19.3
Cleaning Up Generated Files 19.4 Automatically
Building a Gem 19.5 Gathering Statistics About
Your Code 19.6 Publishing Your
Documentation 19.7 Running Multiple Tasks in
Parallel 19.8 A Generic Project Rakefile - Multitasking and Multithreading
20.1 Running a Daemon Process on Unix 20.2
Creating a Windows Service 20.3 Doing Two Things
at Once with Threads 20.4 Synchronizing Access to
an Object 20.5 Terminating a Thread
20.6 Running a Code Block on Many Objects
Simultaneously 20.7 Limiting Multithreading with
a Thread Pool 20.8 Driving an External Process
with popen 20.9 Capturing the Output and Error
Streams
from a Unix Shell Command 20.10
Controlling a Process on Another Machine 20.11
Avoiding Deadlock - User Interface 21.1 Getting Input
One Line at a Time 21.2 Getting Input One
Character at a Time 21.3 Parsing Command-Line
Arguments 21.4 Testing Whether a Program Is
Running Interactively 21.5 Setting Up and Tearing
Down a Curses Program 21.6 Clearing the
Screen 21.7 Determining Terminal Size
21.8 Changing Text Color
21.9 Reading a Password 21.10 Allowing Input
Editing with Readline 21.11 Making Your Keyboard
Lights Blink 21.12 Creating a GUI Application
with Tk 21.13 Creating a GUI Application with
wxRuby 21.14 Creating a GUI Application with
Ruby/GTK 21.15 Creating a Mac OS X Application
with RubyCocoa 21.16 Using AppleScript to Get
User Input - Extending Ruby with Other Languages
22.1 Writing a C Extension for Ruby 22.2 Using a
C Library from Ruby 22.3 Calling a C Library
Through SWIG 22.4 Writing Inline C in Your Ruby
Code 22.5 Using Java Libraries with JRuby - System Administration 23.1
Scripting an External Program 23.2 Managing
Windows Services 23.3 Running Code as Another
User 23.4 Running Periodic Tasks Without cron or
at 23.5 Deleting Files That Match a Regular
Expression 23.6 Renaming Files in Bulk
23.7 Finding Duplicate Files
23.8 Automating Backups 23.9 Normalizing
Ownership and Permissions in User Directories
23.10 Killing All Processes for a Given User
Index