elastic-rails 0.8.7 → 1.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: fe32a7a77a7e053e18632c534e4c21b85e97c458
4
- data.tar.gz: 93f9a804abe3d625fa78d5cfad063d2de7b3f381
3
+ metadata.gz: 415d01e7f57e3202b889d41df8942d3fe5347173
4
+ data.tar.gz: 96661427d521dc54ae86178cf20529099e900c32
5
5
  SHA512:
6
- metadata.gz: ecf4e97ae1a82ebad07987ac54a717cc1127186786154e85d71dcdae89e341e4e360679c044cc62b9ab44c6406d33421c9878f05f02a47ebadfaf28260b91276
7
- data.tar.gz: aca7470236c934518ff8187766c3d3b457bbd122a8a7d2f839e2a8f29560cb403783bc7013c38dbc5057043a59539f39cf52c931e2f0ecd71611352622a48b06
6
+ metadata.gz: ac05b2d5170f2e112d0b90c3e80cbb44730f1983f69e9d344140ea13e6127501ad926809c38ec1747f7caf8dc8972d6d5ba42596333c77c083ea4681193e998d
7
+ data.tar.gz: 776bdcb23a31e9694538104d7572b72ca810467402500f3b4a3e9e8d3224364836fce0c106f05af0f9b67982f403a92409d5576658658783a671daeb3d1ef32c
data/.env ADDED
@@ -0,0 +1,2 @@
1
+ ELASTICSEARCH_HOST=127.0.0.1
2
+ ELASTICSEARCH_PORT=$(make services-port SERVICE=elasticsearch PORT=9200)
data/.travis.yml CHANGED
@@ -1,8 +1,22 @@
1
1
  language: ruby
2
2
  rvm:
3
- - 2.4.0
4
- - 2.3.3
5
- - 2.2.6
3
+ - 2.6.2
4
+ - 2.5.3
5
+ - 2.4.1
6
+ - 2.3.7
6
7
  services:
7
- - elasticsearch
8
- before_install: gem install bundler -v 1.12.5
8
+ - docker
9
+ before_install:
10
+ - gem update bundler
11
+ - docker -v
12
+ - make services-up
13
+ - sleep 10
14
+ deploy:
15
+ provider: rubygems
16
+ api_key:
17
+ secure: Ucdb3YW5+gBFBxhZylqacER9xdu/oP4lmu6JqiWIL95IdNwQEyh45llBmRxYnsyb1WdaFlu35EbkgFZyerfWBtSKl5xjxkEJH7xRjfA/Ait19YGd9jdrVGSPXMZodf8+Q4GQe47Q934AsR/YLZ/g6cDUsEwhsYVoCmVWR5SICCdaTI98K2Pt4/W2CEcucSNzb4tWptj7noreCTQL4iLodTC7x4MMk2wscNFCKZUW5J2HCB8eds6pK7hYTt5wjo+ARJdkFvYlanJ7bOBFGLGps3UP4Rj5K3h2hM+7nGwt4yddDLYMaBwfwjpfo4f4ayX7pnMvwfn3WCfD9f4ps430WbSqPOvuHLAxcO7th6EOoLmS0/5RDFL+Gk96WHgr51A5RdPUoN3O1Qa4sl6nsPCJmC64mR7Mm62ZYeYCvUXgf7cZYzX7/dLIK2u0pkRQa3axkZgR+COcmAImZL8ffSNxOFRpQPPBNWoEZhlOTXwKmkSJjfiWYvCUGRmx3DFM1Tra88ctWkLh3B77wcDFBtUZEmA8KYS+ies8ctQyndHtzU1oJ2gxOD3Ye64fWRprZl+ApeFNTgBlu+kMe/vs8i504ERBur421iOqbnfP3IDqIuizC5zkSXG2JEAT1rvLtuf2tBuTbB6h/jYZtFssboXENlw++ZopIO5ZAbFaXMxBPPc=
18
+ gem: elastic-rails
19
+ on:
20
+ tags: true
21
+ repo: platanus/elastic-rails
22
+ branch: master
data/Makefile ADDED
@@ -0,0 +1,38 @@
1
+ PROJECT ?= elastic-rails
2
+ DOCKER_COMPOSE_FILE ?= docker-compose.services.yml
3
+ DOCKER_COMPOSE_ARGS ?= -p $(PROJECT) -f $(DOCKER_COMPOSE_FILE)
4
+ SHELL := /bin/bash
5
+
6
+ run: help
7
+
8
+ BOLD ?= $(shell tput bold)
9
+ NORMAL ?= $(shell tput sgr0)
10
+
11
+ help:
12
+ @echo Run elasticsearch for development:
13
+ @echo " ${BOLD}make services-up${NORMAL}"
14
+ @echo ""
15
+ @echo "Reset the environment:"
16
+ @echo " ${BOLD}make services-destroy${NORMAL}"
17
+ @echo ""
18
+
19
+ services: services-up
20
+
21
+ services-ps:
22
+ docker-compose $(DOCKER_COMPOSE_ARGS) ps
23
+
24
+ services-up:
25
+ docker-compose $(DOCKER_COMPOSE_ARGS) up -d
26
+
27
+ services-stop:
28
+ docker-compose $(DOCKER_COMPOSE_ARGS) stop
29
+
30
+ services-destroy:
31
+ docker-compose $(DOCKER_COMPOSE_ARGS) down --volumes
32
+
33
+ services-logs:
34
+ docker-compose $(DOCKER_COMPOSE_ARGS) logs -f
35
+
36
+ services-port:
37
+ @set -o pipefail; \
38
+ docker-compose $(DOCKER_COMPOSE_ARGS) port ${SERVICE} ${PORT} 2> /dev/null | cut -d':' -f2 || echo ${PORT}
@@ -0,0 +1,16 @@
1
+ version: '3'
2
+
3
+ services:
4
+ elasticsearch:
5
+ image: elasticsearch:6.7.0
6
+ ports:
7
+ - 9200
8
+ volumes:
9
+ - elasticsearch_data:/usr/share/elasticsearch/data
10
+ environment:
11
+ - discovery.type=single-node
12
+ - bootstrap.memory_lock=true
13
+ - "ES_JAVA_OPTS=-Xms1024m -Xmx1024m"
14
+
15
+ volumes:
16
+ elasticsearch_data:
data/elastic.gemspec CHANGED
@@ -19,18 +19,17 @@ Gem::Specification.new do |spec|
19
19
  spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
20
20
  spec.require_paths = ["lib"]
21
21
 
22
- spec.add_dependency "elasticsearch", "~> 1.0", ">= 1.0.18"
22
+ spec.add_dependency "elasticsearch", "~> 6.3.1"
23
23
  spec.add_dependency "activesupport"
24
24
 
25
- spec.add_development_dependency "bundler", "~> 1.6"
25
+ spec.add_development_dependency "dotenv"
26
+ spec.add_development_dependency "bundler", "~> 2.0"
26
27
  spec.add_development_dependency "rake", "~> 10.4"
27
28
  spec.add_development_dependency "rspec", "~> 3.1"
28
29
  spec.add_development_dependency "rspec-nc", "~> 0.2"
29
30
  spec.add_development_dependency "guard", "~> 2.11"
30
31
  spec.add_development_dependency "guard-rspec", "~> 4.5"
31
32
  spec.add_development_dependency "terminal-notifier-guard", "~> 1.6", ">= 1.6.1"
32
- spec.add_development_dependency "pry", "~> 0.10"
33
- spec.add_development_dependency "pry-remote", "~> 0.1"
34
- spec.add_development_dependency "pry-byebug", "~> 3.2"
35
- spec.add_development_dependency "pry-nav", "~> 0.2"
33
+ spec.add_development_dependency "pry", "~> 0.12.2"
34
+ spec.add_development_dependency "pry-nav", "~> 0.3.0"
36
35
  end
@@ -1,8 +1,8 @@
1
1
  module Elastic::Commands
2
2
  class CompareMappings < Elastic::Support::Command.new(:current, :user)
3
3
  def perform
4
- user_properties.select do |field, property|
5
- !compare_field_properties(current_properties[field], property)
4
+ user_properties.reject do |field, property|
5
+ compare_field_properties(current_properties[field], property)
6
6
  end.map { |f| f[0] }
7
7
  end
8
8
 
@@ -4,23 +4,15 @@ module Elastic::Commands
4
4
  )
5
5
  def perform
6
6
  if collection.present?
7
- import_collection
7
+ target.collect_from(collection, middleware_options) { |obj| queue obj }
8
8
  else
9
- targets.each { |target| import_target(target) }
9
+ target.collect_all(middleware_options) { |obj| queue obj }
10
10
  end
11
11
  flush
12
12
  end
13
13
 
14
14
  private
15
15
 
16
- def import_collection
17
- main_target.collect_from(collection, middleware_options) { |obj| queue obj }
18
- end
19
-
20
- def import_target(_target)
21
- _target.collect_all(middleware_options) { |obj| queue obj }
22
- end
23
-
24
16
  def cache
25
17
  @cache ||= []
26
18
  end
@@ -48,12 +40,8 @@ module Elastic::Commands
48
40
  index.new(_object).as_elastic_document
49
41
  end
50
42
 
51
- def main_target
52
- index.definition.main_target
53
- end
54
-
55
- def targets
56
- index.definition.targets
43
+ def target
44
+ index.definition.target
57
45
  end
58
46
 
59
47
  def middleware_options
@@ -6,10 +6,6 @@ module Elastic::Core
6
6
  @target = _target
7
7
  end
8
8
 
9
- def type_name
10
- @target.to_s
11
- end
12
-
13
9
  def mode
14
10
  not_supported :mode
15
11
  end
@@ -1,8 +1,9 @@
1
1
  module Elastic::Core
2
2
  class Connector
3
- def initialize(_name, _types, _mapping, settling_time: 10.seconds)
3
+ DEFAULT_TYPE = '_doc'
4
+
5
+ def initialize(_name, _mapping, settling_time: 10.seconds)
4
6
  @name = _name
5
- @types = _types
6
7
  @mapping = _mapping
7
8
  @settling_time = settling_time
8
9
  end
@@ -17,6 +18,7 @@ module Elastic::Core
17
18
  actual_name = resolve_actual_index_name
18
19
  return :not_available if actual_name.nil?
19
20
  return :not_synchronized unless mapping_synchronized? actual_name
21
+
20
22
  :ready
21
23
  end
22
24
 
@@ -31,7 +33,7 @@ module Elastic::Core
31
33
  create_from_scratch
32
34
  when :not_synchronized
33
35
  begin
34
- setup_index_types resolve_actual_index_name
36
+ setup_index_mapping resolve_actual_index_name
35
37
  rescue Elasticsearch::Transport::Transport::Errors::BadRequest
36
38
  return false
37
39
  end
@@ -46,7 +48,6 @@ module Elastic::Core
46
48
  copy_to new_index, batch_size: batch_size
47
49
  end
48
50
  end
49
-
50
51
  nil
51
52
  end
52
53
 
@@ -55,7 +56,7 @@ module Elastic::Core
55
56
 
56
57
  # TODO: validate document type
57
58
  operations = write_indices.map do |write_index|
58
- { 'index' => _document.merge('_index' => write_index) }
59
+ { 'index' => _document.merge('_index' => write_index, '_type' => DEFAULT_TYPE) }
59
60
  end
60
61
 
61
62
  api.bulk(body: operations)
@@ -65,7 +66,7 @@ module Elastic::Core
65
66
  return if Elastic.config.disable_indexing
66
67
 
67
68
  # TODO: validate documents type
68
- body = _documents.map { |doc| { 'index' => doc } }
69
+ body = _documents.map { |doc| { 'index' => doc.merge('_type' => DEFAULT_TYPE) } }
69
70
 
70
71
  write_indices.each do |write_index|
71
72
  retry_on_temporary_error('bulk indexing') do
@@ -76,20 +77,18 @@ module Elastic::Core
76
77
 
77
78
  def delete(_document)
78
79
  raise ArgumentError, 'document must provide an id' unless _document['_id']
79
- raise ArgumentError, 'document must provide a type' unless _document['_type']
80
80
 
81
81
  return if Elastic.config.disable_indexing
82
82
 
83
83
  write_index, rolling_index = write_indices
84
84
 
85
- operations = [{ 'delete' => _document.merge('_index' => write_index) }]
85
+ operations = [{
86
+ 'delete' => _document.merge('_index' => write_index, '_type' => DEFAULT_TYPE)
87
+ }]
86
88
 
87
89
  if rolling_index
88
90
  operations << {
89
- 'index' => _document.merge(
90
- '_index' => rolling_index,
91
- 'data' => { '_mark_for_deletion' => true }
92
- )
91
+ 'delete' => _document.merge('_index' => rolling_index, '_type' => DEFAULT_TYPE)
93
92
  }
94
93
  end
95
94
 
@@ -100,16 +99,16 @@ module Elastic::Core
100
99
  api.indices.refresh index: index_name
101
100
  end
102
101
 
103
- def find(_type, _id)
104
- api.get(index: index_name, type: _type, id: _id)
102
+ def find(_id)
103
+ api.get(index: index_name, id: _id)
105
104
  end
106
105
 
107
- def count(query: nil, type: nil)
108
- api.count(index: index_name, type: type, body: query)['count']
106
+ def count(query: nil)
107
+ api.count(index: index_name, body: query)['count']
109
108
  end
110
109
 
111
- def query(query: nil, type: nil)
112
- api.search(index: index_name, type: type, body: query)
110
+ def query(query: nil)
111
+ api.search(index: index_name, body: query)
113
112
  end
114
113
 
115
114
  def rollover(&_block) # rubocop:disable Metrics/MethodLength
@@ -125,12 +124,11 @@ module Elastic::Core
125
124
  transfer_alias(write_index_alias, to: new_index)
126
125
  wait_for_index_to_stabilize
127
126
  perform_optimized_write_on(new_index, &_block)
128
- delete_marked_for_deletion new_index
129
127
  transfer_alias(index_name, from: actual_index, to: new_index)
130
128
  transfer_alias(write_index_alias, from: actual_index)
131
129
  wait_for_index_to_stabilize
132
130
  api.indices.delete index: actual_index
133
- rescue
131
+ rescue StandardError
134
132
  api.indices.delete index: new_index
135
133
  raise
136
134
  end
@@ -170,7 +168,8 @@ module Elastic::Core
170
168
  private
171
169
 
172
170
  def wait_for_index_to_stabilize
173
- return if @settling_time == 0
171
+ return if @settling_time.zero?
172
+
174
173
  Elastic.logger.info "Waiting #{@settling_time * 1.2}s for write indices to catch up ..."
175
174
  sleep(@settling_time * 1.2)
176
175
  end
@@ -212,10 +211,6 @@ module Elastic::Core
212
211
  end
213
212
  end
214
213
 
215
- def delete_marked_for_deletion(_index)
216
- api.delete_by_query(index: _index, body: { query: { term: { _mark_for_deletion: true } } })
217
- end
218
-
219
214
  def write_indices_expired?
220
215
  @write_indices_expiration && @write_indices_expiration < Time.current
221
216
  end
@@ -231,7 +226,7 @@ module Elastic::Core
231
226
  new_name = "#{index_name}:#{Time.now.to_i}"
232
227
  api.indices.create index: new_name
233
228
  api.cluster.health wait_for_status: 'yellow'
234
- setup_index_types new_name
229
+ setup_index_mapping new_name
235
230
  new_name
236
231
  end
237
232
 
@@ -248,25 +243,20 @@ module Elastic::Core
248
243
  end
249
244
 
250
245
  def mapping_synchronized?(_index)
251
- type_mappings = api.indices.get_mapping(index: _index)
246
+ type_mappings = api.indices.get_mapping(index: _index, include_type_name: false)
252
247
  return false if type_mappings[_index].nil?
253
- type_mappings = type_mappings[_index]['mappings']
248
+ return false if type_mappings[_index]['mappings'].empty?
254
249
 
255
- @types.all? do |type|
256
- next false if type_mappings[type].nil?
250
+ diff = Elastic::Commands::CompareMappings.for(
251
+ current: type_mappings[_index]['mappings'],
252
+ user: @mapping
253
+ )
257
254
 
258
- diff = Elastic::Commands::CompareMappings.for(
259
- current: type_mappings[type],
260
- user: @mapping
261
- )
262
- diff.empty?
263
- end
255
+ diff.empty?
264
256
  end
265
257
 
266
- def setup_index_types(_index)
267
- @types.each do |type|
268
- api.indices.put_mapping(index: _index, type: type, body: @mapping)
269
- end
258
+ def setup_index_mapping(_index)
259
+ api.indices.put_mapping(index: _index, type: DEFAULT_TYPE, body: @mapping)
270
260
  end
271
261
 
272
262
  def transfer_alias(_alias, from: nil, to: nil)
@@ -284,7 +274,7 @@ module Elastic::Core
284
274
  {
285
275
  'create' => {
286
276
  '_id' => _hit['_id'],
287
- '_type' => _hit['_type'],
277
+ '_type' => DEFAULT_TYPE,
288
278
  'data' => _hit['_source']
289
279
  }
290
280
  }
@@ -295,7 +285,7 @@ module Elastic::Core
295
285
  end
296
286
 
297
287
  def retry_on_temporary_error(_action, retries: 3)
298
- return yield
288
+ yield
299
289
  rescue Elasticsearch::Transport::Transport::Errors::ServiceUnavailable,
300
290
  Elasticsearch::Transport::Transport::Errors::GatewayTimeout => exc
301
291
  raise if retries <= 0
@@ -2,29 +2,22 @@ module Elastic::Core
2
2
  class Definition
3
3
  attr_reader :middleware_options
4
4
 
5
- def main_target
6
- targets.first
7
- end
5
+ def target
6
+ raise 'attempting to access target before definition has been frozen' if @target_cache.nil?
8
7
 
9
- def targets
10
- raise 'attempting to access targets before definition has been frozen' if @target_cache.nil?
11
8
  @target_cache
12
9
  end
13
10
 
14
- def targets=(_values)
15
- @targets = _values
16
- end
17
-
18
- def types
19
- targets.map(&:type_name)
11
+ def target=(_value)
12
+ @target = _value
20
13
  end
21
14
 
22
15
  def mode
23
- main_target.mode
16
+ target.mode
24
17
  end
25
18
 
26
19
  def initialize
27
- @targets = []
20
+ @target = nil
28
21
  @field_map = {}
29
22
  @field_cache = {}
30
23
  @middleware_options = HashWithIndifferentAccess.new
@@ -40,7 +33,8 @@ module Elastic::Core
40
33
 
41
34
  def freeze
42
35
  return if frozen?
43
- cache_targets
36
+
37
+ cache_target
44
38
  complete_and_validate_fields
45
39
  freeze_fields
46
40
  @middleware_options.freeze
@@ -81,26 +75,19 @@ module Elastic::Core
81
75
  else
82
76
  parent = @field_map[_name[0...separator]]
83
77
  return nil if parent.nil?
78
+
84
79
  parent.get_field(_name[separator + 1..-1])
85
80
  end
86
81
  end
87
82
 
88
- def cache_targets
89
- @target_cache = load_targets.freeze
90
- end
91
-
92
- def load_targets
93
- mode = nil
94
- @targets.map do |target|
95
- target = target.to_s.camelize.constantize if target.is_a?(Symbol) || target.is_a?(String)
83
+ def cache_target
84
+ target = @target
85
+ target = target.to_s.camelize.constantize if @target.is_a?(Symbol) || @target.is_a?(String)
86
+ target = load_target_middleware(target) unless target.class < BaseMiddleware
96
87
 
97
- target = load_target_middleware(target) unless target.class < BaseMiddleware
98
- raise 'index target is not indexable' if target.nil?
99
- raise 'mistmatching indexable mode' if mode && mode != target.mode
100
- mode = target.mode
88
+ raise 'index target is not indexable' if target.nil?
101
89
 
102
- target
103
- end
90
+ @target_cache = target
104
91
  end
105
92
 
106
93
  def complete_and_validate_fields
@@ -127,7 +114,7 @@ module Elastic::Core
127
114
  end
128
115
 
129
116
  def infer_mapping_options(_name)
130
- main_target.field_options_for(_name, middleware_options)
117
+ target.field_options_for(_name, middleware_options)
131
118
  end
132
119
  end
133
120
  end
@@ -17,7 +17,7 @@ module Elastic::Core
17
17
  end
18
18
 
19
19
  def as_elastic_document(only_meta: false)
20
- result = { '_type' => object.class.to_s }
20
+ result = {}
21
21
  result['_id'] = read_attribute_for_indexing(:id) if has_attribute_for_indexing?(:id)
22
22
  result['data'] = as_elastic_source unless only_meta
23
23
  result
@@ -52,7 +52,7 @@ module Elastic::Datatypes
52
52
  end
53
53
 
54
54
  def terms_aggregation_defaults
55
- { size: 0 }
55
+ { size: 10000 } # amount of groups to return by default
56
56
  end
57
57
 
58
58
  def date_histogram_aggregation_defaults
@@ -1,5 +1,11 @@
1
1
  module Elastic::Datatypes
2
2
  class String < Default
3
+ def mapping_options
4
+ options = super
5
+ options[:type] = 'text'
6
+ options
7
+ end
8
+
3
9
  def supported_queries
4
10
  [:match, :term, :range]
5
11
  end
@@ -2,8 +2,7 @@ module Elastic::Datatypes
2
2
  class Term < Default
3
3
  def mapping_options
4
4
  options = super
5
- options[:type] = 'string'
6
- options[:index] = 'not_analyzed'
5
+ options[:type] = 'keyword'
7
6
  options
8
7
  end
9
8
  end
@@ -84,9 +84,9 @@ module Elastic::Fields
84
84
  def load_registered_datatype(_name)
85
85
  # TODO: replace this with a datatype registry
86
86
  case _name
87
- when :term
87
+ when :term, :keyword
88
88
  Elastic::Datatypes::Term
89
- when :string
89
+ when :string, :text
90
90
  Elastic::Datatypes::String
91
91
  when :date
92
92
  Elastic::Datatypes::Date
@@ -27,7 +27,6 @@ module Elastic::Nodes::Concerns
27
27
  def prepare_hits(_hits, _formatter)
28
28
  _hits.map do |raw_hit|
29
29
  Elastic::Results::Hit.new(
30
- raw_hit['_type'],
31
30
  raw_hit['_id'],
32
31
  raw_hit['_score'],
33
32
  raw_hit['_source'] ? _formatter.format(raw_hit['_source']) : nil
@@ -29,9 +29,10 @@ module Elastic::Nodes
29
29
 
30
30
  def render(_options = {})
31
31
  hash = { 'query' => @query }
32
- hash['type'] = @mode.to_s unless @mode.nil? || @mode == :boolean
33
32
 
34
- { "match" => { render_field(_options) => render_boost(hash) } }
33
+ match_mode = @mode.nil? || @mode == :boolean ? 'match' : "match_#{@mode}"
34
+
35
+ { match_mode => { render_field(_options) => render_boost(hash) } }
35
36
  end
36
37
 
37
38
  private
data/lib/elastic/query.rb CHANGED
@@ -35,7 +35,7 @@ module Elastic
35
35
  end
36
36
  end
37
37
 
38
- def ids(_type = nil)
38
+ def ids
39
39
  execute assembler.assemble_ids
40
40
  end
41
41
 
@@ -87,11 +87,7 @@ module Elastic
87
87
  end
88
88
 
89
89
  def execute(_query)
90
- raw = @index.connector.query(
91
- type: @index.definition.types,
92
- query: _query.render
93
- )
94
-
90
+ raw = @index.connector.query(query: _query.render)
95
91
  _query.handle_result(raw, formatter)
96
92
  end
97
93
 
@@ -38,8 +38,8 @@ module Elastic::Railties
38
38
  # rubocop:disable Metrics/CyclomaticComplexity
39
39
  def ar_type_to_options(_type)
40
40
  case _type.try(:to_sym)
41
- when :text then { type: :string }
42
- when :string then { type: :string, index: 'not_analyzed' }
41
+ when :text then { type: :text }
42
+ when :string then { type: :keyword }
43
43
  when :integer then { type: :long } # not sure..
44
44
  when :float, :decimal then { type: :double } # not sure..
45
45
  when :date then { type: :date }
@@ -1,10 +1,9 @@
1
1
  module Elastic::Results
2
2
  class Hit < Base
3
- attr_reader :type, :id, :score, :source
3
+ attr_reader :id, :score, :source
4
4
  attr_accessor :data
5
5
 
6
- def initialize(_type, _id, _score, _source)
7
- @type = _type
6
+ def initialize(_id, _score, _source)
8
7
  @id = _id
9
8
  @score = _score
10
9
  @source = _source
@@ -26,21 +26,15 @@ module Elastic::Shims
26
26
  end
27
27
 
28
28
  def populate(_result)
29
- groups = _result.pick(Elastic::Results::Hit).group_by(&:type)
30
- groups.each { |t, h| populate_group(t, h) }
31
- end
32
-
33
- def populate_group(_type_name, _hits)
34
- target = resolve_target(_type_name)
35
- raise "Unexpected type name #{_type_name}" if target.nil?
29
+ hits = _result.pick(Elastic::Results::Hit).to_a
36
30
 
37
31
  if populate_by_id?
38
- ids = _hits.map(&:id)
32
+ ids = hits.map(&:id)
39
33
  objects = target.find_by_ids(ids, middleware_options)
40
- objects.each_with_index { |o, i| _hits[i].data = o }
34
+ objects.each_with_index { |o, i| hits[i].data = o }
41
35
  else
42
- _hits.each do |hit|
43
- hit.data = target.build_from_data(hit.source, middleware_options)
36
+ hits.each do |hit|
37
+ hit.data = @index.definition.target.build_from_data(hit.source, middleware_options)
44
38
  end
45
39
  end
46
40
  end
@@ -49,8 +43,8 @@ module Elastic::Shims
49
43
  @index.definition.mode == :index
50
44
  end
51
45
 
52
- def resolve_target(_type_name)
53
- @index.definition.targets.find { |t| t.type_name == _type_name }
46
+ def target
47
+ @index.definition.target
54
48
  end
55
49
 
56
50
  def middleware_options
data/lib/elastic/type.rb CHANGED
@@ -34,7 +34,6 @@ module Elastic
34
34
  @connector ||= begin
35
35
  Elastic::Core::Connector.new(
36
36
  suffix,
37
- definition.types,
38
37
  definition.as_es_mapping
39
38
  ).tap do |conn|
40
39
  if Elastic.config.whiny_indices && conn.status != :ready
@@ -1,16 +1,12 @@
1
1
  module Elastic::Types
2
2
  class BaseType < Elastic::Core::Serializer
3
3
  def self.target=(_name_or_class)
4
- pre_definition.targets = [_name_or_class]
5
- end
6
-
7
- def self.targets=(_names_or_classes)
8
- pre_definition.targets = _names_or_classes
4
+ pre_definition.target = _name_or_class
9
5
  end
10
6
 
11
7
  def self.pre_definition
12
8
  @pre_definition ||= Elastic::Core::Definition.new.tap do |definition|
13
- definition.targets = [default_target] unless default_target.nil?
9
+ definition.target = default_target unless default_target.nil?
14
10
  end
15
11
  end
16
12
 
@@ -1,3 +1,3 @@
1
1
  module Elastic
2
- VERSION = "0.8.7"
2
+ VERSION = "1.0.0"
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: elastic-rails
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.8.7
4
+ version: 1.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ignacio Baixas
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2017-05-23 00:00:00.000000000 Z
11
+ date: 2019-05-13 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: elasticsearch
@@ -16,20 +16,14 @@ dependencies:
16
16
  requirements:
17
17
  - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: '1.0'
20
- - - ">="
21
- - !ruby/object:Gem::Version
22
- version: 1.0.18
19
+ version: 6.3.1
23
20
  type: :runtime
24
21
  prerelease: false
25
22
  version_requirements: !ruby/object:Gem::Requirement
26
23
  requirements:
27
24
  - - "~>"
28
25
  - !ruby/object:Gem::Version
29
- version: '1.0'
30
- - - ">="
31
- - !ruby/object:Gem::Version
32
- version: 1.0.18
26
+ version: 6.3.1
33
27
  - !ruby/object:Gem::Dependency
34
28
  name: activesupport
35
29
  requirement: !ruby/object:Gem::Requirement
@@ -44,20 +38,34 @@ dependencies:
44
38
  - - ">="
45
39
  - !ruby/object:Gem::Version
46
40
  version: '0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: dotenv
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ">="
46
+ - !ruby/object:Gem::Version
47
+ version: '0'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ">="
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
47
55
  - !ruby/object:Gem::Dependency
48
56
  name: bundler
49
57
  requirement: !ruby/object:Gem::Requirement
50
58
  requirements:
51
59
  - - "~>"
52
60
  - !ruby/object:Gem::Version
53
- version: '1.6'
61
+ version: '2.0'
54
62
  type: :development
55
63
  prerelease: false
56
64
  version_requirements: !ruby/object:Gem::Requirement
57
65
  requirements:
58
66
  - - "~>"
59
67
  - !ruby/object:Gem::Version
60
- version: '1.6'
68
+ version: '2.0'
61
69
  - !ruby/object:Gem::Dependency
62
70
  name: rake
63
71
  requirement: !ruby/object:Gem::Requirement
@@ -154,56 +162,28 @@ dependencies:
154
162
  requirements:
155
163
  - - "~>"
156
164
  - !ruby/object:Gem::Version
157
- version: '0.10'
165
+ version: 0.12.2
158
166
  type: :development
159
167
  prerelease: false
160
168
  version_requirements: !ruby/object:Gem::Requirement
161
169
  requirements:
162
170
  - - "~>"
163
171
  - !ruby/object:Gem::Version
164
- version: '0.10'
165
- - !ruby/object:Gem::Dependency
166
- name: pry-remote
167
- requirement: !ruby/object:Gem::Requirement
168
- requirements:
169
- - - "~>"
170
- - !ruby/object:Gem::Version
171
- version: '0.1'
172
- type: :development
173
- prerelease: false
174
- version_requirements: !ruby/object:Gem::Requirement
175
- requirements:
176
- - - "~>"
177
- - !ruby/object:Gem::Version
178
- version: '0.1'
179
- - !ruby/object:Gem::Dependency
180
- name: pry-byebug
181
- requirement: !ruby/object:Gem::Requirement
182
- requirements:
183
- - - "~>"
184
- - !ruby/object:Gem::Version
185
- version: '3.2'
186
- type: :development
187
- prerelease: false
188
- version_requirements: !ruby/object:Gem::Requirement
189
- requirements:
190
- - - "~>"
191
- - !ruby/object:Gem::Version
192
- version: '3.2'
172
+ version: 0.12.2
193
173
  - !ruby/object:Gem::Dependency
194
174
  name: pry-nav
195
175
  requirement: !ruby/object:Gem::Requirement
196
176
  requirements:
197
177
  - - "~>"
198
178
  - !ruby/object:Gem::Version
199
- version: '0.2'
179
+ version: 0.3.0
200
180
  type: :development
201
181
  prerelease: false
202
182
  version_requirements: !ruby/object:Gem::Requirement
203
183
  requirements:
204
184
  - - "~>"
205
185
  - !ruby/object:Gem::Version
206
- version: '0.2'
186
+ version: 0.3.0
207
187
  description: Elasticsearch integration for Ruby on Rails by Platanus
208
188
  email:
209
189
  - ignacio@platan.us
@@ -211,6 +191,7 @@ executables: []
211
191
  extensions: []
212
192
  extra_rdoc_files: []
213
193
  files:
194
+ - ".env"
214
195
  - ".gitignore"
215
196
  - ".rspec"
216
197
  - ".travis.yml"
@@ -218,10 +199,12 @@ files:
218
199
  - Gemfile
219
200
  - Guardfile
220
201
  - LICENSE.txt
202
+ - Makefile
221
203
  - README.md
222
204
  - Rakefile
223
205
  - bin/console
224
206
  - bin/setup
207
+ - docker-compose.services.yml
225
208
  - elastic.gemspec
226
209
  - lib/elastic-rails.rb
227
210
  - lib/elastic.rb
@@ -348,7 +331,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
348
331
  version: '0'
349
332
  requirements: []
350
333
  rubyforge_project:
351
- rubygems_version: 2.6.4
334
+ rubygems_version: 2.6.14.1
352
335
  signing_key:
353
336
  specification_version: 4
354
337
  summary: Elasticsearch integration for Ruby on Rails by Platanus