elastomer-client 0.7.0 → 0.8.1

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 (57) hide show
  1. checksums.yaml +4 -4
  2. data/.overcommit.yml +5 -0
  3. data/.rubocop.yml +83 -0
  4. data/CHANGELOG.md +8 -0
  5. data/Gemfile +2 -2
  6. data/README.md +1 -1
  7. data/Rakefile +2 -2
  8. data/elastomer-client.gemspec +4 -2
  9. data/lib/elastomer/client.rb +42 -37
  10. data/lib/elastomer/client/bulk.rb +2 -2
  11. data/lib/elastomer/client/cluster.rb +19 -19
  12. data/lib/elastomer/client/delete_by_query.rb +7 -7
  13. data/lib/elastomer/client/docs.rb +81 -24
  14. data/lib/elastomer/client/errors.rb +2 -2
  15. data/lib/elastomer/client/index.rb +65 -29
  16. data/lib/elastomer/client/multi_percolate.rb +127 -0
  17. data/lib/elastomer/client/multi_search.rb +2 -2
  18. data/lib/elastomer/client/nodes.rb +4 -4
  19. data/lib/elastomer/client/percolator.rb +77 -0
  20. data/lib/elastomer/client/repository.rb +7 -7
  21. data/lib/elastomer/client/scroller.rb +14 -14
  22. data/lib/elastomer/client/snapshot.rb +9 -9
  23. data/lib/elastomer/client/template.rb +3 -3
  24. data/lib/elastomer/client/warmer.rb +5 -16
  25. data/lib/elastomer/core_ext/time.rb +1 -1
  26. data/lib/elastomer/middleware/encode_json.rb +5 -5
  27. data/lib/elastomer/middleware/opaque_id.rb +3 -3
  28. data/lib/elastomer/middleware/parse_json.rb +5 -5
  29. data/lib/elastomer/notifications.rb +4 -4
  30. data/lib/elastomer/version.rb +1 -1
  31. data/script/bootstrap +2 -0
  32. data/script/console +5 -5
  33. data/test/assertions.rb +26 -24
  34. data/test/client/bulk_test.rb +111 -111
  35. data/test/client/cluster_test.rb +58 -58
  36. data/test/client/delete_by_query_test.rb +53 -53
  37. data/test/client/docs_test.rb +279 -203
  38. data/test/client/errors_test.rb +1 -1
  39. data/test/client/index_test.rb +143 -109
  40. data/test/client/multi_percolate_test.rb +130 -0
  41. data/test/client/multi_search_test.rb +30 -28
  42. data/test/client/nodes_test.rb +30 -29
  43. data/test/client/percolator_test.rb +52 -0
  44. data/test/client/repository_test.rb +23 -23
  45. data/test/client/scroller_test.rb +40 -40
  46. data/test/client/snapshot_test.rb +15 -15
  47. data/test/client/stubbed_client_test.rb +15 -15
  48. data/test/client/template_test.rb +10 -10
  49. data/test/client/warmer_test.rb +18 -18
  50. data/test/client_test.rb +53 -53
  51. data/test/core_ext/time_test.rb +12 -12
  52. data/test/middleware/encode_json_test.rb +20 -20
  53. data/test/middleware/opaque_id_test.rb +10 -10
  54. data/test/middleware/parse_json_test.rb +14 -14
  55. data/test/notifications_test.rb +32 -32
  56. data/test/test_helper.rb +24 -24
  57. metadata +38 -2
@@ -1,9 +1,9 @@
1
- require File.expand_path('../../test_helper', __FILE__)
1
+ require File.expand_path("../../test_helper", __FILE__)
2
2
 
3
3
  describe Elastomer::Client::Cluster do
4
4
 
5
5
  before do
6
- @name = 'elastomer-cluster-test'
6
+ @name = "elastomer-cluster-test"
7
7
  @index = $client.index @name
8
8
  @index.delete if @index.exists?
9
9
  @cluster = $client.cluster
@@ -13,49 +13,49 @@ describe Elastomer::Client::Cluster do
13
13
  @index.delete if @index.exists?
14
14
  end
15
15
 
16
- it 'gets the cluster health' do
16
+ it "gets the cluster health" do
17
17
  h = @cluster.health
18
- assert h.key?('cluster_name'), 'the cluster name is returned'
19
- assert h.key?('status'), 'the cluster status is returned'
18
+ assert h.key?("cluster_name"), "the cluster name is returned"
19
+ assert h.key?("status"), "the cluster status is returned"
20
20
  end
21
21
 
22
- it 'gets the cluster state' do
22
+ it "gets the cluster state" do
23
23
  h = @cluster.state
24
- assert h.key?('cluster_name'), 'the cluster name is returned'
25
- assert h.key?('master_node'), 'the master node is returned'
26
- assert_instance_of Hash, h['nodes'], 'the node list is returned'
27
- assert_instance_of Hash, h['metadata'], 'the metadata are returned'
24
+ assert h.key?("cluster_name"), "the cluster name is returned"
25
+ assert h.key?("master_node"), "the master node is returned"
26
+ assert_instance_of Hash, h["nodes"], "the node list is returned"
27
+ assert_instance_of Hash, h["metadata"], "the metadata are returned"
28
28
  end
29
29
 
30
30
  if es_version_1_x?
31
- it 'filters cluster state by metrics' do
32
- h = @cluster.state(:metrics => 'nodes')
33
- refute h.key('metadata'), 'expected only nodes state'
34
- h = @cluster.state(:metrics => 'metadata')
35
- refute h.key('nodes'), 'expected only metadata state'
31
+ it "filters cluster state by metrics" do
32
+ h = @cluster.state(:metrics => "nodes")
33
+ refute h.key("metadata"), "expected only nodes state"
34
+ h = @cluster.state(:metrics => "metadata")
35
+ refute h.key("nodes"), "expected only metadata state"
36
36
  end
37
37
 
38
- it 'filters cluster state by indices' do
38
+ it "filters cluster state by indices" do
39
39
  @index.create({}) unless @index.exists?
40
- h = @cluster.state(:metrics => 'metadata', :indices => @name)
41
- assert [@name], h['metadata']['indices'].keys
40
+ h = @cluster.state(:metrics => "metadata", :indices => @name)
41
+ assert [@name], h["metadata"]["indices"].keys
42
42
  end
43
43
  end
44
44
 
45
- it 'gets the cluster settings' do
45
+ it "gets the cluster settings" do
46
46
  h = @cluster.get_settings
47
- assert_instance_of Hash, h['persistent'], 'the persistent settings are returned'
48
- assert_instance_of Hash, h['transient'], 'the transient settings are returned'
47
+ assert_instance_of Hash, h["persistent"], "the persistent settings are returned"
48
+ assert_instance_of Hash, h["transient"], "the transient settings are returned"
49
49
  end
50
50
 
51
- it 'gets the cluster settings with .settings' do
51
+ it "gets the cluster settings with .settings" do
52
52
  h = @cluster.settings
53
- assert_instance_of Hash, h['persistent'], 'the persistent settings are returned'
54
- assert_instance_of Hash, h['transient'], 'the transient settings are returned'
53
+ assert_instance_of Hash, h["persistent"], "the persistent settings are returned"
54
+ assert_instance_of Hash, h["transient"], "the transient settings are returned"
55
55
  end
56
56
 
57
- it 'updates the cluster settings' do
58
- @cluster.update_settings :transient => { 'indices.ttl.interval' => "30" }
57
+ it "updates the cluster settings" do
58
+ @cluster.update_settings :transient => { "indices.ttl.interval" => "30" }
59
59
  h = @cluster.settings
60
60
 
61
61
  #COMPATIBILITY
@@ -65,43 +65,43 @@ describe Elastomer::Client::Cluster do
65
65
  # {"indices": {"ttl": {"interval":"30"}}}
66
66
 
67
67
  # To support both versions, we check for either return format.
68
- value = h['transient']['indices.ttl.interval'] ||
69
- h['transient']['indices']['ttl']['interval']
68
+ value = h["transient"]["indices.ttl.interval"] ||
69
+ h["transient"]["indices"]["ttl"]["interval"]
70
70
  assert_equal "30", value
71
71
 
72
- @cluster.update_settings :transient => { 'indices.ttl.interval' => "60" }
72
+ @cluster.update_settings :transient => { "indices.ttl.interval" => "60" }
73
73
  h = @cluster.settings
74
74
 
75
- value = h['transient']['indices.ttl.interval'] ||
76
- h['transient']['indices']['ttl']['interval']
75
+ value = h["transient"]["indices.ttl.interval"] ||
76
+ h["transient"]["indices"]["ttl"]["interval"]
77
77
  assert_equal "60", value
78
78
  end
79
79
 
80
- it 'returns cluster stats' do
80
+ it "returns cluster stats" do
81
81
  h = @cluster.stats
82
82
  assert_equal %w[cluster_name indices nodes status timestamp], h.keys.sort
83
83
  end
84
84
 
85
- it 'returns a list of pending tasks' do
85
+ it "returns a list of pending tasks" do
86
86
  h = @cluster.pending_tasks
87
87
  assert_equal %w[tasks], h.keys.sort
88
- assert h['tasks'].is_a?(Array), "the tasks lists is always an Array even if empty"
88
+ assert h["tasks"].is_a?(Array), "the tasks lists is always an Array even if empty"
89
89
  end
90
90
 
91
- it 'returns the list of indices in the cluster' do
91
+ it "returns the list of indices in the cluster" do
92
92
  @index.create({}) unless @index.exists?
93
93
  indices = @cluster.indices
94
- assert !indices.empty?, 'expected to see an index'
94
+ assert !indices.empty?, "expected to see an index"
95
95
  end
96
96
 
97
- it 'returns the list of nodes in the cluster' do
97
+ it "returns the list of nodes in the cluster" do
98
98
  nodes = @cluster.nodes
99
- assert !nodes.empty?, 'we have to have some nodes'
99
+ assert !nodes.empty?, "we have to have some nodes"
100
100
  end
101
101
 
102
- describe 'when working with aliases' do
102
+ describe "when working with aliases" do
103
103
  before do
104
- @name = 'elastomer-cluster-test'
104
+ @name = "elastomer-cluster-test"
105
105
  @index = $client.index @name
106
106
  @index.create({}) unless @index.exists?
107
107
  wait_for_index(@name)
@@ -111,56 +111,56 @@ describe Elastomer::Client::Cluster do
111
111
  @index.delete if @index.exists?
112
112
  end
113
113
 
114
- it 'adds and gets an alias' do
114
+ it "adds and gets an alias" do
115
115
  hash = @cluster.get_aliases
116
116
  if es_version_always_returns_aliases?
117
- assert_empty hash[@name]['aliases']
117
+ assert_empty hash[@name]["aliases"]
118
118
  end
119
119
 
120
120
  @cluster.update_aliases \
121
- :add => {:index => @name, :alias => 'elastomer-test-unikitty'}
121
+ :add => {:index => @name, :alias => "elastomer-test-unikitty"}
122
122
 
123
123
  hash = @cluster.get_aliases
124
- assert_equal ['elastomer-test-unikitty'], hash[@name]['aliases'].keys
124
+ assert_equal ["elastomer-test-unikitty"], hash[@name]["aliases"].keys
125
125
  end
126
126
 
127
- it 'adds and gets an alias with .aliases' do
127
+ it "adds and gets an alias with .aliases" do
128
128
  hash = @cluster.aliases
129
129
  if es_version_always_returns_aliases?
130
- assert_empty hash[@name]['aliases']
130
+ assert_empty hash[@name]["aliases"]
131
131
  end
132
132
 
133
133
  @cluster.update_aliases \
134
- :add => {:index => @name, :alias => 'elastomer-test-unikitty'}
134
+ :add => {:index => @name, :alias => "elastomer-test-unikitty"}
135
135
 
136
136
  hash = @cluster.aliases
137
- assert_equal ['elastomer-test-unikitty'], hash[@name]['aliases'].keys
137
+ assert_equal ["elastomer-test-unikitty"], hash[@name]["aliases"].keys
138
138
  end
139
139
 
140
- it 'removes an alias' do
140
+ it "removes an alias" do
141
141
  @cluster.update_aliases \
142
- :add => {:index => @name, :alias => 'elastomer-test-unikitty'}
142
+ :add => {:index => @name, :alias => "elastomer-test-unikitty"}
143
143
 
144
144
  hash = @cluster.get_aliases
145
- assert_equal ['elastomer-test-unikitty'], hash[@name]['aliases'].keys
145
+ assert_equal ["elastomer-test-unikitty"], hash[@name]["aliases"].keys
146
146
 
147
147
  @cluster.update_aliases([
148
- {:add => {:index => @name, :alias => 'elastomer-test-SpongeBob-SquarePants'}},
149
- {:remove => {:index => @name, :alias => 'elastomer-test-unikitty'}}
148
+ {:add => {:index => @name, :alias => "elastomer-test-SpongeBob-SquarePants"}},
149
+ {:remove => {:index => @name, :alias => "elastomer-test-unikitty"}}
150
150
  ])
151
151
 
152
152
  hash = @cluster.get_aliases
153
- assert_equal ['elastomer-test-SpongeBob-SquarePants'], hash[@name]['aliases'].keys
153
+ assert_equal ["elastomer-test-SpongeBob-SquarePants"], hash[@name]["aliases"].keys
154
154
  end
155
155
 
156
- it 'accepts the full aliases actions hash' do
156
+ it "accepts the full aliases actions hash" do
157
157
  @cluster.update_aliases :actions => [
158
- {:add => {:index => @name, :alias => 'elastomer-test-He-Man'}},
159
- {:add => {:index => @name, :alias => 'elastomer-test-Skeletor'}}
158
+ {:add => {:index => @name, :alias => "elastomer-test-He-Man"}},
159
+ {:add => {:index => @name, :alias => "elastomer-test-Skeletor"}}
160
160
  ]
161
161
 
162
162
  hash = @cluster.get_aliases(:index => @name)
163
- assert_equal %w[elastomer-test-He-Man elastomer-test-Skeletor], hash[@name]['aliases'].keys.sort
163
+ assert_equal %w[elastomer-test-He-Man elastomer-test-Skeletor], hash[@name]["aliases"].keys.sort
164
164
  end
165
165
  end
166
166
 
@@ -1,4 +1,4 @@
1
- require File.expand_path('../../test_helper', __FILE__)
1
+ require File.expand_path("../../test_helper", __FILE__)
2
2
 
3
3
  describe Elastomer::Client::DeleteByQuery do
4
4
 
@@ -18,64 +18,64 @@ describe Elastomer::Client::DeleteByQuery do
18
18
  wait_for_index(@index_name)
19
19
  end
20
20
 
21
- it 'deletes by query' do
21
+ it "deletes by query" do
22
22
  @docs.index({ :_id => 0, :name => "mittens" })
23
23
  @docs.index({ :_id => 1, :name => "luna" })
24
24
 
25
25
  @index.refresh
26
- response = $client.delete_by_query(nil, :q => "name:mittens")
26
+ response = @index.delete_by_query(nil, :q => "name:mittens")
27
27
  assert_equal({
28
- '_all' => {
29
- 'found' => 1,
30
- 'deleted' => 1,
31
- 'missing' => 0,
32
- 'failed' => 0,
28
+ "_all" => {
29
+ "found" => 1,
30
+ "deleted" => 1,
31
+ "missing" => 0,
32
+ "failed" => 0,
33
33
  },
34
34
  @index.name => {
35
- 'found' => 1,
36
- 'deleted' => 1,
37
- 'missing' => 0,
38
- 'failed' => 0,
35
+ "found" => 1,
36
+ "deleted" => 1,
37
+ "missing" => 0,
38
+ "failed" => 0,
39
39
  },
40
- }, response['_indices'])
40
+ }, response["_indices"])
41
41
 
42
42
  @index.refresh
43
43
  response = @docs.multi_get :ids => [0, 1]
44
- refute_found response['docs'][0]
45
- assert_found response['docs'][1]
44
+ refute_found response["docs"][0]
45
+ assert_found response["docs"][1]
46
46
  end
47
47
 
48
- it 'respects action_count' do
48
+ it "respects action_count" do
49
49
  @docs.index({ :_id => 0, :name => "mittens" })
50
50
  @docs.index({ :_id => 1, :name => "luna" })
51
51
  @index.refresh
52
52
 
53
- response = $client.delete_by_query(nil, :action_count => 1)
53
+ response = @index.delete_by_query(nil, :action_count => 1)
54
54
 
55
55
  assert_requested(:post, /_bulk/, :times => 2)
56
56
 
57
57
  assert_equal({
58
- '_all' => {
59
- 'found' => 2,
60
- 'deleted' => 2,
61
- 'missing' => 0,
62
- 'failed' => 0,
58
+ "_all" => {
59
+ "found" => 2,
60
+ "deleted" => 2,
61
+ "missing" => 0,
62
+ "failed" => 0,
63
63
  },
64
64
  @index.name => {
65
- 'found' => 2,
66
- 'deleted' => 2,
67
- 'missing' => 0,
68
- 'failed' => 0,
65
+ "found" => 2,
66
+ "deleted" => 2,
67
+ "missing" => 0,
68
+ "failed" => 0,
69
69
  },
70
- }, response['_indices'])
70
+ }, response["_indices"])
71
71
 
72
72
  @index.refresh
73
73
  response = @docs.multi_get :ids => [0, 1]
74
- refute_found response['docs'][0]
75
- refute_found response['docs'][1]
74
+ refute_found response["docs"][0]
75
+ refute_found response["docs"][1]
76
76
  end
77
77
 
78
- it 'counts missing documents' do
78
+ it "counts missing documents" do
79
79
  @docs.index({ :_id => 0 })
80
80
 
81
81
  stub_request(:post, /_bulk/).
@@ -95,24 +95,24 @@ describe Elastomer::Client::DeleteByQuery do
95
95
  end)
96
96
 
97
97
  @index.refresh
98
- response = $client.delete_by_query(nil, :action_count => 1)
98
+ response = @index.delete_by_query(nil, :action_count => 1)
99
99
  assert_equal({
100
- '_all' => {
101
- 'found' => 0,
102
- 'deleted' => 0,
103
- 'missing' => 1,
104
- 'failed' => 0,
100
+ "_all" => {
101
+ "found" => 0,
102
+ "deleted" => 0,
103
+ "missing" => 1,
104
+ "failed" => 0,
105
105
  },
106
106
  @index.name => {
107
- 'found' => 0,
108
- 'deleted' => 0,
109
- 'missing' => 1,
110
- 'failed' => 0,
107
+ "found" => 0,
108
+ "deleted" => 0,
109
+ "missing" => 1,
110
+ "failed" => 0,
111
111
  },
112
- }, response['_indices'])
112
+ }, response["_indices"])
113
113
  end
114
114
 
115
- it 'counts failed operations' do
115
+ it "counts failed operations" do
116
116
  @docs.index({ :_id => 0 })
117
117
 
118
118
  stub_request(:post, /_bulk/).
@@ -131,21 +131,21 @@ describe Elastomer::Client::DeleteByQuery do
131
131
  end)
132
132
 
133
133
  @index.refresh
134
- response = $client.delete_by_query(nil, :action_count => 1)
134
+ response = @index.delete_by_query(nil, :action_count => 1)
135
135
  assert_equal({
136
- '_all' => {
137
- 'found' => 1,
138
- 'deleted' => 0,
139
- 'missing' => 0,
140
- 'failed' => 1,
136
+ "_all" => {
137
+ "found" => 1,
138
+ "deleted" => 0,
139
+ "missing" => 0,
140
+ "failed" => 1,
141
141
  },
142
142
  @index.name => {
143
- 'found' => 1,
144
- 'deleted' => 0,
145
- 'missing' => 0,
146
- 'failed' => 1,
143
+ "found" => 1,
144
+ "deleted" => 0,
145
+ "missing" => 0,
146
+ "failed" => 1,
147
147
  },
148
- }, response['_indices'])
148
+ }, response["_indices"])
149
149
  end
150
150
  end
151
151
  end
@@ -1,27 +1,27 @@
1
- require File.expand_path('../../test_helper', __FILE__)
1
+ require File.expand_path("../../test_helper", __FILE__)
2
2
 
3
3
  describe Elastomer::Client::Docs do
4
4
 
5
5
  before do
6
- @name = 'elastomer-docs-test'
6
+ @name = "elastomer-docs-test"
7
7
  @index = $client.index(@name)
8
8
 
9
9
  unless @index.exists?
10
10
  @index.create \
11
- :settings => { 'index.number_of_shards' => 1, 'index.number_of_replicas' => 0 },
11
+ :settings => { "index.number_of_shards" => 1, "index.number_of_replicas" => 0 },
12
12
  :mappings => {
13
13
  :doc1 => {
14
14
  :_source => { :enabled => true }, :_all => { :enabled => false },
15
15
  :properties => {
16
- :title => { :type => 'string', :analyzer => 'standard' },
17
- :author => { :type => 'string', :index => 'not_analyzed' }
16
+ :title => { :type => "string", :analyzer => "standard" },
17
+ :author => { :type => "string", :index => "not_analyzed" }
18
18
  }
19
19
  },
20
20
  :doc2 => {
21
21
  :_source => { :enabled => true }, :_all => { :enabled => false },
22
22
  :properties => {
23
- :title => { :type => 'string', :analyzer => 'standard', :term_vector => 'with_positions_offsets' },
24
- :author => { :type => 'string', :index => 'not_analyzed' }
23
+ :title => { :type => "string", :analyzer => "standard", :term_vector => "with_positions_offsets" },
24
+ :author => { :type => "string", :index => "not_analyzed" }
25
25
  }
26
26
  }
27
27
  }
@@ -36,68 +36,68 @@ describe Elastomer::Client::Docs do
36
36
  @index.delete if @index.exists?
37
37
  end
38
38
 
39
- it 'autogenerates IDs for documents' do
39
+ it "autogenerates IDs for documents" do
40
40
  h = @docs.index \
41
- :_type => 'doc2',
42
- :title => 'the author of logging',
43
- :author => 'pea53'
41
+ :_type => "doc2",
42
+ :title => "the author of logging",
43
+ :author => "pea53"
44
44
 
45
45
  assert_created h
46
- assert_match %r/^\S{20,22}$/, h['_id']
46
+ assert_match %r/^\S{20,22}$/, h["_id"]
47
47
 
48
48
  h = @docs.index \
49
49
  :_id => nil,
50
- :_type => 'doc3',
51
- :title => 'the author of rubber-band',
52
- :author => 'grantr'
50
+ :_type => "doc3",
51
+ :title => "the author of rubber-band",
52
+ :author => "grantr"
53
53
 
54
54
  assert_created h
55
- assert_match %r/^\S{20,22}$/, h['_id']
55
+ assert_match %r/^\S{20,22}$/, h["_id"]
56
56
 
57
57
  h = @docs.index \
58
- :_id => '',
59
- :_type => 'doc4',
60
- :title => 'the author of toml',
61
- :author => 'mojombo'
58
+ :_id => "",
59
+ :_type => "doc4",
60
+ :title => "the author of toml",
61
+ :author => "mojombo"
62
62
 
63
63
  assert_created h
64
- assert_match %r/^\S{20,22}$/, h['_id']
64
+ assert_match %r/^\S{20,22}$/, h["_id"]
65
65
  end
66
66
 
67
- it 'uses the provided document ID' do
67
+ it "uses the provided document ID" do
68
68
  h = @docs.index \
69
- :_id => '42',
70
- :_type => 'doc2',
71
- :title => 'the author of logging',
72
- :author => 'pea53'
69
+ :_id => "42",
70
+ :_type => "doc2",
71
+ :title => "the author of logging",
72
+ :author => "pea53"
73
73
 
74
74
  assert_created h
75
- assert_equal '42', h['_id']
75
+ assert_equal "42", h["_id"]
76
76
  end
77
77
 
78
- it 'accepts JSON encoded document strings' do
78
+ it "accepts JSON encoded document strings" do
79
79
  h = @docs.index \
80
80
  '{"author":"pea53", "title":"the author of logging"}',
81
- :id => '42',
82
- :type => 'doc2'
81
+ :id => "42",
82
+ :type => "doc2"
83
83
 
84
84
  assert_created h
85
- assert_equal '42', h['_id']
85
+ assert_equal "42", h["_id"]
86
86
 
87
87
  h = @docs.index \
88
88
  '{"author":"grantr", "title":"the author of rubber-band"}',
89
- :type => 'doc2'
89
+ :type => "doc2"
90
90
 
91
91
  assert_created h
92
- assert_match %r/^\S{20,22}$/, h['_id']
92
+ assert_match %r/^\S{20,22}$/, h["_id"]
93
93
  end
94
94
 
95
- it 'extracts underscore attributes from the document' do
95
+ it "extracts underscore attributes from the document" do
96
96
  doc = {
97
- :_id => '12',
98
- :_type => 'doc2',
99
- :_routing => 'author',
100
- '_consistency' => 'all',
97
+ :_id => "12",
98
+ :_type => "doc2",
99
+ :_routing => "author",
100
+ "_consistency" => "all",
101
101
  :title => "The Adventures of Huckleberry Finn",
102
102
  :author => "Mark Twain",
103
103
  :_unknown => "unknown attribute"
@@ -105,133 +105,133 @@ describe Elastomer::Client::Docs do
105
105
 
106
106
  h = @docs.index doc
107
107
  assert_created h
108
- assert_equal '12', h['_id']
108
+ assert_equal "12", h["_id"]
109
109
 
110
110
  refute doc.key?(:_id)
111
111
  refute doc.key?(:_type)
112
112
  refute doc.key?(:_routing)
113
- refute doc.key?('_consistency')
113
+ refute doc.key?("_consistency")
114
114
  assert doc.key?(:_unknown)
115
115
  end
116
116
 
117
- it 'gets documents from the search index' do
118
- h = @docs.get :id => '1', :type => 'doc1'
117
+ it "gets documents from the search index" do
118
+ h = @docs.get :id => "1", :type => "doc1"
119
119
  refute_found h
120
120
 
121
121
  populate!
122
122
 
123
- h = @docs.get :id => '1', :type => 'doc1'
123
+ h = @docs.get :id => "1", :type => "doc1"
124
124
  assert_found h
125
- assert_equal 'mojombo', h['_source']['author']
125
+ assert_equal "mojombo", h["_source"]["author"]
126
126
  end
127
127
 
128
- it 'checks if documents exist in the search index' do
129
- refute @docs.exists?(:id => '1', :type => 'doc1')
128
+ it "checks if documents exist in the search index" do
129
+ refute @docs.exists?(:id => "1", :type => "doc1")
130
130
  populate!
131
- assert @docs.exists?(:id => '1', :type => 'doc1')
131
+ assert @docs.exists?(:id => "1", :type => "doc1")
132
132
  end
133
133
 
134
- it 'checks if documents exist in the search index with .exist?' do
135
- refute @docs.exist?(:id => '1', :type => 'doc1')
134
+ it "checks if documents exist in the search index with .exist?" do
135
+ refute @docs.exist?(:id => "1", :type => "doc1")
136
136
  populate!
137
- assert @docs.exist?(:id => '1', :type => 'doc1')
137
+ assert @docs.exist?(:id => "1", :type => "doc1")
138
138
  end
139
139
 
140
- it 'gets multiple documents from the search index' do
140
+ it "gets multiple documents from the search index" do
141
141
  populate!
142
142
 
143
143
  h = @docs.multi_get :docs => [
144
- { :_id => 1, :_type => 'doc1' },
145
- { :_id => 1, :_type => 'doc2' }
144
+ { :_id => 1, :_type => "doc1" },
145
+ { :_id => 1, :_type => "doc2" }
146
146
  ]
147
- authors = h['docs'].map { |d| d['_source']['author'] }
147
+ authors = h["docs"].map { |d| d["_source"]["author"] }
148
148
  assert_equal %w[mojombo pea53], authors
149
149
 
150
- h = @docs.multi_get({:ids => [2, 1]}, :type => 'doc1')
151
- authors = h['docs'].map { |d| d['_source']['author'] }
150
+ h = @docs.multi_get({:ids => [2, 1]}, :type => "doc1")
151
+ authors = h["docs"].map { |d| d["_source"]["author"] }
152
152
  assert_equal %w[defunkt mojombo], authors
153
153
 
154
- h = @index.docs('doc1').multi_get :ids => [1, 2, 3, 4]
155
- assert_found h['docs'][0]
156
- assert_found h['docs'][1]
157
- refute_found h['docs'][2]
158
- refute_found h['docs'][3]
154
+ h = @index.docs("doc1").multi_get :ids => [1, 2, 3, 4]
155
+ assert_found h["docs"][0]
156
+ assert_found h["docs"][1]
157
+ refute_found h["docs"][2]
158
+ refute_found h["docs"][3]
159
159
  end
160
160
 
161
- it 'gets multiple documents from the search index with .mget' do
161
+ it "gets multiple documents from the search index with .mget" do
162
162
  populate!
163
163
 
164
164
  h = @docs.mget :docs => [
165
- { :_id => 1, :_type => 'doc1' },
166
- { :_id => 1, :_type => 'doc2' }
165
+ { :_id => 1, :_type => "doc1" },
166
+ { :_id => 1, :_type => "doc2" }
167
167
  ]
168
- authors = h['docs'].map { |d| d['_source']['author'] }
168
+ authors = h["docs"].map { |d| d["_source"]["author"] }
169
169
  assert_equal %w[mojombo pea53], authors
170
170
 
171
- h = @docs.mget({:ids => [2, 1]}, :type => 'doc1')
172
- authors = h['docs'].map { |d| d['_source']['author'] }
171
+ h = @docs.mget({:ids => [2, 1]}, :type => "doc1")
172
+ authors = h["docs"].map { |d| d["_source"]["author"] }
173
173
  assert_equal %w[defunkt mojombo], authors
174
174
 
175
- h = @index.docs('doc1').mget :ids => [1, 2, 3, 4]
176
- assert_found h['docs'][0]
177
- assert_found h['docs'][1]
178
- refute_found h['docs'][2]
179
- refute_found h['docs'][3]
175
+ h = @index.docs("doc1").mget :ids => [1, 2, 3, 4]
176
+ assert_found h["docs"][0]
177
+ assert_found h["docs"][1]
178
+ refute_found h["docs"][2]
179
+ refute_found h["docs"][3]
180
180
  end
181
181
 
182
- it 'deletes documents from the search index' do
182
+ it "deletes documents from the search index" do
183
183
  populate!
184
- @docs = @index.docs('doc2')
184
+ @docs = @index.docs("doc2")
185
185
 
186
186
  h = @docs.multi_get :ids => [1, 2]
187
- authors = h['docs'].map { |d| d['_source']['author'] }
187
+ authors = h["docs"].map { |d| d["_source"]["author"] }
188
188
  assert_equal %w[pea53 grantr], authors
189
189
 
190
190
  h = @docs.delete :id => 1
191
- assert h['found'], "expected document to be found"
191
+ assert h["found"], "expected document to be found"
192
192
  h = @docs.multi_get :ids => [1, 2]
193
- refute_found h['docs'][0]
194
- assert_found h['docs'][1]
193
+ refute_found h["docs"][0]
194
+ assert_found h["docs"][1]
195
195
 
196
196
  assert_raises(ArgumentError) { @docs.delete :id => nil }
197
- assert_raises(ArgumentError) { @docs.delete :id => '' }
197
+ assert_raises(ArgumentError) { @docs.delete :id => "" }
198
198
  assert_raises(ArgumentError) { @docs.delete :id => "\t" }
199
199
  end
200
200
 
201
- it 'does not care if you delete a document that is not there' do
202
- @docs = @index.docs('doc2')
201
+ it "does not care if you delete a document that is not there" do
202
+ @docs = @index.docs("doc2")
203
203
  h = @docs.delete :id => 42
204
204
 
205
- refute h['found'], 'expected document to not be found'
205
+ refute h["found"], "expected document to not be found"
206
206
  end
207
207
 
208
- it 'deletes documents by query' do
208
+ it "deletes documents by query" do
209
209
  populate!
210
- @docs = @index.docs('doc2')
210
+ @docs = @index.docs("doc2")
211
211
 
212
212
  h = @docs.multi_get :ids => [1, 2]
213
- authors = h['docs'].map { |d| d['_source']['author'] }
213
+ authors = h["docs"].map { |d| d["_source"]["author"] }
214
214
  assert_equal %w[pea53 grantr], authors
215
215
 
216
216
  h = @docs.delete_by_query(:q => "author:grantr")
217
- assert_equal(h['_indices'], {
218
- '_all' => {
219
- 'found' => 1,
220
- 'deleted' => 1,
221
- 'missing' => 0,
222
- 'failed' => 0,
217
+ assert_equal(h["_indices"], {
218
+ "_all" => {
219
+ "found" => 1,
220
+ "deleted" => 1,
221
+ "missing" => 0,
222
+ "failed" => 0,
223
223
  },
224
224
  @name => {
225
- 'found' => 1,
226
- 'deleted' => 1,
227
- 'missing' => 0,
228
- 'failed' => 0,
225
+ "found" => 1,
226
+ "deleted" => 1,
227
+ "missing" => 0,
228
+ "failed" => 0,
229
229
  },
230
230
  })
231
231
  @index.refresh
232
232
  h = @docs.multi_get :ids => [1, 2]
233
- assert_found h['docs'][0]
234
- refute_found h['docs'][1]
233
+ assert_found h["docs"][0]
234
+ refute_found h["docs"][1]
235
235
 
236
236
  #COMPATIBILITY
237
237
  # ES 1.0 normalized all search APIs to use a :query top level element.
@@ -243,42 +243,42 @@ describe Elastomer::Client::Docs do
243
243
  :query => {
244
244
  :filtered => {
245
245
  :query => {:match_all => {}},
246
- :filter => {:term => {:author => 'pea53'}}
246
+ :filter => {:term => {:author => "pea53"}}
247
247
  }
248
248
  }
249
249
  )
250
250
  @index.refresh
251
251
  h = @docs.multi_get :ids => [1, 2]
252
- refute_found h['docs'][0]
253
- refute_found h['docs'][1]
252
+ refute_found h["docs"][0]
253
+ refute_found h["docs"][1]
254
254
  end
255
255
  end
256
256
 
257
- it 'searches for documents' do
258
- h = @docs.search :q => '*:*'
259
- assert_equal 0, h['hits']['total']
257
+ it "searches for documents" do
258
+ h = @docs.search :q => "*:*"
259
+ assert_equal 0, h["hits"]["total"]
260
260
 
261
261
  populate!
262
262
 
263
- h = @docs.search :q => '*:*'
264
- assert_equal 4, h['hits']['total']
263
+ h = @docs.search :q => "*:*"
264
+ assert_equal 4, h["hits"]["total"]
265
265
 
266
- h = @docs.search :q => '*:*', :type => 'doc1'
267
- assert_equal 2, h['hits']['total']
266
+ h = @docs.search :q => "*:*", :type => "doc1"
267
+ assert_equal 2, h["hits"]["total"]
268
268
 
269
269
  h = @docs.search({
270
270
  :query => {:match_all => {}},
271
- :filter => {:term => {:author => 'defunkt'}}
271
+ :filter => {:term => {:author => "defunkt"}}
272
272
  }, :type => %w[doc1 doc2] )
273
- assert_equal 1, h['hits']['total']
273
+ assert_equal 1, h["hits"]["total"]
274
274
 
275
- hit = h['hits']['hits'].first
276
- assert_equal 'the author of resque', hit['_source']['title']
275
+ hit = h["hits"]["hits"].first
276
+ assert_equal "the author of resque", hit["_source"]["title"]
277
277
  end
278
278
 
279
- it 'supports the shards search API' do
279
+ it "supports the shards search API" do
280
280
  if es_version_supports_search_shards?
281
- h = @docs.search_shards(:type => 'docs1')
281
+ h = @docs.search_shards(:type => "docs1")
282
282
 
283
283
  assert h.key?("nodes"), "response contains \"nodes\" information"
284
284
  assert h.key?("shards"), "response contains \"shards\" information"
@@ -286,20 +286,20 @@ describe Elastomer::Client::Docs do
286
286
  end
287
287
  end
288
288
 
289
- it 'counts documents' do
290
- h = @docs.count :q => '*:*'
291
- assert_equal 0, h['count']
289
+ it "counts documents" do
290
+ h = @docs.count :q => "*:*"
291
+ assert_equal 0, h["count"]
292
292
 
293
293
  populate!
294
294
 
295
- h = @docs.count :q => '*:*'
296
- assert_equal 4, h['count']
295
+ h = @docs.count :q => "*:*"
296
+ assert_equal 4, h["count"]
297
297
 
298
- h = @docs.count :q => '*:*', :type => 'doc1'
299
- assert_equal 2, h['count']
298
+ h = @docs.count :q => "*:*", :type => "doc1"
299
+ assert_equal 2, h["count"]
300
300
 
301
- h = @docs.count :q => '*:*', :type => 'doc1,doc2'
302
- assert_equal 4, h['count']
301
+ h = @docs.count :q => "*:*", :type => "doc1,doc2"
302
+ assert_equal 4, h["count"]
303
303
 
304
304
  #COMPATIBILITY
305
305
  # ES 1.0 normalized all search APIs to use a :query top level element.
@@ -309,7 +309,7 @@ describe Elastomer::Client::Docs do
309
309
  :query => {
310
310
  :filtered => {
311
311
  :query => {:match_all => {}},
312
- :filter => {:term => {:author => 'defunkt'}}
312
+ :filter => {:term => {:author => "defunkt"}}
313
313
  }
314
314
  }
315
315
  }, :type => %w[doc1 doc2] )
@@ -317,30 +317,30 @@ describe Elastomer::Client::Docs do
317
317
  h = @docs.count({
318
318
  :filtered => {
319
319
  :query => {:match_all => {}},
320
- :filter => {:term => {:author => 'defunkt'}}
320
+ :filter => {:term => {:author => "defunkt"}}
321
321
  }
322
322
  }, :type => %w[doc1 doc2] )
323
323
  end
324
- assert_equal 1, h['count']
324
+ assert_equal 1, h["count"]
325
325
  end
326
326
 
327
- it 'searches for more like this' do
327
+ it "searches for more like this" do
328
328
  populate!
329
329
 
330
330
  # for some reason, if there's no document indexed here all the mlt
331
331
  # queries return zero results
332
332
  @docs.index \
333
333
  :_id => 3,
334
- :_type => 'doc1',
335
- :title => 'the author of faraday',
336
- :author => 'technoweenie'
334
+ :_type => "doc1",
335
+ :title => "the author of faraday",
336
+ :author => "technoweenie"
337
337
 
338
338
  @index.refresh
339
339
 
340
340
  h = @docs.more_like_this({
341
- :type => 'doc1',
341
+ :type => "doc1",
342
342
  :id => 1,
343
- :mlt_fields => 'title',
343
+ :mlt_fields => "title",
344
344
  :min_term_freq => 1
345
345
  })
346
346
  assert_equal 2, h["hits"]["total"]
@@ -354,16 +354,16 @@ describe Elastomer::Client::Docs do
354
354
  }
355
355
  }
356
356
  }, {
357
- :type => 'doc1',
357
+ :type => "doc1",
358
358
  :id => 1,
359
- :mlt_fields => 'title,author',
359
+ :mlt_fields => "title,author",
360
360
  :min_term_freq => 1
361
361
  })
362
362
  assert_equal 2, h["hits"]["total"]
363
363
  assert_equal 2, h["facets"]["author"]["total"]
364
364
  end
365
365
 
366
- it 'explains scoring' do
366
+ it "explains scoring" do
367
367
  populate!
368
368
 
369
369
  h = @docs.explain({
@@ -372,17 +372,17 @@ describe Elastomer::Client::Docs do
372
372
  "author" => "defunkt"
373
373
  }
374
374
  }
375
- }, :type => 'doc1', :id => 2)
375
+ }, :type => "doc1", :id => 2)
376
376
  assert_equal true, h["matched"]
377
377
 
378
- h = @docs.explain(:type => 'doc2', :id => 2, :q => "pea53")
378
+ h = @docs.explain(:type => "doc2", :id => 2, :q => "pea53")
379
379
  assert_equal false, h["matched"]
380
380
  end
381
381
 
382
- it 'validates queries' do
382
+ it "validates queries" do
383
383
  populate!
384
384
 
385
- h = @docs.validate :q => '*:*'
385
+ h = @docs.validate :q => "*:*"
386
386
  assert_equal true, h["valid"]
387
387
 
388
388
  #COMPATIBILITY
@@ -393,7 +393,7 @@ describe Elastomer::Client::Docs do
393
393
  :query => {
394
394
  :filtered => {
395
395
  :query => {:match_all => {}},
396
- :filter => {:term => {:author => 'defunkt'}}
396
+ :filter => {:term => {:author => "defunkt"}}
397
397
  }
398
398
  }
399
399
  }, :type => %w[doc1 doc2] )
@@ -401,122 +401,196 @@ describe Elastomer::Client::Docs do
401
401
  h = @docs.validate({
402
402
  :filtered => {
403
403
  :query => {:match_all => {}},
404
- :filter => {:term => {:author => 'defunkt'}}
404
+ :filter => {:term => {:author => "defunkt"}}
405
405
  }
406
406
  }, :type => %w[doc1 doc2] )
407
407
  end
408
408
  assert_equal true, h["valid"]
409
409
  end
410
410
 
411
- it 'updates documents' do
411
+ it "updates documents" do
412
412
  populate!
413
413
 
414
- h = @docs.get :id => '1', :type => 'doc1'
414
+ h = @docs.get :id => "1", :type => "doc1"
415
415
  assert_found h
416
- assert_equal 'mojombo', h['_source']['author']
416
+ assert_equal "mojombo", h["_source"]["author"]
417
417
 
418
418
  @docs.update({
419
- :_id => '1',
420
- :_type => 'doc1',
421
- :doc => {:author => 'TwP'}
419
+ :_id => "1",
420
+ :_type => "doc1",
421
+ :doc => {:author => "TwP"}
422
422
  })
423
- h = @docs.get :id => '1', :type => 'doc1'
423
+ h = @docs.get :id => "1", :type => "doc1"
424
424
  assert_found h
425
- assert_equal 'TwP', h['_source']['author']
425
+ assert_equal "TwP", h["_source"]["author"]
426
426
 
427
427
  if $client.version >= "0.90"
428
428
  @docs.update({
429
- :_id => '42',
430
- :_type => 'doc1',
429
+ :_id => "42",
430
+ :_type => "doc1",
431
431
  :doc => {
432
- :author => 'TwP',
433
- :title => 'the ineffable beauty of search'
432
+ :author => "TwP",
433
+ :title => "the ineffable beauty of search"
434
434
  },
435
435
  :doc_as_upsert => true
436
436
  })
437
437
 
438
- h = @docs.get :id => '42', :type => 'doc1'
438
+ h = @docs.get :id => "42", :type => "doc1"
439
439
  assert_found h
440
- assert_equal 'TwP', h['_source']['author']
441
- assert_equal 'the ineffable beauty of search', h['_source']['title']
440
+ assert_equal "TwP", h["_source"]["author"]
441
+ assert_equal "the ineffable beauty of search", h["_source"]["title"]
442
442
  end
443
443
  end
444
444
 
445
- it 'supports bulk operations with the same parameters as docs' do
445
+ it "supports bulk operations with the same parameters as docs" do
446
446
  response = @docs.bulk do |b|
447
447
  populate!(b)
448
448
  end
449
449
 
450
- assert_instance_of Fixnum, response['took']
450
+ assert_instance_of Fixnum, response["took"]
451
451
 
452
- response = @docs.get(:id => 1, :type => 'doc1')
452
+ response = @docs.get(:id => 1, :type => "doc1")
453
453
  assert_found response
454
- assert_equal 'mojombo', response['_source']['author']
454
+ assert_equal "mojombo", response["_source"]["author"]
455
455
  end
456
456
 
457
457
  if es_version_1_x?
458
- it 'provides access to term vector statistics' do
458
+ it "provides access to term vector statistics" do
459
459
  populate!
460
460
 
461
- response = @docs.termvector :type => 'doc2', :id => 1, :fields => 'title'
461
+ response = @docs.termvector :type => "doc2", :id => 1, :fields => "title"
462
462
 
463
- assert response['term_vectors']['title']
464
- assert response['term_vectors']['title']['field_statistics']
465
- assert response['term_vectors']['title']['terms']
466
- assert_equal %w[author logging of the], response['term_vectors']['title']['terms'].keys
463
+ assert response["term_vectors"]["title"]
464
+ assert response["term_vectors"]["title"]["field_statistics"]
465
+ assert response["term_vectors"]["title"]["terms"]
466
+ assert_equal %w[author logging of the], response["term_vectors"]["title"]["terms"].keys
467
467
  end
468
468
 
469
- it 'provides access to term vector statistics with .termvectors' do
469
+ it "provides access to term vector statistics with .termvectors" do
470
470
  populate!
471
471
 
472
- response = @docs.termvectors :type => 'doc2', :id => 1, :fields => 'title'
472
+ response = @docs.termvectors :type => "doc2", :id => 1, :fields => "title"
473
473
 
474
- assert response['term_vectors']['title']
475
- assert response['term_vectors']['title']['field_statistics']
476
- assert response['term_vectors']['title']['terms']
477
- assert_equal %w[author logging of the], response['term_vectors']['title']['terms'].keys
474
+ assert response["term_vectors"]["title"]
475
+ assert response["term_vectors"]["title"]["field_statistics"]
476
+ assert response["term_vectors"]["title"]["terms"]
477
+ assert_equal %w[author logging of the], response["term_vectors"]["title"]["terms"].keys
478
478
  end
479
479
 
480
- it 'provides access to term vector statistics with .term_vector' do
480
+ it "provides access to term vector statistics with .term_vector" do
481
481
  populate!
482
482
 
483
- response = @docs.term_vector :type => 'doc2', :id => 1, :fields => 'title'
483
+ response = @docs.term_vector :type => "doc2", :id => 1, :fields => "title"
484
484
 
485
- assert response['term_vectors']['title']
486
- assert response['term_vectors']['title']['field_statistics']
487
- assert response['term_vectors']['title']['terms']
488
- assert_equal %w[author logging of the], response['term_vectors']['title']['terms'].keys
485
+ assert response["term_vectors"]["title"]
486
+ assert response["term_vectors"]["title"]["field_statistics"]
487
+ assert response["term_vectors"]["title"]["terms"]
488
+ assert_equal %w[author logging of the], response["term_vectors"]["title"]["terms"].keys
489
489
  end
490
490
 
491
- it 'provides access to term vector statistics with .term_vectors' do
491
+ it "provides access to term vector statistics with .term_vectors" do
492
492
  populate!
493
493
 
494
- response = @docs.term_vectors :type => 'doc2', :id => 1, :fields => 'title'
494
+ response = @docs.term_vectors :type => "doc2", :id => 1, :fields => "title"
495
495
 
496
- assert response['term_vectors']['title']
497
- assert response['term_vectors']['title']['field_statistics']
498
- assert response['term_vectors']['title']['terms']
499
- assert_equal %w[author logging of the], response['term_vectors']['title']['terms'].keys
496
+ assert response["term_vectors"]["title"]
497
+ assert response["term_vectors"]["title"]["field_statistics"]
498
+ assert response["term_vectors"]["title"]["terms"]
499
+ assert_equal %w[author logging of the], response["term_vectors"]["title"]["terms"].keys
500
500
  end
501
501
 
502
- it 'provides access to multi term vector statistics' do
502
+ it "provides access to multi term vector statistics" do
503
503
  populate!
504
504
 
505
- response = @docs.multi_termvectors({:ids => [1, 2]}, :type => 'doc2', :fields => 'title', :term_statistics => true)
506
- docs = response['docs']
505
+ response = @docs.multi_termvectors({:ids => [1, 2]}, :type => "doc2", :fields => "title", :term_statistics => true)
506
+ docs = response["docs"]
507
507
 
508
508
  assert docs
509
- assert_equal(%w[1 2], docs.map { |h| h['_id'] }.sort)
509
+ assert_equal(%w[1 2], docs.map { |h| h["_id"] }.sort)
510
510
  end
511
511
 
512
- it 'provides access to multi term vector statistics with .multi_term_vectors' do
512
+ it "provides access to multi term vector statistics with .multi_term_vectors" do
513
513
  populate!
514
514
 
515
- response = @docs.multi_term_vectors({:ids => [1, 2]}, :type => 'doc2', :fields => 'title', :term_statistics => true)
516
- docs = response['docs']
515
+ response = @docs.multi_term_vectors({:ids => [1, 2]}, :type => "doc2", :fields => "title", :term_statistics => true)
516
+ docs = response["docs"]
517
517
 
518
518
  assert docs
519
- assert_equal(%w[1 2], docs.map { |h| h['_id'] }.sort)
519
+ assert_equal(%w[1 2], docs.map { |h| h["_id"] }.sort)
520
+ end
521
+
522
+ it "percolates a given document" do
523
+ populate!
524
+
525
+ percolator1 = @index.percolator "1"
526
+ response = percolator1.create :query => { :match => { :author => "pea53" } }
527
+ assert response["created"], "Couldn't create the percolator query"
528
+ percolator2 = @index.percolator "2"
529
+ response = percolator2.create :query => { :match => { :author => "defunkt" } }
530
+ assert response["created"], "Couldn't create the percolator query"
531
+
532
+ response = @index.docs("doc1").percolate(:doc => { :author => "pea53" })
533
+ assert_equal 1, response["matches"].length
534
+ assert_equal "1", response["matches"][0]["_id"]
535
+ end
536
+
537
+ it "percolates an existing document" do
538
+ populate!
539
+
540
+ percolator1 = @index.percolator "1"
541
+ response = percolator1.create :query => { :match => { :author => "pea53" } }
542
+ assert response["created"], "Couldn't create the percolator query"
543
+ percolator2 = @index.percolator "2"
544
+ response = percolator2.create :query => { :match => { :author => "defunkt" } }
545
+ assert response["created"], "Couldn't create the percolator query"
546
+
547
+ response = @index.docs("doc2").percolate(nil, :id => "1")
548
+ assert_equal 1, response["matches"].length
549
+ assert_equal "1", response["matches"][0]["_id"]
550
+ end
551
+
552
+ it "counts the matches for percolating a given document" do
553
+ populate!
554
+
555
+ percolator1 = @index.percolator "1"
556
+ response = percolator1.create :query => { :match => { :author => "pea53" } }
557
+ assert response["created"], "Couldn't create the percolator query"
558
+ percolator2 = @index.percolator "2"
559
+ response = percolator2.create :query => { :match => { :author => "defunkt" } }
560
+ assert response["created"], "Couldn't create the percolator query"
561
+
562
+ count = @index.docs("doc1").percolate_count :doc => { :author => "pea53" }
563
+ assert_equal 1, count
564
+ end
565
+
566
+ it "counts the matches for percolating an existing document" do
567
+ populate!
568
+
569
+ percolator1 = @index.percolator "1"
570
+ response = percolator1.create :query => { :match => { :author => "pea53" } }
571
+ assert response["created"], "Couldn't create the percolator query"
572
+ percolator2 = @index.percolator "2"
573
+ response = percolator2.create :query => { :match => { :author => "defunkt" } }
574
+ assert response["created"], "Couldn't create the percolator query"
575
+
576
+ count = @index.docs("doc2").percolate_count(nil, :id => "1")
577
+ assert_equal 1, count
578
+ end
579
+
580
+ it "performs multi percolate queries" do
581
+ @index.percolator("1").create :query => { :match_all => { } }
582
+ @index.percolator("2").create :query => { :match => { :author => "pea53" } }
583
+
584
+ h = @index.docs("doc2").multi_percolate do |m|
585
+ m.percolate :author => "pea53"
586
+ m.percolate :author => "grantr"
587
+ m.count({}, { :author => "grantr" })
588
+ end
589
+
590
+ response1, response2, response3 = h["responses"]
591
+ assert_equal ["1", "2"], response1["matches"].map { |match| match["_id"] }.sort
592
+ assert_equal ["1"], response2["matches"].map { |match| match["_id"] }.sort
593
+ assert_equal 1, response3["total"]
520
594
  end
521
595
  end
522
596
 
@@ -524,32 +598,34 @@ describe Elastomer::Client::Docs do
524
598
  #
525
599
  # docs - An instance of Elastomer::Client::Docs or Elastomer::Client::Bulk. If
526
600
  # nil uses the @docs instance variable.
601
+ # rubocop:disable Metrics/MethodLength
527
602
  def populate!(docs = @docs)
528
603
  docs.index \
529
604
  :_id => 1,
530
- :_type => 'doc1',
531
- :title => 'the author of gravatar',
532
- :author => 'mojombo'
605
+ :_type => "doc1",
606
+ :title => "the author of gravatar",
607
+ :author => "mojombo"
533
608
 
534
609
  docs.index \
535
610
  :_id => 2,
536
- :_type => 'doc1',
537
- :title => 'the author of resque',
538
- :author => 'defunkt'
611
+ :_type => "doc1",
612
+ :title => "the author of resque",
613
+ :author => "defunkt"
539
614
 
540
615
  docs.index \
541
616
  :_id => 1,
542
- :_type => 'doc2',
543
- :title => 'the author of logging',
544
- :author => 'pea53'
617
+ :_type => "doc2",
618
+ :title => "the author of logging",
619
+ :author => "pea53"
545
620
 
546
621
  docs.index \
547
622
  :_id => 2,
548
- :_type => 'doc2',
549
- :title => 'the author of rubber-band',
550
- :author => 'grantr'
623
+ :_type => "doc2",
624
+ :title => "the author of rubber-band",
625
+ :author => "grantr"
551
626
 
552
627
  @index.refresh
553
628
  end
629
+ # rubocop:enable Metrics/MethodLength
554
630
 
555
631
  end