<?xml version="1.0" encoding="UTF-8"?>
<commit>
  <added type="array">
    <added>
      <filename>examples/httpauth.rb</filename>
    </added>
    <added>
      <filename>lib/twitter/httpauth.rb</filename>
    </added>
    <added>
      <filename>test/twitter/httpauth_test.rb</filename>
    </added>
  </added>
  <modified type="array">
    <modified>
      <diff>@@ -35,6 +35,7 @@ directory = File.dirname(__FILE__)
 $:.unshift(directory) unless $:.include?(directory)
 
 require 'twitter/oauth'
+require 'twitter/httpauth'
 require 'twitter/request'
 require 'twitter/base'
 require 'twitter/search'
\ No newline at end of file</diff>
      <filename>lib/twitter.rb</filename>
    </modified>
    <modified>
      <diff>@@ -2,10 +2,12 @@ module Twitter
   class Base
     extend Forwardable
     
-    def_delegators :@client, :get, :post
+    def_delegators :client, :get, :post
     
-    def initialize(oauth)
-      @client = oauth.access_token
+    attr_reader :client
+    
+    def initialize(client)
+      @client = client
     end
     
     # Options: since_id, max_id, count, page, since</diff>
      <filename>lib/twitter/base.rb</filename>
    </modified>
    <modified>
      <diff>@@ -1,5 +1,8 @@
 module Twitter
   class OAuth
+    extend Forwardable
+    def_delegators :access_token, :get, :post
+    
     attr_reader :ctoken, :csecret
     
     def initialize(ctoken, csecret)
@@ -24,8 +27,6 @@ module Twitter
       @access_token ||= ::OAuth::AccessToken.new(consumer, @atoken, @asecret)
     end
     
-    alias client access_token
-    
     def authorize_from_access(atoken, asecret)
       @atoken, @asecret = atoken, asecret
     end</diff>
      <filename>lib/twitter/oauth.rb</filename>
    </modified>
    <modified>
      <diff>@@ -2,20 +2,20 @@ module Twitter
   class Request
     extend Forwardable
     
-    def self.get(base, path, options={})
-      new(base, :get, path, options).perform
+    def self.get(client, path, options={})
+      new(client, :get, path, options).perform
     end
     
-    def self.post(base, path, options={})
-      new(base, :post, path, options).perform
+    def self.post(client, path, options={})
+      new(client, :post, path, options).perform
     end
     
-    attr_reader :base, :method, :path, :options
+    attr_reader :client, :method, :path, :options
     
-    def_delegators :base, :get, :post
+    def_delegators :client, :get, :post
     
-    def initialize(base, method, path, options={})
-      @base, @method, @path, @options = base, method, path, options
+    def initialize(client, method, path, options={})
+      @client, @method, @path, @options = client, method, path, options
     end
     
     def uri</diff>
      <filename>lib/twitter/request.rb</filename>
    </modified>
    <modified>
      <diff>@@ -20,15 +20,17 @@ def fixture_file(filename)
   File.read(file_path)
 end
 
+def twitter_url(url)
+  url =~ /^http/ ? url : &quot;http://twitter.com:80#{url}&quot;
+end
+
 def stub_get(url, filename, status=nil)
-  url = url =~ /^http/ ? url : &quot;http://twitter.com:80#{url}&quot;
-  
   options = {:string =&gt; fixture_file(filename)}
   options.merge!({:status =&gt; status}) unless status.nil?
   
-  FakeWeb.register_uri(:get, url, options)
+  FakeWeb.register_uri(:get, twitter_url(url), options)
 end
 
 def stub_post(url, filename)
-  FakeWeb.register_uri(:post, &quot;http://twitter.com:80#{url}&quot;, :string =&gt; fixture_file(filename))
+  FakeWeb.register_uri(:post, twitter_url(url), :string =&gt; fixture_file(filename))
 end</diff>
      <filename>test/test_helper.rb</filename>
    </modified>
    <modified>
      <diff>@@ -10,8 +10,9 @@ class BaseTest &lt; Test::Unit::TestCase
     end
     
     context &quot;initialize&quot; do
-      should &quot;require an oauth object&quot; do
-        @twitter.instance_variable_get('@client').should == @access_token
+      should &quot;require a client&quot; do
+        @twitter.client.should respond_to(:get)
+        @twitter.client.should respond_to(:post)
       end
     end
     </diff>
      <filename>test/twitter/base_test.rb</filename>
    </modified>
    <modified>
      <diff>@@ -53,10 +53,19 @@ class OAuthTest &lt; Test::Unit::TestCase
     twitter.access_token.secret.should == 'asecret'
   end
   
-  should &quot;alias oauth token to client&quot; do
+  should &quot;delegate get to access token&quot; do
+    access_token = mock('access token')
     twitter = Twitter::OAuth.new('token', 'secret')
-    twitter.authorize_from_access('atoken', 'asecret')
-    
-    twitter.client.should == twitter.access_token
+    twitter.stubs(:access_token).returns(access_token)
+    access_token.expects(:get).returns(nil)
+    twitter.get('/foo')
+  end
+  
+  should &quot;delegate post to access token&quot; do
+    access_token = mock('access token')
+    twitter = Twitter::OAuth.new('token', 'secret')
+    twitter.stubs(:access_token).returns(access_token)
+    access_token.expects(:post).returns(nil)
+    twitter.post('/foo')
   end
 end</diff>
      <filename>test/twitter/oauth_test.rb</filename>
    </modified>
    <modified>
      <diff>@@ -3,12 +3,12 @@ require File.dirname(__FILE__) + '/../test_helper'
 class RequestTest &lt; Test::Unit::TestCase
   context &quot;new get request&quot; do
     setup do
-      @base = mock('twitter base')
-      @request = Twitter::Request.new(@base, :get, '/statuses/user_timeline.json', {:query =&gt; {:since_id =&gt; 1234}})
+      @client = mock('twitter client')
+      @request = Twitter::Request.new(@client, :get, '/statuses/user_timeline.json', {:query =&gt; {:since_id =&gt; 1234}})
     end
     
-    should &quot;have base&quot; do
-      @request.base.should == @base
+    should &quot;have client&quot; do
+      @request.client.should == @client
     end
     
     should &quot;have method&quot; do
@@ -34,7 +34,7 @@ class RequestTest &lt; Test::Unit::TestCase
           stubs(:code).returns('200')
         end
         
-        @base.expects(:get).returns(response)
+        @client.expects(:get).returns(response)
         @object = @request.perform
       end
 
@@ -52,7 +52,7 @@ class RequestTest &lt; Test::Unit::TestCase
           stubs(:code).returns('200')
         end
         
-        @base.expects(:get).returns(response)
+        @client.expects(:get).returns(response)
         @object = @request.perform
       end
 
@@ -64,21 +64,21 @@ class RequestTest &lt; Test::Unit::TestCase
     
     context &quot;with no query string&quot; do
       should &quot;not have any query string&quot; do
-        request = Twitter::Request.new(@base, :get, '/statuses/user_timeline.json')
+        request = Twitter::Request.new(@client, :get, '/statuses/user_timeline.json')
         request.uri.should == '/statuses/user_timeline.json'
       end
     end
     
     context &quot;with blank query string&quot; do
       should &quot;not have any query string&quot; do
-        request = Twitter::Request.new(@base, :get, '/statuses/user_timeline.json', :query =&gt; {})
+        request = Twitter::Request.new(@client, :get, '/statuses/user_timeline.json', :query =&gt; {})
         request.uri.should == '/statuses/user_timeline.json'
       end
     end
     
     should &quot;have get shortcut to initialize and perform all in one&quot; do
       Twitter::Request.any_instance.expects(:perform).returns(nil)
-      Twitter::Request.get(@base, '/foo')
+      Twitter::Request.get(@client, '/foo')
     end
     
     should &quot;allow setting query string and headers&quot; do
@@ -87,15 +87,15 @@ class RequestTest &lt; Test::Unit::TestCase
         stubs(:code).returns('200')
       end
       
-      @base.expects(:get).with('/statuses/friends_timeline.json?since_id=1234', {'Foo' =&gt; 'Bar'}).returns(response)
-      Twitter::Request.get(@base, '/statuses/friends_timeline.json?since_id=1234', :headers =&gt; {'Foo' =&gt; 'Bar'})
+      @client.expects(:get).with('/statuses/friends_timeline.json?since_id=1234', {'Foo' =&gt; 'Bar'}).returns(response)
+      Twitter::Request.get(@client, '/statuses/friends_timeline.json?since_id=1234', :headers =&gt; {'Foo' =&gt; 'Bar'})
     end
   end
   
   context &quot;new post request&quot; do
     setup do
-      @base = mock('twitter base')
-      @request = Twitter::Request.new(@base, :post, '/statuses/update.json', {:body =&gt; {:status =&gt; 'Woohoo!'}})
+      @client = mock('twitter client')
+      @request = Twitter::Request.new(@client, :post, '/statuses/update.json', {:body =&gt; {:status =&gt; 'Woohoo!'}})
     end
     
     should &quot;allow setting body and headers&quot; do
@@ -104,8 +104,8 @@ class RequestTest &lt; Test::Unit::TestCase
         stubs(:code).returns('200')
       end
       
-      @base.expects(:post).with('/statuses/update.json', {:status =&gt; 'Woohoo!'}, {'Foo' =&gt; 'Bar'}).returns(response)
-      Twitter::Request.post(@base, '/statuses/update.json', :body =&gt; {:status =&gt; 'Woohoo!'}, :headers =&gt; {'Foo' =&gt; 'Bar'})
+      @client.expects(:post).with('/statuses/update.json', {:status =&gt; 'Woohoo!'}, {'Foo' =&gt; 'Bar'}).returns(response)
+      Twitter::Request.post(@client, '/statuses/update.json', :body =&gt; {:status =&gt; 'Woohoo!'}, :headers =&gt; {'Foo' =&gt; 'Bar'})
     end
     
     context &quot;performing request&quot; do
@@ -115,7 +115,7 @@ class RequestTest &lt; Test::Unit::TestCase
           stubs(:code).returns('200')
         end
         
-        @base.expects(:post).returns(response)
+        @client.expects(:post).returns(response)
         @object = @request.perform
       end
 
@@ -126,7 +126,7 @@ class RequestTest &lt; Test::Unit::TestCase
     
     should &quot;have post shortcut to initialize and perform all in one&quot; do
       Twitter::Request.any_instance.expects(:perform).returns(nil)
-      Twitter::Request.post(@base, '/foo')
+      Twitter::Request.post(@client, '/foo')
     end
   end
   
@@ -134,69 +134,69 @@ class RequestTest &lt; Test::Unit::TestCase
     setup do
       oauth = Twitter::OAuth.new('token', 'secret')
       oauth.authorize_from_access('atoken', 'asecret')
-      @base = Twitter::Base.new(oauth)
+      @client = Twitter::Base.new(oauth)
     end
     
     should &quot;not raise error for 200&quot; do
       stub_get('http://twitter.com:80/foo', '', ['200'])
       lambda {
-        Twitter::Request.get(@base, '/foo')
+        Twitter::Request.get(@client, '/foo')
       }.should_not raise_error
     end
     
     should &quot;not raise error for 304&quot; do
       stub_get('http://twitter.com:80/foo', '', ['304'])
       lambda {
-        Twitter::Request.get(@base, '/foo')
+        Twitter::Request.get(@client, '/foo')
       }.should_not raise_error
     end
     
     should &quot;raise RateLimitExceeded for 400&quot; do
       stub_get('http://twitter.com:80/foo', 'rate_limit_exceeded.json', ['400'])
       lambda {
-        Twitter::Request.get(@base, '/foo')
+        Twitter::Request.get(@client, '/foo')
       }.should raise_error(Twitter::RateLimitExceeded)
     end
     
     should &quot;raise Unauthorized for 401&quot; do
       stub_get('http://twitter.com:80/foo', '', ['401'])
       lambda {
-        Twitter::Request.get(@base, '/foo')
+        Twitter::Request.get(@client, '/foo')
       }.should raise_error(Twitter::Unauthorized)
     end
     
     should &quot;raise General for 403&quot; do
       stub_get('http://twitter.com:80/foo', '', ['403'])
       lambda {
-        Twitter::Request.get(@base, '/foo')
+        Twitter::Request.get(@client, '/foo')
       }.should raise_error(Twitter::General)
     end
 
     should &quot;raise NotFound for 404&quot; do
       stub_get('http://twitter.com:80/foo', '', ['404'])
       lambda {
-        Twitter::Request.get(@base, '/foo')
+        Twitter::Request.get(@client, '/foo')
       }.should raise_error(Twitter::NotFound)
     end
 
     should &quot;raise InformTwitter for 500&quot; do
       stub_get('http://twitter.com:80/foo', '', ['500'])
       lambda {
-        Twitter::Request.get(@base, '/foo')
+        Twitter::Request.get(@client, '/foo')
       }.should raise_error(Twitter::InformTwitter)
     end
 
     should &quot;raise Unavailable for 502&quot; do
       stub_get('http://twitter.com:80/foo', '', ['502'])
       lambda {
-        Twitter::Request.get(@base, '/foo')
+        Twitter::Request.get(@client, '/foo')
       }.should raise_error(Twitter::Unavailable)
     end
 
     should &quot;raise Unavailable for 503&quot; do
       stub_get('http://twitter.com:80/foo', '', ['503'])
       lambda {
-        Twitter::Request.get(@base, '/foo')
+        Twitter::Request.get(@client, '/foo')
       }.should raise_error(Twitter::Unavailable)
     end
   end</diff>
      <filename>test/twitter/request_test.rb</filename>
    </modified>
  </modified>
  <removed type="array"/>
  <parents type="array">
    <parent>
      <id>9d4fd990b428bff5c4add4963112a347d22f208c</id>
    </parent>
  </parents>
  <author>
    <name>John Nunemaker</name>
    <email>nunemaker@gmail.com</email>
  </author>
  <url>http://github.com/jnunemaker/twitter/commit/d713ecfbe80edde688009fa6bfbf32a2de687a39</url>
  <id>d713ecfbe80edde688009fa6bfbf32a2de687a39</id>
  <committed-date>2009-04-10T22:49:36-07:00</committed-date>
  <authored-date>2009-04-10T22:48:13-07:00</authored-date>
  <message>First shot at http auth seems to be working.</message>
  <tree>f8cc090935dbeabb725cf9399be46917f49c2ae0</tree>
  <committer>
    <name>John Nunemaker</name>
    <email>nunemaker@gmail.com</email>
  </committer>
</commit>
