elastic_record 3.1.4 → 4.0.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: c59b1b2830ef2314166e53fed56b060628e31962
4
- data.tar.gz: c88b89a8a5335502aa4cf0bb8b46fb477dcb8f4e
3
+ metadata.gz: 95195e9bd6f65e35a24b3ed7d8a3d8ee4170a214
4
+ data.tar.gz: 65331f5fec26898efe80717794ef0a5ca897895e
5
5
  SHA512:
6
- metadata.gz: '09c62833cc9bb4bc486b5b53d65ac1c0a2395129edd6fbe1f887a5e208e75a99e585d898b2c8e1661084268d48f1d6a836e92654dba5bb6de0cf812849f9d502'
7
- data.tar.gz: 8948ebb21a69e0eaa17e51f2456a73f2d7cde27312cdb4d7c52c661742c4e8fbbfef7f8996d0d4e9e652e98f95ecfba0782e90bd2966ff2606a239b49426615c
6
+ metadata.gz: d151b8500473e3634658de2f8b1869bc25a480c081faf6a48a952312ff6f5db7409c3b26a04424750ddf36611f45fbb659440c32a0e52deeb3147670668ac86c
7
+ data.tar.gz: 27171232b4f59a2f290e323c5742b24034926f1231275f6258cb6463e1f8bea9c217e07a3f16530d96791d8d4fbe11812967aa27b2e9fc99bbd137de33af3319
data/Gemfile CHANGED
@@ -3,9 +3,10 @@ source 'https://rubygems.org'
3
3
  gemspec
4
4
 
5
5
  gem 'dotenv-rails'
6
- gem 'mysql2'
6
+ # gem 'mysql2'
7
7
  gem 'oj'
8
8
  gem 'pg'
9
9
  gem 'rails'
10
10
  gem 'rake', '~> 10.5.0'
11
11
  gem 'webmock', require: false
12
+ gem 'arelastic'
data/README.md CHANGED
@@ -48,7 +48,7 @@ If a simple hash is passed into filter, a term or terms query is created:
48
48
  ```ruby
49
49
  search.filter(color: 'red') # Creates a 'term' filter
50
50
  search.filter(color: %w(red blue)) # Creates a 'terms' filter
51
- search.filter(color: nil) # Creates a 'missing' filter
51
+ search.filter(color: nil) # Creates a 'must not exist' filter
52
52
  ```
53
53
 
54
54
  If a hash containing hashes is passed into filter, it is used directly as a filter DSL expression:
@@ -2,7 +2,7 @@
2
2
 
3
3
  Gem::Specification.new do |s|
4
4
  s.name = 'elastic_record'
5
- s.version = '3.1.4'
5
+ s.version = '4.0.0'
6
6
  s.summary = 'An Elasticsearch querying ORM'
7
7
  s.description = 'Find your records with Elasticsearch'
8
8
 
@@ -18,6 +18,6 @@ Gem::Specification.new do |s|
18
18
  s.files = `git ls-files`.split("\n")
19
19
  s.test_files = `git ls-files -- {test}/*`.split("\n")
20
20
 
21
- s.add_dependency 'arelastic', '~> 1.1', '>= 1.1.2'
21
+ s.add_dependency 'arelastic', '>= 2.0.0'
22
22
  s.add_dependency 'activemodel'
23
23
  end
@@ -31,8 +31,8 @@ module ElasticRecord
31
31
  self.servers = settings['servers']
32
32
  self.connection_options = settings
33
33
 
34
- if scroll_keep_alive = settings['scroll_keep_alive'].presence
35
- self.scroll_keep_alive = scroll_keep_alive
34
+ if settings['scroll_keep_alive'].present?
35
+ self.scroll_keep_alive = settings['scroll_keep_alive']
36
36
  end
37
37
  end
38
38
  end
@@ -0,0 +1,10 @@
1
+ module ElasticRecord
2
+ class Index
3
+ module Analyze
4
+ def analyze(params)
5
+ json = connection.json_get "/#{alias_name}/_analyze", params
6
+ json['tokens'].map { |token_hash| token_hash['token'] }
7
+ end
8
+ end
9
+ end
10
+ end
@@ -2,40 +2,51 @@ require 'active_support/core_ext/object/to_query'
2
2
 
3
3
  module ElasticRecord
4
4
  class Index
5
- class ScanSearch
6
- attr_reader :scroll_id
7
- attr_accessor :total_hits
8
-
9
- def initialize(elastic_index, scroll_id, options = {})
5
+ class ScrollEnumerator
6
+ attr_reader :keep_alive, :batch_size, :scroll_id
7
+ def initialize(elastic_index, search: nil, scroll_id: nil, keep_alive:, batch_size:)
10
8
  @elastic_index = elastic_index
9
+ @search = search
11
10
  @scroll_id = scroll_id
12
- @options = options
11
+ @keep_alive = keep_alive
12
+ @batch_size = batch_size
13
13
  end
14
14
 
15
15
  def each_slice(&block)
16
16
  while (hit_ids = request_more_ids).any?
17
- hit_ids.each_slice(requested_batch_size, &block)
17
+ hit_ids.each_slice(batch_size, &block)
18
18
  end
19
19
  end
20
20
 
21
- def request_more_hits
22
- request_next_scroll['hits']['hits']
23
- end
24
-
25
21
  def request_more_ids
26
22
  request_more_hits.map { |hit| hit['_id'] }
27
23
  end
28
24
 
25
+ def request_more_hits
26
+ request_next_scroll['hits']['hits']
27
+ end
28
+
29
29
  def request_next_scroll
30
- @elastic_index.scroll(@scroll_id, keep_alive)
30
+ if scroll_id.nil?
31
+ response = initial_search_response
32
+ else
33
+ response = @elastic_index.scroll(scroll_id, keep_alive)
34
+ end
35
+
36
+ @scroll_id = response['_scroll_id']
37
+ response
31
38
  end
32
39
 
33
- def keep_alive
34
- @options[:keep_alive] || (raise "Must provide a :keep_alive option")
40
+ def total_hits
41
+ initial_search_response['hits']['total']
35
42
  end
36
43
 
37
- def requested_batch_size
38
- @options[:batch_size]
44
+ def initial_search_response
45
+ @initial_search_response ||= begin
46
+ search_options = {size: batch_size, scroll: keep_alive}
47
+ elastic_query = @search.merge('sort' => '_doc')
48
+ @elastic_index.search(elastic_query, search_options)
49
+ end
39
50
  end
40
51
  end
41
52
 
@@ -101,9 +112,9 @@ module ElasticRecord
101
112
  end
102
113
 
103
114
  def delete_by_query(query)
104
- scan_search = create_scan_search query
115
+ scroll_enumerator = build_scroll_enumerator search: query
105
116
 
106
- scan_search.each_slice do |ids|
117
+ scroll_enumerator.each_slice do |ids|
107
118
  bulk do
108
119
  ids.each { |id| delete_document(id) }
109
120
  end
@@ -127,16 +138,8 @@ module ElasticRecord
127
138
  get "_explain", elastic_query
128
139
  end
129
140
 
130
- def create_scan_search(elastic_query, options = {})
131
- options[:batch_size] ||= 100
132
- options[:keep_alive] ||= ElasticRecord::Config.scroll_keep_alive
133
-
134
- search_options = {search_type: 'scan', size: options[:batch_size], scroll: options[:keep_alive]}
135
- json = search(elastic_query, search_options)
136
-
137
- ScanSearch.new(self, json['_scroll_id'], options).tap do |scan_search|
138
- scan_search.total_hits = json['hits']['total']
139
- end
141
+ def build_scroll_enumerator(search: nil, scroll_id: nil, batch_size: 100, keep_alive: ElasticRecord::Config.scroll_keep_alive)
142
+ ScrollEnumerator.new(self, search: search, scroll_id: scroll_id, batch_size: batch_size, keep_alive: keep_alive)
140
143
  end
141
144
 
142
145
  def scroll(scroll_id, scroll_keep_alive)
@@ -1,3 +1,4 @@
1
+ require 'elastic_record/index/analyze'
1
2
  require 'elastic_record/index/configurator'
2
3
  require 'elastic_record/index/deferred'
3
4
  require 'elastic_record/index/documents'
@@ -7,12 +8,7 @@ require 'elastic_record/index/percolator'
7
8
  require 'elastic_record/index/settings'
8
9
  require 'elastic_record/index/warmer'
9
10
 
10
- require 'active_support/version'
11
- if ActiveSupport::VERSION::STRING < '4'
12
- require 'active_support/core_ext/hash/deep_dup'
13
- else
14
- require 'active_support/core_ext/object/deep_dup'
15
- end
11
+ require 'active_support/core_ext/object/deep_dup'
16
12
 
17
13
  module ElasticRecord
18
14
  # ElasticRecord::Index provides access to elastic search's API. It is accessed with
@@ -37,6 +33,7 @@ module ElasticRecord
37
33
  include Manage
38
34
  include Mapping, Settings
39
35
  include Percolator, Warmer
36
+ include Analyze
40
37
  include Deferred
41
38
 
42
39
  attr_accessor :model
@@ -14,11 +14,11 @@ module ElasticRecord
14
14
  end
15
15
 
16
16
  def find_ids_in_batches(options = {}, &block)
17
- create_scan_search(options).each_slice(&block)
17
+ build_scroll_enumerator(options).each_slice(&block)
18
18
  end
19
19
 
20
- def create_scan_search(options)
21
- elastic_index.create_scan_search(as_elastic, options)
20
+ def build_scroll_enumerator(options)
21
+ elastic_index.build_scroll_enumerator(search: as_elastic, **options)
22
22
  end
23
23
 
24
24
  def reindex
@@ -14,7 +14,7 @@ module ElasticRecord
14
14
  end
15
15
 
16
16
  def as_elastic
17
- Arelastic::Filters::Not.new(Arelastic::Queries::MatchAll.new).as_elastic
17
+ Arelastic::Queries::MatchAll.new.negate.as_elastic
18
18
  end
19
19
  end
20
20
  end
@@ -8,13 +8,13 @@ module ElasticRecord
8
8
 
9
9
  def not(*filters)
10
10
  add_filter_nodes_to_scope(filters) do |filter_node|
11
- Arelastic::Filters::Not.new(filter_node)
11
+ Arelastic::Queries::Bool.new must_not: filter_node
12
12
  end
13
13
  end
14
14
 
15
15
  def nested(path, *filters)
16
16
  add_filter_nodes_to_scope(filters) do |filter_node|
17
- Arelastic::Filters::Nested.new(path, filter_node)
17
+ Arelastic::Queries::Nested.new path, filter_node
18
18
  end
19
19
  end
20
20
 
@@ -120,8 +120,12 @@ module ElasticRecord
120
120
  end
121
121
 
122
122
  def search_type!(type)
123
- self.search_type_value = type
124
- self
123
+ if type == :count # TODO: Deprecate support
124
+ limit! 0
125
+ else
126
+ self.search_type_value = type
127
+ self
128
+ end
125
129
  end
126
130
 
127
131
  def search_type(type)
@@ -196,8 +200,9 @@ module ElasticRecord
196
200
  def build_query_and_filter(query, filters)
197
201
  query = build_query(query)
198
202
  filter = build_filter(filters)
203
+
199
204
  if filter
200
- arelastic.query.filtered(filter: filter, query: query)
205
+ arelastic.query.bool(filter: filter, must: query)
201
206
  elsif query
202
207
  Arelastic::Searches::Query.new(query)
203
208
  else
@@ -219,7 +224,7 @@ module ElasticRecord
219
224
  if nodes.size == 1
220
225
  nodes.first
221
226
  elsif nodes.size > 1
222
- Arelastic::Filters::And.new(nodes)
227
+ Arelastic::Queries::Bool.new(must: nodes)
223
228
  end
224
229
  end
225
230
 
@@ -228,7 +233,7 @@ module ElasticRecord
228
233
  if filter.is_a?(Arelastic::Nodes::Node)
229
234
  nodes << filter
230
235
  elsif filter.is_a?(ElasticRecord::Relation)
231
- nodes << Arelastic::Filters::HasChild.new(filter.elastic_index.type, filter.as_elastic['query'])
236
+ nodes << Arelastic::Queries::HasChild.new(filter.elastic_index.type, filter.as_elastic['query'])
232
237
  else
233
238
  filter.each do |field, terms|
234
239
  case terms
@@ -75,20 +75,13 @@ module ElasticRecord
75
75
  def search_results
76
76
  @search_results ||= begin
77
77
  options = search_type_value ? {search_type: search_type_value} : {}
78
- klass.elastic_index.search(as_elastic, options.update(fields: ''))
78
+
79
+ klass.elastic_index.search(as_elastic.update('_source' => false), options)
79
80
  end
80
81
  end
81
82
 
82
83
  def load_hits(ids)
83
84
  scope = select_values.any? ? klass.select(select_values) : klass
84
- if defined?(ActiveRecord::Base) && klass < ActiveRecord::Base
85
- case klass.connection.adapter_name
86
- when /Mysql/
87
- scope = scope.order("FIELD(#{connection.quote_column_name(primary_key)}, #{ids.join(',')})")
88
- when /Pos/
89
- scope = scope.order(ids.map { |id| "ID=#{connection.quote(id)} DESC" }.join(','))
90
- end
91
- end
92
85
  scope.find(ids)
93
86
  end
94
87
  end
@@ -1,5 +1,4 @@
1
1
  require 'arelastic'
2
- require 'active_support/core_ext/object/blank' # required because ActiveModel depends on this but does not require it
3
2
  require 'active_support/concern'
4
3
  require 'active_model'
5
4
 
data/test/dummy/.env.test CHANGED
@@ -1 +1 @@
1
- DATABASE_URL=postgres://postgres:@localhost/elastic_record_test
1
+ DATABASE_URL=postgres://localhost/elastic_record_test
@@ -9,7 +9,7 @@ class Widget
9
9
 
10
10
  self.elastic_index.mapping[:properties].update(
11
11
  'name' => {
12
- type: 'multi_field',
12
+ type: 'string',
13
13
  fields: {
14
14
  name: {type: 'string', index: 'not_analyzed'},
15
15
  analyzed: {type: 'string', index: 'analyzed'}
@@ -0,0 +1,12 @@
1
+ require 'helper'
2
+
3
+ class ElasticRecord::Index::PercolatorTest < MiniTest::Test
4
+ def test_analyze
5
+ tokens = Widget.elastic_index.analyze(
6
+ "analyzer" => "standard",
7
+ "text" => "this is a test"
8
+ )
9
+
10
+ assert_equal ["this", "is", "a", "test"], tokens
11
+ end
12
+ end
@@ -47,21 +47,20 @@ class ElasticRecord::Index::DocumentsTest < MiniTest::Test
47
47
  index.index_document('bob', name: 'bob')
48
48
  index.index_document('joe', name: 'joe')
49
49
 
50
- index.delete_by_query('query' => {query_string: {query: 'name.analyzed:bob'}})
50
+ index.delete_by_query('query' => {query_string: {query: 'name:bob'}})
51
51
 
52
52
  refute index.record_exists?('bob')
53
53
  assert index.record_exists?('joe')
54
54
  end
55
55
 
56
- def test_create_scan_search
56
+ def test_build_scroll_enumerator
57
57
  index.index_document('bob', name: 'bob')
58
58
  index.index_document('joe', name: 'joe')
59
59
 
60
- scan_search = index.create_scan_search('query' => {query_string: {query: 'name.analyzed:bob'}})
60
+ scroll_enumerator = index.build_scroll_enumerator(search: {'query' => {query_string: {query: 'name:bob'}}})
61
61
 
62
- assert_equal 1, scan_search.total_hits
63
- refute_nil scan_search.scroll_id
64
- assert_equal 1, scan_search.request_more_ids.size
62
+ assert_equal 1, scroll_enumerator.total_hits
63
+ assert_equal 1, scroll_enumerator.request_more_ids.size
65
64
  end
66
65
 
67
66
  def test_bulk_add
@@ -1,72 +1,21 @@
1
1
  require 'helper'
2
2
 
3
- require 'mysql2'
4
- require 'pg'
5
-
6
- module ElasticRecord
7
- module ActiveRecordIntegration
8
- def setup_project_database(config)
9
- ActiveRecord::Tasks::DatabaseTasks.drop config
10
- ActiveRecord::Tasks::DatabaseTasks.create config
11
- ActiveRecord::Base.establish_connection config
12
-
13
- ActiveRecord::Migration.suppress_messages do
14
- ActiveRecord::Migration.create_table :projects do |t|
15
- t.string :name, null: false
16
- end
17
- end
18
-
19
- Project.elastic_index.create_and_deploy if Project.elastic_index.all_names.empty?
20
- end
21
-
22
- def test_ordering
23
- poo_product = Project.create! name: "Poo"
24
- bear_product = Project.create! name: "Bear"
25
- Project.elastic_index.refresh
26
-
27
- assert_equal [bear_product, poo_product], Project.elastic_relation.order(name: 'asc')
28
- assert_equal [poo_product, bear_product], Project.elastic_relation.order(name: 'desc')
29
- end
30
-
31
- def test_update_callback
32
- project = Project.create! name: "Ideas"
33
- Project.elastic_index.refresh
34
- project.update! name: 'Terrible Stuff'
35
- Project.elastic_index.refresh
36
-
37
- assert_equal [project], Project.elastic_relation.filter(name: 'Terrible Stuff')
38
- end
3
+ class ElasticRecord::ActiveRecordTest < MiniTest::Test
4
+ def test_ordering
5
+ poo_product = Project.create! name: "Poo"
6
+ bear_product = Project.create! name: "Bear"
7
+ Project.elastic_index.refresh
8
+
9
+ assert_equal [bear_product, poo_product], Project.elastic_relation.order(name: 'asc')
10
+ assert_equal [poo_product, bear_product], Project.elastic_relation.order(name: 'desc')
39
11
  end
40
- end
41
-
42
- class ElasticRecord::Mysql2Test < MiniTest::Test
43
- include ElasticRecord::ActiveRecordIntegration
44
-
45
- def setup
46
- super
47
-
48
- setup_project_database(
49
- 'adapter' => 'mysql2',
50
- 'host' => "localhost",
51
- 'database' => 'elastic_record_subtest',
52
- 'username' => 'root'
53
- )
54
- end
55
- end
56
-
57
- class ElasticRecord::PostgresqlTest < MiniTest::Test
58
- include ElasticRecord::ActiveRecordIntegration
59
12
 
60
- def setup
61
- super
13
+ def test_update_callback
14
+ project = Project.create! name: "Ideas"
15
+ Project.elastic_index.refresh
16
+ project.update! name: 'Terrible Stuff'
17
+ Project.elastic_index.refresh
62
18
 
63
- setup_project_database(
64
- 'adapter' => 'postgresql',
65
- 'encoding' => 'unicode',
66
- 'database' => 'elastic_record_subtest',
67
- 'pool' => 5,
68
- 'host' => 'localhost',
69
- 'password' => ''
70
- )
19
+ assert_equal [project], Project.elastic_relation.filter(name: 'Terrible Stuff')
71
20
  end
72
21
  end
@@ -67,7 +67,7 @@ class ElasticRecord::Relation::BatchesTest < MiniTest::Test
67
67
  Widget.elastic_index.bulk_add [
68
68
  Widget.new(id: 5, color: 'red'),
69
69
  Widget.new(id: 10, color: 'blue'),
70
- Widget.new(id: 15, color: 'green'),
70
+ Widget.new(id: 15, color: 'green')
71
71
  ]
72
72
  end
73
73
  end
@@ -22,7 +22,7 @@ class ElasticRecord::Relation::DelegationTest < MiniTest::Test
22
22
 
23
23
  result = model.elastic_relation.filter('foo' => 'bar').do_it
24
24
 
25
- expected = {"query" => {"filtered" => {"filter" => {"term" => {"foo" => "bar"}}}}}
25
+ expected = {"query" => {"bool" => {"filter" => {"term" => {"foo" => "bar"}}}}}
26
26
  assert_equal expected, result
27
27
  end
28
28
  end
@@ -9,7 +9,7 @@ class ElasticRecord::Relation::NoneTest < MiniTest::Test
9
9
  assert_equal [], none.to_a
10
10
  assert_equal({}, none.aggregations)
11
11
 
12
- expected_elastic = {"not" => {"match_all" => {}}}
12
+ expected_elastic = {"bool" => {"must_not" => {"match_all" => {}}}}
13
13
  assert_equal expected_elastic, none.as_elastic
14
14
  end
15
15
  end
@@ -12,12 +12,14 @@ class ElasticRecord::Relation::SearchMethodsTest < MiniTest::Test
12
12
  relation.filter!(Widget.arelastic['faz'].in ['baz', 'fum'])
13
13
 
14
14
  expected = {
15
- "filtered" => {
15
+ "bool" => {
16
16
  "filter" => {
17
- "and" => [
18
- {"term" => {"foo" => "bar"}},
19
- {"terms" => {"faz" => ["baz", "fum"]}}
20
- ]
17
+ "bool" => {
18
+ "must" => [
19
+ {"term" => {"foo" => "bar"}},
20
+ {"terms" => {"faz" => ["baz", "fum"]}}
21
+ ]
22
+ }
21
23
  }
22
24
  }
23
25
  }
@@ -29,7 +31,7 @@ class ElasticRecord::Relation::SearchMethodsTest < MiniTest::Test
29
31
  relation.filter!(Widget.arelastic['faz'].in 3..5)
30
32
 
31
33
  expected = {
32
- "filtered" => {
34
+ "bool" => {
33
35
  "filter" => {
34
36
  "range" => {
35
37
  "faz" => {"gte"=>3, "lte"=>5}
@@ -45,7 +47,7 @@ class ElasticRecord::Relation::SearchMethodsTest < MiniTest::Test
45
47
  relation.filter!("prefix" => {"name" => "Jo"})
46
48
 
47
49
  expected = {
48
- "filtered" => {
50
+ "bool" => {
49
51
  "filter" => {
50
52
  "prefix" => {
51
53
  "name" => "Jo"
@@ -61,11 +63,13 @@ class ElasticRecord::Relation::SearchMethodsTest < MiniTest::Test
61
63
  scope = relation.filter.not("prefix" => {"name" => "Jo"})
62
64
 
63
65
  expected = {
64
- "filtered" => {
66
+ "bool" => {
65
67
  "filter" => {
66
- "not" => {
67
- "prefix" => {
68
- "name" => "Jo"
68
+ "bool" => {
69
+ "must_not" => {
70
+ "prefix" => {
71
+ "name" => "Jo"
72
+ }
69
73
  }
70
74
  }
71
75
  }
@@ -79,11 +83,11 @@ class ElasticRecord::Relation::SearchMethodsTest < MiniTest::Test
79
83
  scope = relation.filter.nested("contacts", "prefix" => {"contacts.name" => "Jo"})
80
84
 
81
85
  expected = {
82
- "filtered" => {
86
+ "bool" => {
83
87
  "filter" => {
84
88
  "nested" => {
85
89
  "path" => "contacts",
86
- "filter" => {
90
+ "query" => {
87
91
  "prefix" => {
88
92
  "contacts.name" => "Jo"
89
93
  }
@@ -109,8 +113,8 @@ class ElasticRecord::Relation::SearchMethodsTest < MiniTest::Test
109
113
  relation.filter!(Widget.arelastic['name'].prefix "mat")
110
114
 
111
115
  expected = {
112
- "filtered" => {
113
- "query" => {
116
+ "bool" => {
117
+ "must" => {
114
118
  "field" => {
115
119
  "name"=>"joe"
116
120
  },
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: 3.1.4
4
+ version: 4.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Infogroup
@@ -9,28 +9,22 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2017-07-07 00:00:00.000000000 Z
12
+ date: 2017-07-11 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: arelastic
16
16
  requirement: !ruby/object:Gem::Requirement
17
17
  requirements:
18
- - - "~>"
19
- - !ruby/object:Gem::Version
20
- version: '1.1'
21
18
  - - ">="
22
19
  - !ruby/object:Gem::Version
23
- version: 1.1.2
20
+ version: 2.0.0
24
21
  type: :runtime
25
22
  prerelease: false
26
23
  version_requirements: !ruby/object:Gem::Requirement
27
24
  requirements:
28
- - - "~>"
29
- - !ruby/object:Gem::Version
30
- version: '1.1'
31
25
  - - ">="
32
26
  - !ruby/object:Gem::Version
33
- version: 1.1.2
27
+ version: 2.0.0
34
28
  - !ruby/object:Gem::Dependency
35
29
  name: activemodel
36
30
  requirement: !ruby/object:Gem::Requirement
@@ -65,6 +59,7 @@ files:
65
59
  - lib/elastic_record/connection.rb
66
60
  - lib/elastic_record/errors.rb
67
61
  - lib/elastic_record/index.rb
62
+ - lib/elastic_record/index/analyze.rb
68
63
  - lib/elastic_record/index/configurator.rb
69
64
  - lib/elastic_record/index/deferred.rb
70
65
  - lib/elastic_record/index/documents.rb
@@ -143,6 +138,7 @@ files:
143
138
  - test/elastic_record/callbacks_test.rb
144
139
  - test/elastic_record/config_test.rb
145
140
  - test/elastic_record/connection_test.rb
141
+ - test/elastic_record/index/analyze_test.rb
146
142
  - test/elastic_record/index/configurator_test.rb
147
143
  - test/elastic_record/index/documents_test.rb
148
144
  - test/elastic_record/index/manage_test.rb