<?xml version="1.0" encoding="UTF-8"?>
<commit>
  <added type="array"/>
  <modified type="array">
    <modified>
      <diff>@@ -9,10 +9,18 @@ class FireEagle
   SERVER = &quot;http://fireagle.yahoo.net&quot;
   REQUEST_TOKEN_PATH = &quot;/oauth/request_token&quot;
   ACCESS_TOKEN_PATH  = &quot;/oauth/access_token&quot;
-  AUTHORIZATION_URL  = SERVER + &quot;/oauth/authorize&quot;
+  AUTHORIZATION_URL  = &quot;#{SERVER}/oauth/authorize&quot;
   USER_API_PATH      = &quot;/api/0.1/user&quot;
   LOOKUP_API_PATH    = &quot;/api/0.1/lookup&quot;
   UPDATE_API_PATH    = &quot;/api/0.1/update&quot;
   FORMAT_JSON        = &quot;json&quot;
   FORMAT_XML         = &quot;xml&quot;
-end
\ No newline at end of file
+  
+  class Error &lt; RuntimeError #:nodoc:
+  end
+  
+  class ArgumentError &lt; Error #:nodoc:
+  end
+end
+
+require File.dirname(__FILE__) + '/fireeagle/client'
\ No newline at end of file</diff>
      <filename>lib/fireeagle.rb</filename>
    </modified>
    <modified>
      <diff>@@ -1,4 +1,4 @@
-module FireEagle
+class FireEagle
   class Client
     attr_reader :access_token, :consumer, :format
 
@@ -12,20 +12,32 @@ module FireEagle
       options.map do |k,v|
         options[k.to_sym] = v
       end
-    
+      raise FireEagle::ArgumentError, &quot;OAuth Consumer Key and Secret required&quot; if options[:consumer_key].nil? || options[:consumer_secret].nil?
       @consumer = OAuth::Consumer.new(options[:consumer_key], options[:consumer_secret])
       @debug = options[:debug]
       @format = options[:format]
       if options[:access_token] &amp;&amp; options[:access_token_secret]
         @access_token = OAuth::Token.new(options[:access_token], options[:access_token_secret])
+      else
+        @access_token = nil
       end
     end
+    
+    def request_token_url
+      response = get(FireEagle::REQUEST_TOKEN_PATH, :token =&gt; nil)
+      @request_token = create_token(response)
+      return &quot;#{FireEagle::AUTHORIZATION_URL}?oauth_token=#{@request_token.token}&quot;
+    end
+    
+    def convert_to_access_token
+      raise FireEagle::ArgumentError, &quot;call #request_token_url and have user authorize the token first&quot; if @request_token.nil?
+      response = get(FireEagle::ACCESS_TOKEN_PATH, :token =&gt; @request_token)
+      @access_token = create_token(response)
+    end
 
     def get_access_token
       response = get(FireEagle::REQUEST_TOKEN_PATH, :token =&gt; nil)
-      puts &quot;response: #{response.body}&quot;
       request_token = create_token(response)
-      puts &quot;Request token: #{request_token.inspect}&quot;
     
       ## User interaction required
     </diff>
      <filename>lib/fireeagle/client.rb</filename>
    </modified>
    <modified>
      <diff>@@ -1,11 +1,63 @@
 require File.dirname(__FILE__) + '/spec_helper.rb'
 
-# Time to add your specs!
-# http://rspec.rubyforge.org/
-describe &quot;Place your specs here&quot; do
+describe &quot;FireEagle&quot; do
   
-  it &quot;find this spec in spec directory&quot; do
-    violated &quot;Be sure to write your specs&quot;
+  describe &quot;being initialized&quot; do
+
+    it &quot;should require OAuth Consumer Key and Secret&quot; do
+      lambda do
+        client = FireEagle::Client.new()
+      end.should raise_error(ArgumentError)
+    end
+    
+    it &quot;should initialize an OAuth::Consumer&quot; do
+      @consumer = mock(OAuth::Consumer)
+      OAuth::Consumer.should_receive(:new).and_return(@consumer)
+      client = FireEagle::Client.new(:consumer_key =&gt; 'key', :consumer_secret =&gt; 'sekret')
+    end
+    
+  end
+  
+  describe &quot;web app authentication scenario&quot; do
+    
+    it &quot;should initialize a OAuth::Token if given it's token and secret&quot; do
+      @token = mock(OAuth::Token)
+      OAuth::Token.should_receive(:new).and_return(@token)
+      client = FireEagle::Client.new(:consumer_key =&gt; 'key', :consumer_secret =&gt; 'sekret', :access_token =&gt; 'toke', :access_token_secret =&gt; 'sekret')
+    end
+  end
+  
+  describe &quot;request token scenario&quot; do
+    it &quot;shouldn't initialize with a access_token&quot; do
+      client = FireEagle::Client.new(:consumer_key =&gt; 'key', :consumer_secret =&gt; 'sekret')
+      client.access_token.should == nil
+    end
+    
+    it &quot;should generate a Request Token URL&quot; do
+      client = FireEagle::Client.new(:consumer_key =&gt; 'key', :consumer_secret =&gt; 'sekret')
+      @token = mock(&quot;token&quot;, :token =&gt; 'foo')
+      client.stub!(:get).and_return('')
+      client.stub!(:create_token).and_return(@token)
+      client.request_token_url.should =~ /\?oauth_token=foo/
+    end
+    
+    it &quot;should require #request_token_url be called before #convert_to_access_token&quot; do
+      lambda do
+        client = FireEagle::Client.new(:consumer_key =&gt; 'key', :consumer_secret =&gt; 'sekret')
+        client.convert_to_access_token
+      end.should raise_error(FireEagle::ArgumentError)
+    end
+    
+    it &quot;should generate a Request Token URL&quot; do
+      client = FireEagle::Client.new(:consumer_key =&gt; 'key', :consumer_secret =&gt; 'sekret')
+      @token = mock(&quot;token&quot;, :token =&gt; 'foo')
+      client.stub!(:get).and_return('')
+      client.stub!(:create_token).and_return(@token)
+      client.request_token_url
+      client.convert_to_access_token
+      client.access_token.should == @token
+    end
+    
   end
   
 end
\ No newline at end of file</diff>
      <filename>spec/fireeagle_spec.rb</filename>
    </modified>
    <modified>
      <diff>@@ -4,4 +4,6 @@ rescue LoadError
   require 'rubygems'
   gem 'rspec'
   require 'spec'
-end
\ No newline at end of file
+end
+
+require File.dirname(__FILE__) + '/../lib/fireeagle'
\ No newline at end of file</diff>
      <filename>spec/spec_helper.rb</filename>
    </modified>
  </modified>
  <removed type="array"/>
  <parents type="array">
    <parent>
      <id>87a2fe2fc0a6542d40344e61c5662ed2f1dcb492</id>
    </parent>
  </parents>
  <author>
    <name>Jesse Newland</name>
    <email>jnewland@gmail.com</email>
  </author>
  <url>http://github.com/jnewland/fireeagle/commit/32afa859488f624b594a370dc06acb14c637c87f</url>
  <id>32afa859488f624b594a370dc06acb14c637c87f</id>
  <committed-date>2008-02-21T20:23:47-08:00</committed-date>
  <authored-date>2008-02-21T20:23:47-08:00</authored-date>
  <message>specs for the authorization process</message>
  <tree>64aa6e714d5814e5ea4330642f922d987db4fcb2</tree>
  <committer>
    <name>Jesse Newland</name>
    <email>jnewland@gmail.com</email>
  </committer>
</commit>
