elastic_record 3.1.4 → 4.0.0

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.
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