Log In
Or create an account ->
Imperial Library
Home
About
News
Upload
Forum
Help
Login/SignUp
Index
Advanced Rails
SPECIAL OFFER: Upgrade this ebook with O’Reilly
Preface
Prerequisites
Conventions Used in This Book
Using Code Examples
How to Contact Us
Safari® Books Online
Acknowledgments
1. Foundational Techniques
What Is Metaprogramming?
Don't Repeat Yourself
Caveats
Bottom-Up Programming
Ruby Foundations
Classes and Modules
Method Lookup
The rules
Class inheritance
Class instantiation
Including modules
The singleton class
Singleton classes of class objects
Method missing
Metaid
Variable Lookup
Blocks, Methods, and Procs
Blocks to Procs and Procs to blocks
Closures
Metaprogramming Techniques
Delaying Method Lookup Until Runtime
Generative Programming: Writing Code On-the-Fly
Continuations
Bindings
Introspection and ObjectSpace: Examining Data and Methods at Runtime
ObjectSpace
Delegation with Proxy Classes
DelegateClass and Forwardable
Monkeypatching
Disadvantages of monkeypatching
Adding Functionality to Existing Methods
Subclassing
Aspect-oriented programming
Method chaining
Modulization
Functional Programming
Higher-Order Functions
Enumerable
Predicates
Filters
Transformers
Aggregators
Other
Enumerator
Examples
Runtime Feature Changes
Rails Routing Code
Further Reading
2. ActiveSupport and RailTies
Ruby You May Have Missed
Array
Dir
Enumerable
File
Hash
Kernel
Module
Proc
String
How to Read Code
How to Locate Code
Reading the Call Stack
Debugging Ruby and Rails
Debugging Rails with ruby-debug
Where to Start
Pick something interesting
Start at the top
Read the Tests
Stay Current
ActiveSupport
Dependencies
Deprecation
Deprecated instance variables
Inflector
JSON
Whiny Nil
Core Extensions
Array
Conversions
Grouping
Option processing
Random selection
Blank
Class Attribute Accessors
Class Inheritable Attributes
Date and Time
Conversions
Conversions from Numeric
Time calculations
Enumerable
Exception
File
Float
Hash
Conversions
Option processing
HashWithIndifferentAccess
Integer
Kernel
Daemonize
Reporting
Module
Aliasing
Delegation
Introspection
Numeric Conversions
Object
instance_exec
Miscellaneous methods
Range
String
Inflector
String i18n
Miscellaneous methods
Symbol#to_proc
TimeZone
RailTies
Rails Configuration
Application Initialization in 20 Easy Steps
Request Dispatch
Further Reading
3. Rails Plugins
About Plugins
Plugin Loading
Installing Rails Plugins
RaPT
Piston
Decentralized version control
Writing Plugins
Plugin Examples
Account Location
SSL Requirement
HTTP Authentication
Testing Plugins
Testing Plugin Database Dependencies
Further Reading
4. Database
Database Management Systems
PostgreSQL
MySQL
SQLite
Microsoft SQL Server
Oracle
Large/Binary Objects
Database Storage
PostgreSQL
MySQL
Oracle
Filesystem Storage
Sending Data with X-Sendfile
Web server configuration
Serving Static Files
Managing Uploads in Rails
Attachment plugins
Rolling your own
Upload progress
Advanced Database Features
Application Versus Integration Databases
Constraints
Composite Keys
Triggers, Rules, and Stored Procedures
Examples
Large object deletion
Data partitioning
Connecting to Multiple Databases
Magic Multi-Connections
Caching
Load Balancing and High Availability
MySQL
Replication
MySQL cluster
PostgreSQL
High availability: Warm standby
Master-slave replication: Slony-I
Multimaster replication: PGCluster
Oracle
Microsoft SQL Server
LDAP
ActiveLDAP
Authenticating with LDAP
Further Reading
5. Security
Application Issues
Authentication
Password hashing in Rails
Don't Trust the Client
Form processing
Hidden form fields
Client-side validation
Cookies
Double-check everything
Secure Fallback
Avoid Security Through Obscurity
Secure Your Error Messages
Whitelist, Don't Blacklist
Web Issues
Rails Sessions
Cookie-based sessions
Cross-Site Scripting
Mitigation
Whitelisting
Cross-Site Request Forgery
CSRF mitigation
Canonicalization: What's in a Name?
SQL Injection
Ruby's Environment
Using the Shell
Object Tainting
Further Reading
6. Performance
Measurement Tools
Black-Box Analysis
Statistics: The least you need to know
Black-box analysis with httperf
Code Timing
Rails Analyzer Tools
Production log analyzer
Action profiler
Rails Analyzer Tools
Rails Optimization Example
Profiling an Action
Optimizing and Reprofiling
Benchmarking
Running the benchmark
Interpreting the results
ActiveRecord Performance
Diving into SQL
1+N Problem
Indexing
Foreign key indexes
Other indexes
Full-text indexing
Spatial indexes
Updating index statistics
Database Performance Measurement
Examining the query plan
Architectural Scalability
Sessions
ActiveRecordStore
MemCacheStore
CookieStore
Session management
Caching
Page caching
Action caching
Fragment caching
Cache sweepers
Other Systems
Choosing the Right Tool
Leveraging external programs
Writing inline C code
ActionMailer
Further Reading
7. REST, Resources, and Web Services
What Is REST?
Verbs
GET
PUT
DELETE
POST
Resources
Name opacity
Representations and Content Types
Selecting a representation
Statelessness
HTTP state
Why statelessness?
Resourceful session state: An example
Authentication
Benefits of a RESTful Architecture
Conceptual Simplicity
Caching and Scalability
Robustness to Change
Uniformity
RESTful Rails
RESTful Routing
Resource-Based Named Routes
Custom resource routes
Nested resource routes
Singleton resource routes
ActionView Support
Method emulation
Content Types
HTTP Caching
Custom caching
HTTP Response Status Codes
ActiveResource: Consuming RESTful Services
Action Web Service
Case Study: Amazon S3
Concepts and Terminology
Authentication
Alternative authentication options
Architecture and Operations
S3 Clients and Servers
Further Reading
8. i18n and L10n
Locale
Character Encodings
ASCII
Extended ASCII
Problems with ASCII
Unicode
Unicode Transformation Formats
Rails and Unicode
Multilingualization in Ruby 1.9
ActiveSupport::Multibyte
Unicode Normalization
Filtering UTF-8 Input
Storing UTF-8
MySQL
PostgreSQL
Serving UTF-8
Character Set Conversion
JavaScript URI encoding and UTF-8
Rails L10n
Interface/Resource Translation
gettext
Gibberish
Globalize
Locale-Specific Settings
Model Translation
Globalize Example: An Address Book
Localizing the address book
Further Reading
9. Incorporating and Extending Rails
Replacing Rails Components
Replacing ActiveRecord
DataMapper
Ambition
Og
Alternative Template Engines
Markaby
Liquid
Haml
Incorporating Rails Components
ActiveRecord
ETL operations
Schema operations
Standalone data store
Other Ruby applications
ActionMailer
Custom Rake tasks
Receiving email
Contributing to Rails
Contributing Patches
Rails Unit Tests
Further Reading
10. Large Projects
Version Control
Centralized Version Control
CVS
Subversion
Decentralized Version Control
Branching and Merging
Subversion branching and merging
Mercurial branching and merging
Database Migrations
Issue Tracking
Project Structure
Subversion Configuration
Importing existing applications
Subversion Externals and Piston
Rails Version
Environment Initialization
Including Gems
Multi-Application Projects
Rails Deployment
Shared-Nothing Scalability
Front End Web Server
Asset hosts for static files
Application Server
Capistrano
Vlad the Deployer
Continuous Integration
Further Reading
Index
About the Author
Colophon
SPECIAL OFFER: Upgrade this ebook with O’Reilly
← Prev
Back
Next →
← Prev
Back
Next →