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.
Files changed (38) hide show
  1. data/History.txt +7 -10
  2. data/lib/sunspot/configuration.rb +5 -0
  3. data/lib/sunspot/dsl/field_group.rb +37 -0
  4. data/lib/sunspot/dsl/field_query.rb +48 -0
  5. data/lib/sunspot/dsl/restriction_with_near.rb +17 -0
  6. data/lib/sunspot/dsl.rb +1 -1
  7. data/lib/sunspot/query/common_query.rb +10 -0
  8. data/lib/sunspot/query/dismax.rb +5 -1
  9. data/lib/sunspot/query/field_group.rb +35 -0
  10. data/lib/sunspot/query/geofilt.rb +15 -0
  11. data/lib/sunspot/query/sort.rb +14 -0
  12. data/lib/sunspot/query/sort_composite.rb +3 -2
  13. data/lib/sunspot/query.rb +2 -2
  14. data/lib/sunspot/search/abstract_search.rb +52 -64
  15. data/lib/sunspot/search/field_group.rb +32 -0
  16. data/lib/sunspot/search/group.rb +35 -0
  17. data/lib/sunspot/search/hit_enumerable.rb +72 -0
  18. data/lib/sunspot/search/paginated_collection.rb +5 -3
  19. data/lib/sunspot/search.rb +1 -1
  20. data/lib/sunspot/session_proxy.rb +0 -8
  21. data/lib/sunspot/type.rb +21 -0
  22. data/lib/sunspot/version.rb +1 -1
  23. data/spec/api/class_set_spec.rb +1 -1
  24. data/spec/api/hit_enumerable_spec.rb +47 -0
  25. data/spec/api/query/group_spec.rb +32 -0
  26. data/spec/api/query/ordering_pagination_examples.rb +7 -0
  27. data/spec/api/query/spatial_examples.rb +11 -0
  28. data/spec/api/query/standard_spec.rb +1 -0
  29. data/spec/api/search/paginated_collection_spec.rb +10 -0
  30. data/spec/api/search/results_spec.rb +6 -0
  31. data/spec/integration/field_grouping_spec.rb +65 -0
  32. data/spec/integration/geospatial_spec.rb +59 -0
  33. data/spec/integration/highlighting_spec.rb +20 -0
  34. data/spec/mocks/post.rb +1 -0
  35. data/sunspot.gemspec +2 -1
  36. metadata +54 -34
  37. data/lib/sunspot/session_proxy/retry_5xx_session_proxy.rb +0 -67
  38. 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