From yesterday’s code reading, I found that the restclient command uses RestClient::Resource for most of the work.  So I’m going to start with it’s methods, starting with it’s HTTP verbs, #get.
The Code
| 1 2 3 4 5 6 7 8 9 10 11 | module RestClient class Resource def get(additional_headers={}, &block) headers = (options[:headers] || {}).merge(additional_headers) Request.execute(options.merge( :method => :get, :url => url, :headers => headers), &(block || @block)) end end end | 
Review
The #get method takes a hash of HTTP headers and a block.  Since a Resource object is created with the url already, it’s doesn’t need to be passed into this method.
The first thing #get does is to merge the HTTP headers from it’s initialization (options[:headers]) and the additional headers from the method call.  This way you can create one Resource object with common headers and then override them in each request as needed.  Next, #get passes all of the data onto RestClient::Request#execute which I’m assuming would build and sent the actual HTTP request.
One interesting technique that is in #get is how it passes either the method’s block or initializer’s block into Request#execute.  By checking for a nil object and using the & outside the parenthesis, this is a simple one liner.
| 1 | &(block || @block) |