<?xml version="1.0" encoding="UTF-8"?>
<commit>
  <added type="array">
    <added>
      <filename>.gitignore</filename>
    </added>
  </added>
  <modified type="array">
    <modified>
      <diff>@@ -1,7 +1,7 @@
-require 'rubygems'
+$:.unshift File.dirname(__FILE__)
+
 require 'hpricot'
+require 'oauth/consumer'
 
 require 'netflix/user'
-require 'netflix/client'
-
-# require 'netflix/...'
\ No newline at end of file
+require 'netflix/client'
\ No newline at end of file</diff>
      <filename>lib/netflix.rb</filename>
    </modified>
    <modified>
      <diff>@@ -9,7 +9,7 @@ module Netflix
   }.freeze
     
   # for bloed ups.  
-  class NetflixClientError &lt; StandardError; end  
+  class ClientError &lt; StandardError; end  
     
   # Client class responsible for setting up api calls.
   class AssHat
@@ -71,7 +71,7 @@ module Netflix
        
   end
   
-  class Client
+  class Client  
     
     def self.consumer_token=(consumer_token)
       @consumer_token = consumer_token
@@ -88,7 +88,42 @@ module Netflix
     def self.consumer_secret
       @consumer_secret
     end
-        
+    
+    def self.options
+      {
+        :scheme            =&gt; :query_string,
+        :http_method       =&gt; :post,
+        :signature_method  =&gt; &quot;HMAC-SHA1&quot;,
+        :site              =&gt; &quot;http://api.netflix.com&quot;,
+        :request_token_url =&gt; Netflix::OAUTH_ENDPOINTS[:request],
+        :access_token_url  =&gt; Netflix::OAUTH_ENDPOINTS[:access],
+        :authorize_url     =&gt; Netflix::OAUTH_ENDPOINTS[:authorize]
+      }
+    end
+
+    def consumer
+      @consumer ||= begin
+        token  = Netflix::Client.consumer_token
+        secret = Netflix::Client.consumer_secret
+
+        raise(ClientError, 'Consumer token and secret are required') if (token.nil? || secret.nil?)
+        OAuth::Consumer.new(token, secret, self.class.options)
+      end
+    end
+    
+    def request_token
+      @request_token ||= self.consumer.get_request_token
+    end
+    
+    def access_token
+      @access_token ||= self.request_token.get_access_token
+    end
+    
+    def get
+      self.access_token
+    end
+    
+    
     # attr_accessor :access_token, :access_token_secret, :user_id
     # 
     # def initialize(access_token, access_token_secret, user_id)</diff>
      <filename>lib/netflix/client.rb</filename>
    </modified>
    <modified>
      <diff>@@ -18,10 +18,98 @@ module Netflix
   
   describe Client, &quot;an instance&quot; do
   
-    it &quot;should create a consumer from the token and supplied secret&quot;
-    it &quot;should throw an exception when creating a consumer without a supplied token &amp; secret&quot;
-    it &quot;should create an access_token before issuing get request&quot;
+    before do
+      Client.consumer_token  = nil
+      Client.consumer_secret = nil
+    end
+
+    it &quot;should throw an exception when creating a consumer without a supplied token &amp; secret&quot; do
+      client = Client.new
+      lambda { client.consumer }.should raise_error(Netflix::ClientError)
+    end
+    
+    it &quot;should have a set of options to pass to the OAuth Consumer&quot; do
+      expected = {
+        :scheme            =&gt; :query_string,
+        :http_method       =&gt; :post,
+        :signature_method  =&gt; &quot;HMAC-SHA1&quot;,
+        :site              =&gt; &quot;http://api.netflix.com&quot;,
+        :request_token_url =&gt; &quot;http://api.netflix.com/oauth/request_token&quot;,
+        :access_token_url  =&gt; &quot;http://api.netflix.com/oauth/access_token&quot;,
+        :authorize_url     =&gt; &quot;https://api-user.netflix.com/oauth/login&quot;
+      }
+      
+      Netflix::Client.options.should == expected
+    end
+    
     it &quot;should throw an exception when creating an access_token without a supplied access_token and access_secret&quot;
+    
+    describe &quot;with a consumer token and consumer secret&quot; do
+      
+      before do
+        @token = 'toke'
+        @secret = 'secret'
+        
+        Client.consumer_token  = @token
+        Client.consumer_secret = @secret
+        
+        @client = Client.new
+      end
+
+      it &quot;should create a consumer from the token and supplied secret&quot; do
+        consumer = stub()
+        options  = stub()
+        
+        Client.expects(:options).with().returns(options)
+        
+        OAuth::Consumer.expects(:new).with(@token, @secret, options).returns(consumer)
+
+        @client.consumer.should == consumer
+      end
+
+      it &quot;should memoize the consumer object&quot; do
+        OAuth::Consumer.expects(:new).with(@token, @secret, kind_of(Hash)).once.returns(stub())
+
+        2.times { @client.consumer }
+      end
+      
+      it &quot;should be able to generate a request token&quot; do
+        request_token = stub()
+        
+        @client.expects(:consumer).with().returns(stub(:get_request_token =&gt; request_token))
+        @client.request_token.should == request_token
+      end
+      
+      it &quot;should memoize the request token&quot; do
+        request_token = stub()
+        
+        consumer_mock = mock() {|m| m.expects(:get_request_token).with().once.returns(request_token) }
+        @client.expects(:consumer).with().returns(consumer_mock)
+        
+        2.times { @client.request_token }
+      end
+
+      it &quot;should be able to create an access token&quot; do
+        access_token = stub()
+        
+        @client.expects(:request_token).with().returns(stub(:get_access_token =&gt; access_token))
+        @client.access_token.should == access_token
+      end
+      
+      it &quot;should memoize the access token&quot; do
+        access_token = stub()
+        
+        @client.expects(:request_token).with().returns(stub(:get_access_token =&gt; access_token))
+        2.times { @client.access_token }
+      end
+
+      it &quot;should create an access_token before issuing get request&quot; do
+        @client.expects(:access_token).with().returns(stub())
+        @client.get
+      end
+      
+    end
+  
     it &quot;should return a hpricot document on a get request&quot; 
     it &quot;should know if there were API errors when performing a get request&quot;
     </diff>
      <filename>spec/client_spec.rb</filename>
    </modified>
  </modified>
  <removed type="array"/>
  <parents type="array">
    <parent>
      <id>d299931d58bbba64868d5a72355ac36b2af545f0</id>
    </parent>
  </parents>
  <author>
    <name>Patrick Reagan</name>
    <email>patrick.reagan@viget.com</email>
  </author>
  <url>http://github.com/rares/netflix/commit/bec89493f9fceb64823854bcc58d1d0d992ff75b</url>
  <id>bec89493f9fceb64823854bcc58d1d0d992ff75b</id>
  <committed-date>2009-01-03T21:26:32-08:00</committed-date>
  <authored-date>2009-01-03T21:26:32-08:00</authored-date>
  <message>Implemented request / access token retrieval</message>
  <tree>cc2bd78cd3c196608fca904b74a6403a91ffce7a</tree>
  <committer>
    <name>Patrick Reagan</name>
    <email>patrick.reagan@viget.com</email>
  </committer>
</commit>
