| help | account  


Ruby Cookbook
View Larger Image
Lucas Carlson, Leonard Richardson
O'Reilly Media, Paperback, Published July 2006, 656 pages, ISBN 0596523696
List Price: $49.99
Our Price: $31.50
You Save: $18.49 (37% Off)


FREE Shipping on Orders over $40!*
Availability: In-Stock
Read an excerpt:
Chapter 15: Web Development- Ruby on Rails

     

Excerpt provided courtesy of O'Reilly Media. Copyright © O'Reilly Media, Inc Written permission from the publisher is required for any use of this material.

Be the First to Write a Review and tell the world about this title!

People who purchase this book frequently purchase:

Books on similar topics, in best-seller order:Books from the same publisher, in best-seller order:

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

1. 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

2. 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

3. 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

4. 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

5. 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

6. 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

7. 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

8. 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

9. 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

10. 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

11. 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

12. 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

13. 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

14. 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

15. 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

16. 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

17. 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

18. 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

19. 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

20. 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

21. 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

22. 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

23. 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

 

About the Authors

Lucas Carlson is a professional Ruby programmer who specializes in Rails web development. He has authored a half dozen libraries and contributed to various others including Rails and RedCloth. He lives in Portland, Oregon and maintains a website at http://rufy.com/.

Leonard Richardson has been programming since he was eight. Recently the quality of his code has improved somewhat. He is responsible for libraries in many languages, including Rubyful Soup. A California native, he now works in New York. He maintains a website at http://www.crummy.com/.




Forgot your password?
FAQs
Shipping Options
Returns
Your Orders
Your Account