<?xml version="1.0" encoding="UTF-8"?>
<commit>
  <added type="array">
    <added>
      <filename>.gitignore</filename>
    </added>
    <added>
      <filename>lib/trends.rb</filename>
    </added>
    <added>
      <filename>lib/tweets.rb</filename>
    </added>
    <added>
      <filename>test/twitter_search_trends_test.rb</filename>
    </added>
    <added>
      <filename>test/yaml/trends.yaml</filename>
    </added>
  </added>
  <modified type="array">
    <modified>
      <diff>@@ -1,7 +1,7 @@
 require 'rake'
 require 'rake/testtask'
  
-test_files_pattern = 'test/twitter_search_test.rb'
+test_files_pattern = 'test/twitter_*_test.rb'
 Rake::TestTask.new do |t|
   t.libs &lt;&lt; 'lib'
   t.pattern = test_files_pattern</diff>
      <filename>Rakefile</filename>
    </modified>
    <modified>
      <diff>@@ -3,54 +3,14 @@ require 'net/http'
 require 'json'
 require 'cgi'
 
-module TwitterSearch
-
-  class Tweet
-    VARS = [:text, :from_user, :to_user, :to_user_id, :id, :iso_language_code, :from_user_id, :created_at, :profile_image_url, :source ]
-    attr_reader *VARS
-    attr_reader :language
-    
-    def initialize(opts)
-      @language = opts['iso_language_code']
-      VARS.each { |each| instance_variable_set &quot;@#{each}&quot;, opts[each.to_s] }
-    end
-  end
-
-  class Tweets
-    VARS = [:since_id, :max_id, :results_per_page, :page, :query, :next_page]
-    attr_reader *VARS
-
-    include Enumerable
-
-    def initialize(opts)
-      @results = opts['results'].collect { |each| Tweet.new(each) }
-      VARS.each { |each| instance_variable_set &quot;@#{each}&quot;, opts[each.to_s] }
-    end
-
-    def each(&amp;block)
-      @results.each(&amp;block)
-    end
-
-    def size
-      @results.size
-    end
-    
-    def [](index)
-      @results[index]
-    end
+require File.join(File.dirname(__FILE__), 'tweets')
+require File.join(File.dirname(__FILE__), 'trends')
 
-    def has_next_page?
-      ! @next_page.nil?
-    end
-
-    def get_next_page
-      client = Client.new
-      return client.query( CGI.parse( @next_page[1..-1] ) )
-    end
-  end
+module TwitterSearch
 
   class Client
-    TWITTER_API_URL = 'http://search.twitter.com/search.json'
+    TWITTER_SEARCH_API_URL = 'http://search.twitter.com/search.json'
+    TWITTER_TRENDS_API_URL = 'http://search.twitter.com/trends/current.json'
     TWITTER_API_DEFAULT_TIMEOUT = 5
     
     attr_accessor :agent
@@ -67,7 +27,7 @@ module TwitterSearch
     end
     
     def query(opts = {})
-      url       = URI.parse(TWITTER_API_URL)
+      url       = URI.parse(TWITTER_SEARCH_API_URL)
       url.query = sanitize_query(opts)
 
       req  = Net::HTTP::Get.new(url.path)
@@ -79,6 +39,22 @@ module TwitterSearch
       }.body
       Tweets.new JSON.parse(json)
     end
+    
+    def trends(opts = {})
+      url       = URI.parse(TWITTER_TRENDS_API_URL)
+      if opts['exclude_hashtags']
+        url.query = sanitize_query_hash({ :exclude_hashtags =&gt; opts['exclude_hashtags'] })
+      end
+
+      req  = Net::HTTP::Get.new(url.path)
+      http = Net::HTTP.new(url.host, url.port)
+      http.read_timeout = timeout
+      
+      json = http.start { |http|
+        http.get(&quot;#{url.path}?#{url.query}&quot;, headers)
+      }.body
+      Trends.new JSON.parse(json)
+    end
 
     private
 </diff>
      <filename>lib/twitter_search.rb</filename>
    </modified>
    <modified>
      <diff>@@ -37,4 +37,9 @@ class Test::Unit::TestCase
     end
   end
   
+  def read_yaml(opts = {})
+    return if opts[:file].nil?
+    YAML.load_file File.join(File.dirname(__FILE__), 'yaml', &quot;#{opts[:file]}.yaml&quot;) 
+  end
+  
 end
\ No newline at end of file</diff>
      <filename>test/test_helper.rb</filename>
    </modified>
    <modified>
      <diff>@@ -2,12 +2,11 @@
 
 require File.join(File.dirname(__FILE__), 'test_helper')
 
-
-require 'fake_web'
+gem('fakeweb', '&gt;=1.2.0')
+require 'fakeweb'
 
 FakeWeb.allow_net_connect = false # an insurance policy against hitting http://twitter.com
 
-
 class TwitterSearchTest &lt; Test::Unit::TestCase # :nodoc:
 
   context &quot;@client.query 'Obama'&quot; do
@@ -21,7 +20,7 @@ class TwitterSearchTest &lt; Test::Unit::TestCase # :nodoc:
       assert @tweets.all? { |tweet| tweet.text =~ /obama/i }
     end
   end
-  
+
   context &quot;@client.query 'twitter search'&quot; do
     setup do
       @tweets = read_yaml :file =&gt; 'twitter_search'
@@ -33,7 +32,7 @@ class TwitterSearchTest &lt; Test::Unit::TestCase # :nodoc:
       assert @tweets.all?{ |t| t.text =~ /twitter/i &amp;&amp; t.text =~ /search/i }
     end
   end
-  
+
   context &quot;@client.query :q =&gt; 'twitter search'&quot; do
     setup do
       @tweets = read_yaml :file =&gt; 'twitter_search_and'
@@ -45,7 +44,7 @@ class TwitterSearchTest &lt; Test::Unit::TestCase # :nodoc:
       assert @tweets.all?{ |t| t.text =~ /twitter/i &amp;&amp; t.text =~ /search/i }
     end
   end
-  
+
   # TWITTER SEARCH OPERATORS
   
   context '@client.query :q =&gt; \'&quot;happy hour&quot;\'' do
@@ -308,7 +307,7 @@ class TwitterSearchTest &lt; Test::Unit::TestCase # :nodoc:
       assert @tweets.has_next_page?
 
       FakeWeb.register_uri( :get,
-                            &quot;#{TwitterSearch::Client::TWITTER_API_URL}?max_id=100&amp;q=almost+a+Google%28or+is+it+Twitter%29whack&amp;rpp=1&amp;page=2&quot;,
+                            &quot;#{TwitterSearch::Client::TWITTER_SEARCH_API_URL}?max_id=100&amp;q=almost+a+Google%28or+is+it+Twitter%29whack&amp;rpp=1&amp;page=2&quot;,
                             :string =&gt; '{&quot;results&quot;:[{&quot;text&quot;:&quot;Boston Celtics-Los Angeles Lakers, Halftime http://tinyurl.com/673s24&quot;,&quot;from_user&quot;:&quot;nbatube&quot;,&quot;id&quot;:858836387,&quot;language&quot;:&quot;en&quot;,&quot;created_at&quot;:&quot;Tue, 15 Jul 2008 09:27:57 +0000&quot;}],&quot;since_id&quot;:0,&quot;max_id&quot;:100,&quot;results_per_page&quot;:1,&quot;page&quot;:2,&quot;query&quot;:&quot;almost+a+Google%28or+is+it+Twitter%29whack&quot;}'
                           )
       next_page = @tweets.get_next_page
@@ -359,9 +358,4 @@ class TwitterSearchTest &lt; Test::Unit::TestCase # :nodoc:
       str.include?('http://') || str.include?('https://')
     end
   
-    def read_yaml(opts = {})
-      return if opts[:file].nil?
-      YAML.load_file File.join(File.dirname(__FILE__), 'yaml', &quot;#{opts[:file]}.yaml&quot;) 
-    end
-  
 end</diff>
      <filename>test/twitter_search_test.rb</filename>
    </modified>
  </modified>
  <removed type="array"/>
  <parents type="array">
    <parent>
      <id>0a129bdcbd1b92a769b1884ffc7a59caf2edda8b</id>
    </parent>
  </parents>
  <author>
    <name>Dan Croak</name>
    <email>dcroak@thoughtbot.com</email>
  </author>
  <url>http://github.com/dancroak/twitter-search/commit/eb2d1b171da174e3162bc58f61280ab210d70200</url>
  <id>eb2d1b171da174e3162bc58f61280ab210d70200</id>
  <committed-date>2009-05-15T15:26:14-07:00</committed-date>
  <authored-date>2009-05-15T15:26:14-07:00</authored-date>
  <message>pulling in Matt Sanford's trends addition</message>
  <tree>95ed25b482a6c6ed20fd8b251adbe38a5ae8ce07</tree>
  <committer>
    <name>Dan Croak</name>
    <email>dcroak@thoughtbot.com</email>
  </committer>
</commit>
