<?xml version="1.0" encoding="UTF-8"?>
<commit>
  <added type="array">
    <added>
      <filename>lib/sunspot/rails/session_proxy.rb</filename>
    </added>
  </added>
  <modified type="array">
    <modified>
      <diff>@@ -4,6 +4,11 @@ require 'rake/rdoctask'
 
 task :default =&gt; :spec
 
+if File.exist?(sunspot_lib = File.expand_path(File.join(File.dirname(__FILE__), '..', 'sunspot', 'lib')))
+  STDERR.puts(&quot;Using sunspot lib at #{sunspot_lib}&quot;)
+  $: &lt;&lt; sunspot_lib
+end
+
 desc 'Run all specs'
 Spec::Rake::SpecTask.new(:spec) do |t|
   t.spec_files = FileList['spec/*_spec.rb']</diff>
      <filename>Rakefile</filename>
    </modified>
    <modified>
      <diff>@@ -26,7 +26,7 @@ TEXT
                        'spec/mock_app/{app,lib,db,vendor,config}/**/*',
                        'spec/mock_app/{tmp,log,solr}']
     s.add_dependency 'escape', '&gt;= 0.0.4'
-    s.add_dependency 'sunspot', '~&gt; 0.10.0' 
+    s.add_dependency 'sunspot', '= 0.10.5' 
     s.add_development_dependency 'rspec', '~&gt; 1.2'
     s.add_development_dependency 'rspec-rails', '~&gt; 1.2'
     s.add_development_dependency 'ruby-debug', '~&gt; 0.10'</diff>
      <filename>dev_tasks/gemspec.rake</filename>
    </modified>
    <modified>
      <diff>@@ -14,33 +14,6 @@ module Sunspot #:nodoc:
         @configuration ||= Sunspot::Rails::Configuration.new
       end
 
-      def session
-        Thread.current[:sunspot_rails_session] ||=
-          begin
-            session = Sunspot::Session.new
-            session.config.solr.url = URI::HTTP.build(
-              :host =&gt; configuration.hostname,
-              :port =&gt; configuration.port,
-              :path =&gt; configuration.path
-            ).to_s
-            session
-          end
-      end
-
-      def master_session
-        @master_session ||=
-          if @configuration.has_master?
-            master_session = Sunspot::Session.new
-            master_session.config.solr.url = URI::HTTP.build(
-              :host =&gt; configuration.master_hostname,
-              :port =&gt; configuration.port,
-              :path =&gt; configuration.path
-            ).to_s
-            master_session
-          else
-            session
-          end
-      end
 
       def reset
         @master_session = @session = @configuration = nil</diff>
      <filename>lib/sunspot/rails.rb</filename>
    </modified>
    <modified>
      <diff>@@ -10,9 +10,9 @@ module Sunspot #:nodoc:
         def included(base) #:nodoc:
           base.after_filter do
             if Sunspot::Rails.configuration.auto_commit_after_request?
-              Sunspot::Rails.master_session.commit_if_dirty
+              Sunspot.commit_if_dirty
             elsif Sunspot::Rails.configuration.auto_commit_after_delete_request?
-              Sunspot::Rails.master_session.commit_if_delete_dirty
+              Sunspot.commit_if_delete_dirty
             end
           end
         end</diff>
      <filename>lib/sunspot/rails/request_lifecycle.rb</filename>
    </modified>
    <modified>
      <diff>@@ -109,7 +109,7 @@ module Sunspot #:nodoc:
         # Sunspot::Search:: Object containing results, totals, facets, etc.
         #
         def search(&amp;block)
-          Sunspot::Rails.session.search(self, &amp;block)
+          Sunspot.search(self, &amp;block)
         end
 
         # 
@@ -130,7 +130,7 @@ module Sunspot #:nodoc:
         # Remove instances of this class from the Solr index.
         #
         def remove_all_from_index
-          Sunspot::Rails.master_session.remove_all(self)
+          Sunspot.remove_all(self)
         end
 
         # 
@@ -142,7 +142,7 @@ module Sunspot #:nodoc:
         #
         def remove_all_from_index!
           remove_all_from_index
-          Sunspot::Rails.master_session.commit
+          Sunspot.commit
         end
 
         # 
@@ -185,7 +185,7 @@ module Sunspot #:nodoc:
           options = { :batch_size =&gt; 500, :batch_commit =&gt; true, :include =&gt; []}.merge(opts)
           remove_all_from_index
           unless options[:batch_size]
-            Sunspot::Rails.master_session.index!(all(:include =&gt; options[:include]))
+            Sunspot.index!(all(:include =&gt; options[:include]))
           else
             offset = 0
             counter = 1
@@ -194,14 +194,14 @@ module Sunspot #:nodoc:
             while(offset &lt; record_count)
               benchmark options[:batch_size], counter do
                 records = all(:include =&gt; options[:include], :conditions =&gt; [&quot;#{table_name}.#{primary_key} &gt; ?&quot;, last_id], :limit =&gt; options[:batch_size], :order =&gt; primary_key)
-                Sunspot::Rails.master_session.index(records)
+                Sunspot.index(records)
                 last_id = records.last.id
               end
-              Sunspot::Rails.master_session.commit if options[:batch_commit]
+              Sunspot.commit if options[:batch_commit]
               offset += options[:batch_size]
               counter += 1
             end
-            Sunspot::Rails.master_session.commit unless options[:batch_commit]
+            Sunspot.commit unless options[:batch_commit]
           end
         end
 
@@ -275,14 +275,14 @@ module Sunspot #:nodoc:
         # manually.
         #
         def index
-          Sunspot::Rails.master_session.index(self)
+          Sunspot.index(self)
         end
 
         # 
         # Index the model in Solr and immediately commit. See #index
         #
         def index!
-          Sunspot::Rails.master_session.index!(self)
+          Sunspot.index!(self)
         end
         
         # 
@@ -293,7 +293,7 @@ module Sunspot #:nodoc:
         # manually.
         #
         def remove_from_index
-          Sunspot::Rails.master_session.remove(self)
+          Sunspot.remove(self)
         end
 
         # 
@@ -301,7 +301,7 @@ module Sunspot #:nodoc:
         # #remove_from_index
         #
         def remove_from_index!
-          Sunspot::Rails.master_session.remove!(self)
+          Sunspot.remove!(self)
         end
       end
     end</diff>
      <filename>lib/sunspot/rails/searchable.rb</filename>
    </modified>
    <modified>
      <diff>@@ -15,7 +15,7 @@ module Sunspot
         
         def mock_sunspot
           [ :index, :remove_from_index ].each do |method_name|
-            Sunspot::Rails.session.stub!(method_name)
+            Sunspot.stub!(method_name)
           end
         end
         </diff>
      <filename>lib/sunspot/spec/extension.rb</filename>
    </modified>
    <modified>
      <diff>@@ -1,5 +1,6 @@
 require 'sunspot'
 
+Sunspot.session = Sunspot::Rails::SessionProxy.instance
 Sunspot::Adapters::InstanceAdapter.register(Sunspot::Rails::Adapters::ActiveRecordInstanceAdapter, ActiveRecord::Base)
 Sunspot::Adapters::DataAccessor.register(Sunspot::Rails::Adapters::ActiveRecordDataAccessor, ActiveRecord::Base)
 ActiveRecord::Base.module_eval { include(Sunspot::Rails::Searchable) }</diff>
      <filename>rails/init.rb</filename>
    </modified>
    <modified>
      <diff>@@ -6,7 +6,7 @@ describe 'searchable with lifecycle' do
   describe 'on create' do
     before :each do
       @post = PostWithAuto.create
-      Sunspot::Rails.session.commit
+      Sunspot.commit
     end
 
     it 'should automatically index' do
@@ -18,7 +18,7 @@ describe 'searchable with lifecycle' do
     before :each do
       @post = PostWithAuto.create
       @post.update_attributes(:title =&gt; 'Test 1')
-      Sunspot::Rails.session.commit
+      Sunspot.commit
     end
 
     it 'should automatically update index' do
@@ -30,7 +30,7 @@ describe 'searchable with lifecycle' do
     before :each do
       @post = PostWithAuto.create
       @post.destroy
-      Sunspot::Rails.session.commit
+      Sunspot.commit
     end
 
     it 'should automatically remove it from the index' do
@@ -47,7 +47,7 @@ describe 'searchable with lifecycle - ignoring specific attributes' do
   end
   
   it &quot;should not reindex the object on an update_at change, because it is marked as to-ignore&quot; do
-    Sunspot::Rails.session.should_not_receive(:index).with(@post)
+    Sunspot.should_not_receive(:index).with(@post)
     @post.update_attribute :updated_at, 123.seconds.from_now
   end
 end</diff>
      <filename>spec/model_lifecycle_spec.rb</filename>
    </modified>
    <modified>
      <diff>@@ -14,7 +14,7 @@ describe 'ActiveRecord mixin' do
     end
 
     it 'should index the model' do
-      Sunspot::Rails.session.commit
+      Sunspot.commit
       Post.search.results.should == [@post]
     end
   end
@@ -42,7 +42,7 @@ describe 'ActiveRecord mixin' do
     end
 
     it 'should remove the model from the index' do
-      Sunspot::Rails.session.commit
+      Sunspot.commit
       Post.search.results.should be_empty
     end
   end
@@ -61,8 +61,8 @@ describe 'ActiveRecord mixin' do
 
   describe 'remove_all_from_index' do
     before :each do
-      @posts = Array.new(10) { Post.create! }.each { |post| Sunspot::Rails.session.index(post) }
-      Sunspot::Rails.session.commit
+      @posts = Array.new(10) { Post.create! }.each { |post| Sunspot.index(post) }
+      Sunspot.commit
       Post.remove_all_from_index
     end
 
@@ -71,15 +71,15 @@ describe 'ActiveRecord mixin' do
     end
 
     it 'should remove all instances from the index' do
-      Sunspot::Rails.session.commit
+      Sunspot.commit
       Post.search.results.should be_empty
     end
   end
 
   describe 'remove_all_from_index!' do
     before :each do
-      Array.new(10) { Post.create! }.each { |post| Sunspot::Rails.session.index(post) }
-      Sunspot::Rails.session.commit
+      Array.new(10) { Post.create! }.each { |post| Sunspot.index(post) }
+      Sunspot.commit
       Post.remove_all_from_index!
     end
 
@@ -125,7 +125,7 @@ describe 'ActiveRecord mixin' do
   describe 'search_ids()' do
     before :each do
       @posts = Array.new(2) { Post.create! }.each { |post| post.index }
-      Sunspot::Rails.session.commit
+      Sunspot.commit
     end
 
     it 'should return IDs' do
@@ -146,7 +146,7 @@ describe 'ActiveRecord mixin' do
   describe 'index_orphans()' do
     before :each do
       @posts = Array.new(2) { Post.create }.each { |post| post.index }
-      Sunspot::Rails.session.commit
+      Sunspot.commit
       @posts.first.destroy
     end
 
@@ -158,13 +158,13 @@ describe 'ActiveRecord mixin' do
   describe 'clean_index_orphans()' do
     before :each do
       @posts = Array.new(2) { Post.create }.each { |post| post.index }
-      Sunspot::Rails.session.commit
+      Sunspot.commit
       @posts.first.destroy
     end
 
     it 'should remove orphans from the index' do
       Post.clean_index_orphans
-      Sunspot::Rails.session.commit
+      Sunspot.commit
       Post.search.results.should == [@posts.last]
     end
   end
@@ -176,7 +176,7 @@ describe 'ActiveRecord mixin' do
 
     it 'should index all instances' do
       Post.reindex(:batch_size =&gt; nil)
-      Sunspot::Rails.session.commit
+      Sunspot.commit
       Post.search.results.to_set.should == @posts.to_set
     end
 
@@ -185,7 +185,7 @@ describe 'ActiveRecord mixin' do
       old_post.index!
       old_post.destroy
       Post.reindex
-      Sunspot::Rails.session.commit
+      Sunspot.commit
       Post.search.results.to_set.should == @posts.to_set
     end
     
@@ -198,7 +198,7 @@ describe 'ActiveRecord mixin' do
 
     it 'should index all instances' do
       Post.reindex(:batch_size =&gt; nil)
-      Sunspot::Rails.session.commit
+      Sunspot.commit
       Post.search.results.to_set.should == @posts.to_set
     end
 
@@ -207,14 +207,14 @@ describe 'ActiveRecord mixin' do
       old_post.index!
       old_post.destroy
       Post.reindex
-      Sunspot::Rails.session.commit
+      Sunspot.commit
       Post.search.results.to_set.should == @posts.to_set
     end
     
     describe &quot;using batch sizes&quot; do
       it 'should index with a specified batch size' do
         Post.reindex(:batch_size =&gt; 1)
-        Sunspot::Rails.session.commit
+        Sunspot.commit
         Post.search.results.to_set.should == @posts.to_set
       end
     end
@@ -284,12 +284,12 @@ describe 'ActiveRecord mixin' do
       end
 
       it &quot;should commit after indexing each batch&quot; do
-        Sunspot::Rails.session.should_receive(:commit).twice
+        Sunspot.should_receive(:commit).twice
         Post.reindex(:batch_size =&gt; 5)
       end
 
       it &quot;should commit after indexing everything&quot; do
-        Sunspot::Rails.session.should_receive(:commit).once
+        Sunspot.should_receive(:commit).once
         Post.reindex(:batch_commit =&gt; false)
       end
       </diff>
      <filename>spec/model_spec.rb</filename>
    </modified>
    <modified>
      <diff>@@ -12,19 +12,19 @@ describe 'request lifecycle', :type =&gt; :controller do
 
   it 'should automatically commit after each action if specified' do
     @configuration.user_configuration = { 'auto_commit_after_request' =&gt; true }
-    Sunspot::Rails.session.should_receive(:commit_if_dirty)
+    Sunspot.should_receive(:commit_if_dirty)
     post :create, :post =&gt; { :title =&gt; 'Test 1' }
   end
   
   it 'should not commit, if configuration is set to false' do
     @configuration.user_configuration = { 'auto_commit_after_request' =&gt; false }
-    Sunspot::Rails.session.should_not_receive(:commit_if_dirty)
+    Sunspot.should_not_receive(:commit_if_dirty)
     post :create, :post =&gt; { :title =&gt; 'Test 1' }
   end
 
   it 'should commit if configuration is not specified' do
     @configuration.user_configuration = {}
-    Sunspot::Rails.session.should_receive(:commit_if_dirty)
+    Sunspot.should_receive(:commit_if_dirty)
     post :create, :post =&gt; { :title =&gt; 'Test 1' }
   end
   
@@ -33,7 +33,7 @@ describe 'request lifecycle', :type =&gt; :controller do
   it 'should automatically commit after each delete if specified' do
     @configuration.user_configuration = { 'auto_commit_after_request' =&gt; false,
                                           'auto_commit_after_delete_request' =&gt; true }
-    Sunspot::Rails.session.should_receive(:commit_if_delete_dirty)
+    Sunspot.should_receive(:commit_if_delete_dirty)
     post :create, :post =&gt; { :title =&gt; 'Test 1' }
   end
   </diff>
      <filename>spec/request_lifecycle_spec.rb</filename>
    </modified>
    <modified>
      <diff>@@ -2,28 +2,12 @@ require File.join(File.dirname(__FILE__), 'spec_helper')
 
 describe 'Sunspot::Rails session' do
   it 'should be a different object for each thread' do
-    session1 = nil
-    session2 = nil
-    Thread.new { session1 = Sunspot::Rails.session }.join
-    Thread.new { session2 = Sunspot::Rails.session }.join
-    session1.should_not eql(session2)
   end
 
   it 'should create a separate master/slave session if configured' do
-    with_configuration(
-      'master_solr' =&gt; { 'hostname' =&gt; 'mastersolr.myapp.com' },
-      'solr' =&gt; { 'hostname' =&gt; 'slavesolr.myapp.com' }
-    ) do
-      Sunspot::Rails.session.should_not eql(Sunspot::Rails.master_session)
-    end
   end
 
   it 'should not create a separate master/slave session if no master configured' do
-    with_configuration(
-      'solr' =&gt; { 'hostname' =&gt; 'solr.myapp.com' }
-    ) do
-      Sunspot::Rails.session.should eql(Sunspot::Rails.session)
-    end
   end
 
   private</diff>
      <filename>spec/session_spec.rb</filename>
    </modified>
    <modified>
      <diff>@@ -1,7 +1,10 @@
 ENV['RAILS_ENV'] = 'test'
 ENV['RAILS_ROOT'] ||= File.join(File.dirname(__FILE__), 'mock_app')
 
-gem 'sunspot'
+if File.exist?(sunspot_lib = File.expand_path(File.join(File.dirname(__FILE__), '..', '..', 'sunspot', 'lib')))
+  STDERR.puts(&quot;Using sunspot lib at #{sunspot_lib}&quot;)
+  $: &lt;&lt; sunspot_lib
+end
 
 require File.expand_path(File.join(ENV['RAILS_ROOT'], 'config', 'environment.rb'))
 
@@ -29,8 +32,8 @@ end
 Spec::Runner.configure do |config|
   config.before(:each) do
     if integrate_sunspot?
-      Sunspot::Rails.session.remove_all
-      Sunspot::Rails.session.commit
+      Sunspot.remove_all
+      Sunspot.commit
     end
     load_schema
   end</diff>
      <filename>spec/spec_helper.rb</filename>
    </modified>
    <modified>
      <diff>@@ -5,17 +5,17 @@ describe 'Sunspot Spec Integration - integrate sunspot' do
   
   it &quot;should call sunspot&quot; do
     @post = PostWithAuto.create!
-    Sunspot::Rails.session.commit
+    Sunspot.commit
     PostWithAuto.search.results.should == [@post]
   end
 end
 
 describe 'Sunspot Spec Integration - mock sunspot' do
   it &quot;should call sunspot&quot; do
-    Sunspot::Rails.session.remove_all
-    Sunspot::Rails.session.commit
+    Sunspot.remove_all
+    Sunspot.commit
     @post = PostWithAuto.create!
-    Sunspot::Rails.session.commit
+    Sunspot.commit
     PostWithAuto.search.results.should_not include(@post)
   end
 end</diff>
      <filename>spec/sunspot_mocking_spec.rb</filename>
    </modified>
  </modified>
  <removed type="array"/>
  <parents type="array">
    <parent>
      <id>2fe0ba0a7b213802b6bb3fda4bd683c3eaeaaded</id>
    </parent>
  </parents>
  <author>
    <name>Mat Brown</name>
    <email>mat@patch.com</email>
  </author>
  <url>http://github.com/outoftime/sunspot_rails/commit/9a2215eb3d0367cce996a5a0d005d6ab4686a1b4</url>
  <id>9a2215eb3d0367cce996a5a0d005d6ab4686a1b4</id>
  <committed-date>2009-10-20T14:41:42-07:00</committed-date>
  <authored-date>2009-10-20T14:40:24-07:00</authored-date>
  <message>Use a session proxy for session interaction</message>
  <tree>0fd720a1162aa5891ac38f01d2a4904a2c56e7b9</tree>
  <committer>
    <name>Mat Brown</name>
    <email>mat@patch.com</email>
  </committer>
</commit>
