elastic_record 4.0.0 → 4.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (53) hide show
  1. checksums.yaml +4 -4
  2. data/.travis.yml +3 -6
  3. data/Gemfile +0 -2
  4. data/README.md +25 -9
  5. data/elastic_record.gemspec +1 -1
  6. data/lib/elastic_record/as_document.rb +41 -0
  7. data/lib/elastic_record/callbacks.rb +11 -56
  8. data/lib/elastic_record/connection.rb +1 -1
  9. data/lib/elastic_record/doctype.rb +43 -0
  10. data/lib/elastic_record/index/deferred.rb +13 -15
  11. data/lib/elastic_record/index/documents.rb +23 -13
  12. data/lib/elastic_record/index/manage.rb +4 -6
  13. data/lib/elastic_record/index/mapping.rb +7 -26
  14. data/lib/elastic_record/index/settings.rb +17 -2
  15. data/lib/elastic_record/index.rb +12 -24
  16. data/lib/elastic_record/model.rb +14 -4
  17. data/lib/elastic_record/percolator_model.rb +44 -0
  18. data/lib/elastic_record/relation.rb +1 -2
  19. data/lib/elastic_record/searching.rb +5 -1
  20. data/lib/elastic_record/tasks/index.rake +0 -10
  21. data/lib/elastic_record.rb +3 -0
  22. data/test/dummy/app/models/mock_model.rb +108 -0
  23. data/test/dummy/app/models/project.rb +1 -1
  24. data/test/dummy/app/models/test_model.rb +1 -102
  25. data/test/dummy/app/models/test_percolator_model.rb +8 -0
  26. data/test/dummy/app/models/widget.rb +2 -5
  27. data/test/dummy/app/models/widget_query.rb +14 -0
  28. data/test/dummy/config/environments/test.rb +3 -3
  29. data/test/dummy/config/initializers/elastic_record.rb +1 -1
  30. data/test/elastic_record/as_document_test.rb +65 -0
  31. data/test/elastic_record/callbacks_test.rb +6 -81
  32. data/test/elastic_record/config_test.rb +1 -1
  33. data/test/elastic_record/doctype_test.rb +45 -0
  34. data/test/elastic_record/index/documents_test.rb +1 -1
  35. data/test/elastic_record/index/mapping_test.rb +16 -13
  36. data/test/elastic_record/index/settings_test.rb +34 -1
  37. data/test/elastic_record/index_test.rb +7 -15
  38. data/test/elastic_record/model_test.rb +1 -7
  39. data/test/elastic_record/percolator_model_test.rb +54 -0
  40. data/test/elastic_record/relation/batches_test.rb +0 -1
  41. data/test/elastic_record/relation/delegation_test.rb +0 -1
  42. data/test/elastic_record/relation/finder_methods_test.rb +0 -1
  43. data/test/elastic_record/relation_test.rb +0 -2
  44. data/test/elastic_record/searching_test.rb +7 -0
  45. metadata +11 -10
  46. data/lib/elastic_record/index/configurator.rb +0 -18
  47. data/lib/elastic_record/index/percolator.rb +0 -50
  48. data/lib/elastic_record/index/warmer.rb +0 -24
  49. data/lib/elastic_record/relation/admin.rb +0 -13
  50. data/test/elastic_record/index/configurator_test.rb +0 -18
  51. data/test/elastic_record/index/percolator_test.rb +0 -45
  52. data/test/elastic_record/index/warmer_test.rb +0 -20
  53. data/test/elastic_record/relation/admin_test.rb +0 -28
@@ -6,9 +6,42 @@ class ElasticRecord::Index::SettingsTest < MiniTest::Test
6
6
  assert_equal expected, ElasticRecord::Index.new(Widget).settings
7
7
  end
8
8
 
9
+ class ModelWithAnalyzers
10
+ include TestModel
11
+
12
+ doctype.analysis = {
13
+ "analyzer": {
14
+ "my_custom_analyzer": {
15
+ "type": "custom",
16
+ "tokenizer": "standard"
17
+ }
18
+ }
19
+ }
20
+
21
+ elastic_index.settings = {
22
+ "number_of_shards" => 10
23
+ }
24
+ end
25
+
26
+ def test_settings
27
+ expected = {
28
+ "analysis" => {
29
+ "analyzer": {
30
+ "my_custom_analyzer": {
31
+ "type": "custom",
32
+ "tokenizer": "standard"
33
+ }
34
+ }
35
+ },
36
+ "number_of_shards" => 10
37
+ }
38
+
39
+ assert_equal expected, ModelWithAnalyzers.elastic_index.settings
40
+ end
41
+
9
42
  private
10
43
 
11
44
  def index
12
45
  @index ||= ElasticRecord::Index.new(Widget)
13
46
  end
14
- end
47
+ end
@@ -5,12 +5,14 @@ class ElasticRecord::IndexTest < MiniTest::Test
5
5
  copied = index.dup
6
6
 
7
7
  refute_equal copied.settings.object_id, index.settings.object_id
8
- refute_equal copied.mapping.object_id, index.mapping.object_id
9
8
  end
10
9
 
11
- def test_model_name
10
+ def test_doctypes
11
+ assert_equal [Widget.doctype], index.doctypes
12
+ end
13
+
14
+ def test_alias_name
12
15
  assert_equal 'widgets', index.alias_name
13
- assert_equal 'widget', index.type
14
16
  end
15
17
 
16
18
  def test_disable
@@ -26,19 +28,9 @@ class ElasticRecord::IndexTest < MiniTest::Test
26
28
  refute index.disabled
27
29
  end
28
30
 
29
- def test_configure
30
- context = nil
31
-
32
- index.configure do
33
- context = self
34
- end
35
-
36
- assert_kind_of ElasticRecord::Index::Configurator, context
37
- end
31
+ private
38
32
 
39
- private;
40
-
41
33
  def index
42
34
  @index ||= ElasticRecord::Index.new(Widget)
43
35
  end
44
- end
36
+ end
@@ -11,13 +11,6 @@ class ElasticRecord::ModelTest < MiniTest::Test
11
11
  assert_equal ElasticRecord::Config.connection_options.symbolize_keys, connection.options
12
12
  end
13
13
 
14
- def test_elastic_relation
15
- relation = Widget.elastic_relation
16
-
17
- assert_equal Widget, relation.klass
18
- assert_equal Widget.arelastic, relation.arelastic
19
- end
20
-
21
14
  def test_elastic_index
22
15
  index = Widget.elastic_index
23
16
 
@@ -26,5 +19,6 @@ class ElasticRecord::ModelTest < MiniTest::Test
26
19
 
27
20
  def test_elastic_index_inheritence
28
21
  refute_equal Widget.elastic_index.object_id, InheritedModel.elastic_index.object_id
22
+ refute_equal Widget.doctype.object_id, InheritedModel.doctype.object_id
29
23
  end
30
24
  end
@@ -0,0 +1,54 @@
1
+ require 'helper'
2
+
3
+ class ElasticRecord::PercolatorModelTest < MiniTest::Test
4
+ def test_elastic_index
5
+ assert_equal [WidgetQuery.doctype, Widget.doctype], index.doctypes
6
+ refute index.partial_updates
7
+ assert_equal({}, index.settings)
8
+ end
9
+
10
+ def test_doctype
11
+ assert_equal ElasticRecord::Doctype.percolator_doctype, WidgetQuery.doctype
12
+ end
13
+
14
+ def test_as_search_document
15
+ query = WidgetQuery.new(name: 'foo', color: 'red')
16
+
17
+ expected = {
18
+ "query" => {
19
+ "bool" => {
20
+ "filter" => {
21
+ "bool" => {
22
+ "must" => [
23
+ { "term" => { :name=>"foo" } },
24
+ { "term" => { :color => "red" } }
25
+ ]
26
+ }
27
+ }
28
+ }
29
+ }
30
+ }
31
+
32
+ assert_equal expected, query.as_search_document
33
+ end
34
+
35
+ def test_percolate_when_no_hits
36
+ query = WidgetQuery.create(name: 'foo', color: 'red')
37
+ should_not_hit = { name: 'bar', color: 'blue' }
38
+
39
+ assert_empty WidgetQuery.percolate(should_not_hit)
40
+ end
41
+
42
+ def test_percolate_when_hits
43
+ query = WidgetQuery.create(color: 'red')
44
+ should_hit = { name: 'foo', color: 'red' }
45
+
46
+ assert_equal [query], WidgetQuery.percolate(should_hit)
47
+ end
48
+
49
+ private
50
+
51
+ def index
52
+ @index ||= WidgetQuery.elastic_index
53
+ end
54
+ end
@@ -63,7 +63,6 @@ class ElasticRecord::Relation::BatchesTest < MiniTest::Test
63
63
 
64
64
  private
65
65
  def create_widgets
66
- Widget.elastic_index.delete_all
67
66
  Widget.elastic_index.bulk_add [
68
67
  Widget.new(id: 5, color: 'red'),
69
68
  Widget.new(id: 10, color: 'blue'),
@@ -2,7 +2,6 @@ require 'helper'
2
2
 
3
3
  class ElasticRecord::Relation::DelegationTest < MiniTest::Test
4
4
  def test_delegate_to_array
5
- Widget.elastic_index.delete_all
6
5
  Widget.elastic_index.index_document('5', color: 'red')
7
6
 
8
7
  records = []
@@ -69,7 +69,6 @@ class ElasticRecord::Relation::FinderMethodsTest < MiniTest::Test
69
69
  private
70
70
 
71
71
  def create_widgets
72
- Widget.elastic_index.delete_all
73
72
  Widget.elastic_index.bulk_add [
74
73
  Widget.new(color: 'red', id: '05'),
75
74
  Widget.new(color: 'blue', id: '10'),
@@ -28,14 +28,12 @@ class ElasticRecord::RelationTest < MiniTest::Test
28
28
  end
29
29
 
30
30
  def test_to_ids
31
- Widget.elastic_index.delete_all
32
31
  create_widgets [Widget.new(id: 5, color: 'red'), Widget.new(id: 10, color: 'blue')]
33
32
 
34
33
  assert_equal ['5', '10'].to_set, Widget.elastic_relation.to_ids.to_set
35
34
  end
36
35
 
37
36
  def test_to_a
38
- Widget.elastic_index.delete_all
39
37
  create_widgets [Widget.new(id: 5, color: 'red'), Widget.new(id: 10, color: 'blue')]
40
38
 
41
39
  array = Widget.elastic_relation.to_a
@@ -1,6 +1,13 @@
1
1
  require 'helper'
2
2
 
3
3
  class ElasticRecord::SearchingTest < MiniTest::Test
4
+ def test_elastic_relation
5
+ relation = Widget.elastic_relation
6
+
7
+ assert_equal Widget, relation.klass
8
+ assert_equal Widget.arelastic, relation.arelastic
9
+ end
10
+
4
11
  def test_elastic_search
5
12
 
6
13
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: elastic_record
3
3
  version: !ruby/object:Gem::Version
4
- version: 4.0.0
4
+ version: 4.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Infogroup
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2017-07-11 00:00:00.000000000 Z
12
+ date: 2017-08-25 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: arelastic
@@ -54,28 +54,27 @@ files:
54
54
  - Rakefile
55
55
  - elastic_record.gemspec
56
56
  - lib/elastic_record.rb
57
+ - lib/elastic_record/as_document.rb
57
58
  - lib/elastic_record/callbacks.rb
58
59
  - lib/elastic_record/config.rb
59
60
  - lib/elastic_record/connection.rb
61
+ - lib/elastic_record/doctype.rb
60
62
  - lib/elastic_record/errors.rb
61
63
  - lib/elastic_record/index.rb
62
64
  - lib/elastic_record/index/analyze.rb
63
- - lib/elastic_record/index/configurator.rb
64
65
  - lib/elastic_record/index/deferred.rb
65
66
  - lib/elastic_record/index/documents.rb
66
67
  - lib/elastic_record/index/manage.rb
67
68
  - lib/elastic_record/index/mapping.rb
68
- - lib/elastic_record/index/percolator.rb
69
69
  - lib/elastic_record/index/settings.rb
70
- - lib/elastic_record/index/warmer.rb
71
70
  - lib/elastic_record/json.rb
72
71
  - lib/elastic_record/log_subscriber.rb
73
72
  - lib/elastic_record/lucene.rb
74
73
  - lib/elastic_record/model.rb
74
+ - lib/elastic_record/percolator_model.rb
75
75
  - lib/elastic_record/railtie.rb
76
76
  - lib/elastic_record/railties/controller_runtime.rb
77
77
  - lib/elastic_record/relation.rb
78
- - lib/elastic_record/relation/admin.rb
79
78
  - lib/elastic_record/relation/batches.rb
80
79
  - lib/elastic_record/relation/delegation.rb
81
80
  - lib/elastic_record/relation/finder_methods.rb
@@ -98,10 +97,13 @@ files:
98
97
  - test/dummy/app/mailers/.keep
99
98
  - test/dummy/app/models/.keep
100
99
  - test/dummy/app/models/concerns/.keep
100
+ - test/dummy/app/models/mock_model.rb
101
101
  - test/dummy/app/models/project.rb
102
102
  - test/dummy/app/models/test_model.rb
103
+ - test/dummy/app/models/test_percolator_model.rb
103
104
  - test/dummy/app/models/warehouse.rb
104
105
  - test/dummy/app/models/widget.rb
106
+ - test/dummy/app/models/widget_query.rb
105
107
  - test/dummy/app/views/layouts/application.html.erb
106
108
  - test/dummy/bin/bundle
107
109
  - test/dummy/bin/rails
@@ -135,24 +137,23 @@ files:
135
137
  - test/dummy/public/422.html
136
138
  - test/dummy/public/500.html
137
139
  - test/dummy/public/favicon.ico
140
+ - test/elastic_record/as_document_test.rb
138
141
  - test/elastic_record/callbacks_test.rb
139
142
  - test/elastic_record/config_test.rb
140
143
  - test/elastic_record/connection_test.rb
144
+ - test/elastic_record/doctype_test.rb
141
145
  - test/elastic_record/index/analyze_test.rb
142
- - test/elastic_record/index/configurator_test.rb
143
146
  - test/elastic_record/index/documents_test.rb
144
147
  - test/elastic_record/index/manage_test.rb
145
148
  - test/elastic_record/index/mapping_test.rb
146
- - test/elastic_record/index/percolator_test.rb
147
149
  - test/elastic_record/index/settings_test.rb
148
- - test/elastic_record/index/warmer_test.rb
149
150
  - test/elastic_record/index_test.rb
150
151
  - test/elastic_record/integration/active_record_test.rb
151
152
  - test/elastic_record/log_subscriber_test.rb
152
153
  - test/elastic_record/lucene_test.rb
153
154
  - test/elastic_record/model_test.rb
155
+ - test/elastic_record/percolator_model_test.rb
154
156
  - test/elastic_record/railties/controller_runtime_test.rb
155
- - test/elastic_record/relation/admin_test.rb
156
157
  - test/elastic_record/relation/batches_test.rb
157
158
  - test/elastic_record/relation/delegation_test.rb
158
159
  - test/elastic_record/relation/finder_methods_test.rb
@@ -1,18 +0,0 @@
1
- module ElasticRecord
2
- class Index
3
- class Configurator
4
- attr_reader :index
5
- def initialize(index)
6
- @index = index
7
- end
8
-
9
- def property(name, options)
10
- index.mapping[:properties][name.to_sym] = options
11
- end
12
-
13
- def has_percolator!
14
- index.has_percolator = true
15
- end
16
- end
17
- end
18
- end
@@ -1,50 +0,0 @@
1
- module ElasticRecord
2
- class Index
3
- module Percolator
4
- def create_percolator(name, elastic_query)
5
- connection.json_put "/#{percolator_name}/.percolator/#{name}", elastic_query
6
- end
7
-
8
- def delete_percolator(name)
9
- connection.json_delete "/#{percolator_name}/.percolator/#{name}"
10
- end
11
-
12
- def percolator_exists?(name)
13
- connection.head("/#{percolator_name}/.percolator/#{name}") == '200'
14
- end
15
-
16
- def get_percolator(name)
17
- json = connection.json_get("/#{percolator_name}/.percolator/#{name}")
18
- json['_source'] if json['found']
19
- end
20
-
21
- def percolate(document)
22
- hits = connection.json_get("/#{percolator_name}/#{type}/_percolate", 'doc' => document)['matches']
23
- hits.map { |hits| hits['_id'] }
24
- end
25
-
26
- def all_percolators
27
- if hits = connection.json_get("/#{percolator_name}/.percolator/_search?q=*&size=500")['hits']
28
- hits['hits'].map { |hit| hit['_id'] }
29
- end
30
- end
31
-
32
- def create_percolator_index
33
- create(percolator_name) unless exists?(percolator_name)
34
- end
35
-
36
- def delete_percolator_index
37
- delete(percolator_name) if exists?(percolator_name)
38
- end
39
-
40
- def reset_percolators
41
- delete_percolator_index
42
- create_percolator_index
43
- end
44
-
45
- def percolator_name
46
- "#{alias_name}_percolator"
47
- end
48
- end
49
- end
50
- end
@@ -1,24 +0,0 @@
1
- module ElasticRecord
2
- class Index
3
- module Warmer
4
- def create_warmer(name, elastic_query)
5
- connection.json_put "/#{alias_name}/#{type}/_warmer/#{name}", elastic_query
6
- end
7
-
8
- def delete_warmer(name)
9
- connection.json_delete "/#{alias_name}/_warmer/#{name}"
10
- end
11
-
12
- def get_warmer(name)
13
- json = connection.json_get("/#{alias_name}/#{type}/_warmer/#{name}")
14
- if json.any?
15
- json.values.first['warmers'][name]
16
- end
17
- end
18
-
19
- def warmer_exists?(name)
20
- !get_warmer(name).nil?
21
- end
22
- end
23
- end
24
- end
@@ -1,13 +0,0 @@
1
- module ElasticRecord
2
- class Relation
3
- module Admin
4
- def create_percolator(name)
5
- klass.elastic_index.create_percolator(name, as_elastic)
6
- end
7
-
8
- def create_warmer(name)
9
- klass.elastic_index.create_warmer(name, as_elastic)
10
- end
11
- end
12
- end
13
- end
@@ -1,18 +0,0 @@
1
- require 'helper'
2
-
3
- class ElasticRecord::Index::ConfiguratorTest < MiniTest::Test
4
- def test_property
5
- configurator.property :am_i_cool, type: "boolean"
6
-
7
- expected = {type: "boolean"}
8
- assert_equal expected, configurator.index.mapping[:properties][:am_i_cool]
9
- end
10
-
11
- private
12
- def configurator
13
- @configurator ||= begin
14
- index = ElasticRecord::Index.new(Widget)
15
- ElasticRecord::Index::Configurator.new(index)
16
- end
17
- end
18
- end
@@ -1,45 +0,0 @@
1
- require 'helper'
2
-
3
- class ElasticRecord::Index::PercolatorTest < MiniTest::Test
4
- def test_create_percolator
5
- index.disable_deferring!
6
-
7
- index.delete_percolator('green') if index.percolator_exists?('green')
8
- index.delete_percolator('blue') if index.percolator_exists?('blue')
9
-
10
- index.create_percolator('green', 'query' => {'match' => {'color' => 'green'}})
11
-
12
- assert index.percolator_exists?('green')
13
- refute index.percolator_exists?('blue')
14
- end
15
-
16
- def test_delete_percolator
17
- index.disable_deferring!
18
-
19
- index.create_percolator('green', 'query' => {'match' => {'color' => 'green'}})
20
- assert index.percolator_exists?('green')
21
-
22
- index.delete_percolator('green')
23
- refute index.percolator_exists?('green')
24
- end
25
-
26
- def test_reset_percolators
27
- index.disable_deferring!
28
-
29
- index.create_percolator('green', 'query' => {'match' => {'color' => 'green'}})
30
- assert index.percolator_exists?('green')
31
-
32
- index.reset_percolators
33
-
34
- refute index.percolator_exists?('green')
35
- end
36
-
37
- def test_percolate
38
- end
39
-
40
- private
41
-
42
- def index
43
- Widget.elastic_index
44
- end
45
- end