sunspot 1.3.3 → 2.0.0.pre.111215
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/History.txt +7 -10
 - data/lib/sunspot/configuration.rb +5 -0
 - data/lib/sunspot/dsl/field_group.rb +37 -0
 - data/lib/sunspot/dsl/field_query.rb +48 -0
 - data/lib/sunspot/dsl/restriction_with_near.rb +17 -0
 - data/lib/sunspot/dsl.rb +1 -1
 - data/lib/sunspot/query/common_query.rb +10 -0
 - data/lib/sunspot/query/dismax.rb +5 -1
 - data/lib/sunspot/query/field_group.rb +35 -0
 - data/lib/sunspot/query/geofilt.rb +15 -0
 - data/lib/sunspot/query/sort.rb +14 -0
 - data/lib/sunspot/query/sort_composite.rb +3 -2
 - data/lib/sunspot/query.rb +2 -2
 - data/lib/sunspot/search/abstract_search.rb +52 -64
 - data/lib/sunspot/search/field_group.rb +32 -0
 - data/lib/sunspot/search/group.rb +35 -0
 - data/lib/sunspot/search/hit_enumerable.rb +72 -0
 - data/lib/sunspot/search/paginated_collection.rb +5 -3
 - data/lib/sunspot/search.rb +1 -1
 - data/lib/sunspot/session_proxy.rb +0 -8
 - data/lib/sunspot/type.rb +21 -0
 - data/lib/sunspot/version.rb +1 -1
 - data/spec/api/class_set_spec.rb +1 -1
 - data/spec/api/hit_enumerable_spec.rb +47 -0
 - data/spec/api/query/group_spec.rb +32 -0
 - data/spec/api/query/ordering_pagination_examples.rb +7 -0
 - data/spec/api/query/spatial_examples.rb +11 -0
 - data/spec/api/query/standard_spec.rb +1 -0
 - data/spec/api/search/paginated_collection_spec.rb +10 -0
 - data/spec/api/search/results_spec.rb +6 -0
 - data/spec/integration/field_grouping_spec.rb +65 -0
 - data/spec/integration/geospatial_spec.rb +59 -0
 - data/spec/integration/highlighting_spec.rb +20 -0
 - data/spec/mocks/post.rb +1 -0
 - data/sunspot.gemspec +2 -1
 - metadata +54 -34
 - data/lib/sunspot/session_proxy/retry_5xx_session_proxy.rb +0 -67
 - data/spec/api/session_proxy/retry_5xx_session_proxy_spec.rb +0 -73
 
| 
         @@ -1,67 +0,0 @@ 
     | 
|
| 
       1 
     | 
    
         
            -
            require File.join(File.dirname(__FILE__), 'abstract_session_proxy')
         
     | 
| 
       2 
     | 
    
         
            -
             
     | 
| 
       3 
     | 
    
         
            -
            module Sunspot
         
     | 
| 
       4 
     | 
    
         
            -
              module SessionProxy
         
     | 
| 
       5 
     | 
    
         
            -
                class Retry5xxSessionProxy < AbstractSessionProxy
         
     | 
| 
       6 
     | 
    
         
            -
             
     | 
| 
       7 
     | 
    
         
            -
                  class RetryHandler
         
     | 
| 
       8 
     | 
    
         
            -
                    attr_reader :search_session
         
     | 
| 
       9 
     | 
    
         
            -
             
     | 
| 
       10 
     | 
    
         
            -
                    def initialize(search_session)
         
     | 
| 
       11 
     | 
    
         
            -
                      @search_session = search_session
         
     | 
| 
       12 
     | 
    
         
            -
                    end
         
     | 
| 
       13 
     | 
    
         
            -
             
     | 
| 
       14 
     | 
    
         
            -
                    def method_missing(m, *args, &block)
         
     | 
| 
       15 
     | 
    
         
            -
                      retry_count = 1
         
     | 
| 
       16 
     | 
    
         
            -
                      begin
         
     | 
| 
       17 
     | 
    
         
            -
                        search_session.send(m, *args, &block)
         
     | 
| 
       18 
     | 
    
         
            -
                      rescue Errno::ECONNRESET => e
         
     | 
| 
       19 
     | 
    
         
            -
                        if retry_count > 0
         
     | 
| 
       20 
     | 
    
         
            -
                          $stderr.puts "Error - #{e.message[/^.*$/]} - retrying..."
         
     | 
| 
       21 
     | 
    
         
            -
                          retry_count -= 1
         
     | 
| 
       22 
     | 
    
         
            -
                          retry
         
     | 
| 
       23 
     | 
    
         
            -
                        else
         
     | 
| 
       24 
     | 
    
         
            -
                          $stderr.puts "Error - #{e.message[/^.*$/]} - ignoring..."
         
     | 
| 
       25 
     | 
    
         
            -
                        end
         
     | 
| 
       26 
     | 
    
         
            -
                      rescue RSolr::Error::Http => e
         
     | 
| 
       27 
     | 
    
         
            -
                        if (500..599).include?(e.response[:status].to_i)
         
     | 
| 
       28 
     | 
    
         
            -
                          if retry_count > 0
         
     | 
| 
       29 
     | 
    
         
            -
                            $stderr.puts "Error - #{e.message[/^.*$/]} - retrying..."
         
     | 
| 
       30 
     | 
    
         
            -
                            retry_count -= 1
         
     | 
| 
       31 
     | 
    
         
            -
                            retry
         
     | 
| 
       32 
     | 
    
         
            -
                          else
         
     | 
| 
       33 
     | 
    
         
            -
                            $stderr.puts "Error - #{e.message[/^.*$/]} - ignoring..."
         
     | 
| 
       34 
     | 
    
         
            -
                            e.response
         
     | 
| 
       35 
     | 
    
         
            -
                          end
         
     | 
| 
       36 
     | 
    
         
            -
                        else
         
     | 
| 
       37 
     | 
    
         
            -
                          raise e
         
     | 
| 
       38 
     | 
    
         
            -
                        end
         
     | 
| 
       39 
     | 
    
         
            -
                      end
         
     | 
| 
       40 
     | 
    
         
            -
                    end
         
     | 
| 
       41 
     | 
    
         
            -
                  end
         
     | 
| 
       42 
     | 
    
         
            -
             
     | 
| 
       43 
     | 
    
         
            -
                  attr_reader :search_session
         
     | 
| 
       44 
     | 
    
         
            -
                  attr_reader :retry_handler
         
     | 
| 
       45 
     | 
    
         
            -
             
     | 
| 
       46 
     | 
    
         
            -
                  delegate :new_search, :search, :config,
         
     | 
| 
       47 
     | 
    
         
            -
                            :new_more_like_this, :more_like_this,
         
     | 
| 
       48 
     | 
    
         
            -
                            :delete_dirty, :delete_dirty?,
         
     | 
| 
       49 
     | 
    
         
            -
                            :to => :search_session
         
     | 
| 
       50 
     | 
    
         
            -
             
     | 
| 
       51 
     | 
    
         
            -
                  def initialize(search_session = Sunspot.session)
         
     | 
| 
       52 
     | 
    
         
            -
                    @search_session = search_session
         
     | 
| 
       53 
     | 
    
         
            -
                    @retry_handler = RetryHandler.new(search_session)
         
     | 
| 
       54 
     | 
    
         
            -
                  end
         
     | 
| 
       55 
     | 
    
         
            -
             
     | 
| 
       56 
     | 
    
         
            -
                  def rescued_exception(method, e)
         
     | 
| 
       57 
     | 
    
         
            -
                    $stderr.puts("Exception in #{method}: #{e.message}")
         
     | 
| 
       58 
     | 
    
         
            -
                  end
         
     | 
| 
       59 
     | 
    
         
            -
             
     | 
| 
       60 
     | 
    
         
            -
                  delegate :batch, :commit, :commit_if_dirty, :commit_if_delete_dirty,
         
     | 
| 
       61 
     | 
    
         
            -
                    :dirty?, :index!, :index, :optimize, :remove!, :remove, :remove_all!,
         
     | 
| 
       62 
     | 
    
         
            -
                    :remove_all, :remove_by_id!, :remove_by_id,
         
     | 
| 
       63 
     | 
    
         
            -
                    :to => :retry_handler
         
     | 
| 
       64 
     | 
    
         
            -
             
     | 
| 
       65 
     | 
    
         
            -
                end
         
     | 
| 
       66 
     | 
    
         
            -
              end
         
     | 
| 
       67 
     | 
    
         
            -
            end
         
     | 
| 
         @@ -1,73 +0,0 @@ 
     | 
|
| 
       1 
     | 
    
         
            -
            require File.expand_path('spec_helper', File.dirname(__FILE__))
         
     | 
| 
       2 
     | 
    
         
            -
             
     | 
| 
       3 
     | 
    
         
            -
            describe Sunspot::SessionProxy::Retry5xxSessionProxy do
         
     | 
| 
       4 
     | 
    
         
            -
              
         
     | 
| 
       5 
     | 
    
         
            -
              before :each do
         
     | 
| 
       6 
     | 
    
         
            -
                Sunspot::Session.connection_class = Mock::ConnectionFactory.new
         
     | 
| 
       7 
     | 
    
         
            -
                @sunspot_session = Sunspot.session
         
     | 
| 
       8 
     | 
    
         
            -
                @proxy = Sunspot::SessionProxy::Retry5xxSessionProxy.new(@sunspot_session)
         
     | 
| 
       9 
     | 
    
         
            -
                Sunspot.session = @proxy
         
     | 
| 
       10 
     | 
    
         
            -
              end
         
     | 
| 
       11 
     | 
    
         
            -
             
     | 
| 
       12 
     | 
    
         
            -
              class FakeRSolrErrorHttp < RSolr::Error::Http
         
     | 
| 
       13 
     | 
    
         
            -
                def backtrace
         
     | 
| 
       14 
     | 
    
         
            -
                  []
         
     | 
| 
       15 
     | 
    
         
            -
                end
         
     | 
| 
       16 
     | 
    
         
            -
              end
         
     | 
| 
       17 
     | 
    
         
            -
             
     | 
| 
       18 
     | 
    
         
            -
              let :fake_rsolr_request do
         
     | 
| 
       19 
     | 
    
         
            -
                {:uri => 'http://solr.test/uri'}
         
     | 
| 
       20 
     | 
    
         
            -
              end
         
     | 
| 
       21 
     | 
    
         
            -
             
     | 
| 
       22 
     | 
    
         
            -
              def fake_rsolr_response(status)
         
     | 
| 
       23 
     | 
    
         
            -
                {:status => status.to_s}
         
     | 
| 
       24 
     | 
    
         
            -
              end
         
     | 
| 
       25 
     | 
    
         
            -
             
     | 
| 
       26 
     | 
    
         
            -
              let :post do
         
     | 
| 
       27 
     | 
    
         
            -
                Post.new(:title => 'test')
         
     | 
| 
       28 
     | 
    
         
            -
              end
         
     | 
| 
       29 
     | 
    
         
            -
             
     | 
| 
       30 
     | 
    
         
            -
              it "should behave normally without a stubbed exception" do
         
     | 
| 
       31 
     | 
    
         
            -
                @sunspot_session.should_receive(:index).and_return(mock)
         
     | 
| 
       32 
     | 
    
         
            -
                Sunspot.index(post)
         
     | 
| 
       33 
     | 
    
         
            -
              end
         
     | 
| 
       34 
     | 
    
         
            -
             
     | 
| 
       35 
     | 
    
         
            -
              it "should be successful with a single exception followed by a sucess" do
         
     | 
| 
       36 
     | 
    
         
            -
                e = FakeRSolrErrorHttp.new(fake_rsolr_request, fake_rsolr_response(503))
         
     | 
| 
       37 
     | 
    
         
            -
                @sunspot_session.should_receive(:index).and_return do
         
     | 
| 
       38 
     | 
    
         
            -
                  @sunspot_session.should_receive(:index).and_return(mock)
         
     | 
| 
       39 
     | 
    
         
            -
                  raise e
         
     | 
| 
       40 
     | 
    
         
            -
                end
         
     | 
| 
       41 
     | 
    
         
            -
                Sunspot.index(post)
         
     | 
| 
       42 
     | 
    
         
            -
              end
         
     | 
| 
       43 
     | 
    
         
            -
             
     | 
| 
       44 
     | 
    
         
            -
              it "should return the error response after two exceptions" do
         
     | 
| 
       45 
     | 
    
         
            -
                fake_response = fake_rsolr_response(503)
         
     | 
| 
       46 
     | 
    
         
            -
                e = FakeRSolrErrorHttp.new(fake_rsolr_request, fake_response)
         
     | 
| 
       47 
     | 
    
         
            -
                fake_success = mock('success')
         
     | 
| 
       48 
     | 
    
         
            -
             
     | 
| 
       49 
     | 
    
         
            -
                @sunspot_session.should_receive(:index).and_return do
         
     | 
| 
       50 
     | 
    
         
            -
                  @sunspot_session.should_receive(:index).and_return do
         
     | 
| 
       51 
     | 
    
         
            -
                    @sunspot_session.stub!(:index).and_return(fake_success)
         
     | 
| 
       52 
     | 
    
         
            -
                    raise e
         
     | 
| 
       53 
     | 
    
         
            -
                  end
         
     | 
| 
       54 
     | 
    
         
            -
                  raise e
         
     | 
| 
       55 
     | 
    
         
            -
                end
         
     | 
| 
       56 
     | 
    
         
            -
             
     | 
| 
       57 
     | 
    
         
            -
                response = Sunspot.index(post)
         
     | 
| 
       58 
     | 
    
         
            -
                response.should_not == fake_success
         
     | 
| 
       59 
     | 
    
         
            -
                response.should == fake_response
         
     | 
| 
       60 
     | 
    
         
            -
              end
         
     | 
| 
       61 
     | 
    
         
            -
             
     | 
| 
       62 
     | 
    
         
            -
              it "should not retry a 4xx" do
         
     | 
| 
       63 
     | 
    
         
            -
                e = FakeRSolrErrorHttp.new(fake_rsolr_request, fake_rsolr_response(400))
         
     | 
| 
       64 
     | 
    
         
            -
                @sunspot_session.should_receive(:index).and_raise(e)
         
     | 
| 
       65 
     | 
    
         
            -
                lambda { Sunspot.index(post) }.should raise_error
         
     | 
| 
       66 
     | 
    
         
            -
              end
         
     | 
| 
       67 
     | 
    
         
            -
             
     | 
| 
       68 
     | 
    
         
            -
              # TODO: try against more than just Sunspot.index? but that's just testing the
         
     | 
| 
       69 
     | 
    
         
            -
              # invocation of delegate, so probably not important. -nz 11Apr12
         
     | 
| 
       70 
     | 
    
         
            -
             
     | 
| 
       71 
     | 
    
         
            -
              it_should_behave_like 'session proxy'
         
     | 
| 
       72 
     | 
    
         
            -
              
         
     | 
| 
       73 
     | 
    
         
            -
            end
         
     |