es-elasticity 0.7.1 → 0.8.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: 04e7ce66153cf480adc1bf812e4008990cfbe42e
4
- data.tar.gz: 2921aadea55a478b5828fe5c951e69f2d40f92da
3
+ metadata.gz: 720cd13dc5ba2ce7e66491cf089672f11d8a755d
4
+ data.tar.gz: 203824852dd40864503b465430fa401fec2d758e
5
5
  SHA512:
6
- metadata.gz: 96f0fec58b65a740c6fcde60eeddbd304312bee52a37fdac467ce41f738226d0554d18ff11433b54ccaedd004626baaddd84fbbc69a8cfaa54b0b03fe7d79dca
7
- data.tar.gz: d85e97773d2ebb371de50e484cbe7f13cde68da36e15e76ceceb89aa4c0dbfb33c6a576b9de161e792a20693e751a42ac8f58e5d1be1bc9b21b6cbdef471d1b7
6
+ metadata.gz: 1bfd03d5807b389ba5d9cd38105ce26d997c1ae2d028462b1f28a6f271d1220e375c32c48af8c700cd232a881648599524a56e0ccc912c0489739d55509820af
7
+ data.tar.gz: 9246d84d925302de828eab261f940039b64bf28c6b72df57ae512c9854aeda14dd095a57cf62aa5da2f88ddd3769ba5ae226ec8ac60b70c8a0b05cb02da8e01b
data/CHANGELOG CHANGED
@@ -1,3 +1,7 @@
1
+ v0.8.0
2
+ - Make Elasticity::Strategies::AliasIndex the default
3
+ - Use mapping instead of mappings, we wanna be consistent to ES not to elasticsearch-ruby
4
+ - Better automatic index name and document type
1
5
  v0.7.1
2
6
  - add more response info to raised exceptions from reindexing
3
7
  v0.6.5
data/README.md CHANGED
@@ -391,17 +391,20 @@ Note that the method takes a relation and not a class, so the following is also
391
391
  Search::User.adults.active_records(User.where(active: true))
392
392
  ```
393
393
 
394
- ## Roadmap
394
+ ## Upgrading from 0.7.0 to 0.8.0
395
+ The default persistance strategy changed from SingleIndex to AliasIndex in version 0.8.0 Add the following to your Document configuration to maintain the legacy behaviour.
395
396
 
396
- - [ ] Make Elasticity::Strategies::AliasIndex the default
397
- - [ ] Use mapping instead of mappings, we wanna be consistent to ES not to elasticsearch-ruby
397
+ ```ruby
398
+ c.strategy = Elasticity::Strategies::SingleIndex
399
+ ```
400
+
401
+ ## Roadmap
398
402
  - [ ] Define from_active_record interface
399
403
  - [ ] Write more detailed documentation section for:
400
404
  - [ ] Model definition
401
405
  - [ ] Indexing, Bulk Indexing and Delete By Query
402
406
  - [ ] Search and Multi Search
403
407
  - [ ] ActiveRecord integration
404
- - [ ] Better automatic index name and document type
405
408
  - [ ] Support for multiple document types
406
409
  - [ ] Get rid of to_document, generate automatically based on attributes
407
410
  - [ ] Add some delegations on Document to Index
@@ -8,7 +8,7 @@ module Elasticity
8
8
  # Configure the given klass, changing default parameters and resetting
9
9
  # some of the internal state.
10
10
  def self.configure(&block)
11
- self.config = IndexConfig.new(Elasticity.config, self.name.underscore, &block)
11
+ self.config = IndexConfig.new(Elasticity.config, self.index_config_defaults, &block)
12
12
  end
13
13
 
14
14
  # Define common attributes for all documents
@@ -49,5 +49,22 @@ module Elasticity
49
49
  def created?
50
50
  @created || false
51
51
  end
52
+
53
+ private
54
+
55
+ def self.index_config_defaults
56
+ {
57
+ document_type: default_document_type,
58
+ index_base_name: default_index_base_name
59
+ }
60
+ end
61
+
62
+ def self.default_document_type
63
+ self.name.gsub('::', '_').underscore
64
+ end
65
+
66
+ def self.default_index_base_name
67
+ ActiveSupport::Inflector.pluralize(default_document_type)
68
+ end
52
69
  end
53
70
  end
@@ -5,8 +5,10 @@ module Elasticity
5
5
 
6
6
  attr_accessor *ATTRS
7
7
 
8
- def initialize(elasticity_config, default_document_type)
9
- @document_type = default_document_type
8
+ def initialize(elasticity_config, defaults = {})
9
+ defaults.each do |k,v|
10
+ instance_variable_set("@#{k}",v)
11
+ end
10
12
  @elasticity_config = elasticity_config
11
13
  yield(self)
12
14
  validate!
@@ -48,7 +50,7 @@ module Elasticity
48
50
  end
49
51
 
50
52
  def strategy
51
- @strategy ||= Strategies::SingleIndex
53
+ @strategy ||= Strategies::AliasIndex
52
54
  end
53
55
 
54
56
  private
@@ -238,6 +238,14 @@ module Elasticity
238
238
  end
239
239
 
240
240
  def mappings
241
+ ActiveSupport::Deprecation.warn(
242
+ 'Elasticity::Strategies::AliasIndex#mappings is deprecated, '\
243
+ 'use mapping instead'
244
+ )
245
+ mapping
246
+ end
247
+
248
+ def mapping
241
249
  @client.index_get_mapping(index: @main_alias, type: @document_type).values.first
242
250
  rescue Elasticsearch::Transport::Transport::Errors::NotFound
243
251
  nil
@@ -85,6 +85,14 @@ module Elasticity
85
85
  end
86
86
 
87
87
  def mappings
88
+ ActiveSupport::Deprecation.warn(
89
+ 'Elasticity::Strategies::SingleIndex#mappings is deprecated, '\
90
+ 'use mapping instead'
91
+ )
92
+ mapping
93
+ end
94
+
95
+ def mapping
88
96
  @client.index_get_mapping(index: @index_name, type: @document_type).values.first
89
97
  rescue Elasticsearch::Transport::Transport::Errors::NotFound
90
98
  nil
@@ -1,3 +1,3 @@
1
1
  module Elasticity
2
- VERSION = "0.7.1"
2
+ VERSION = "0.8.0"
3
3
  end
@@ -39,7 +39,7 @@ RSpec.describe Elasticity::Document do
39
39
  end
40
40
 
41
41
  before :each do
42
- allow(Elasticity::Strategies::SingleIndex).to receive(:new).and_return(strategy)
42
+ allow(Elasticity::Strategies::AliasIndex).to receive(:new).and_return(strategy)
43
43
  end
44
44
 
45
45
  it "requires subclasses to define to_document method" do
@@ -0,0 +1,29 @@
1
+ require 'elasticity/index_config'
2
+
3
+ RSpec.describe Elasticity::IndexConfig do
4
+ let(:elasticity_config) { double }
5
+ subject { }
6
+
7
+ let(:defaults) do
8
+ {
9
+ index_base_name: 'users',
10
+ document_type: 'user'
11
+ }
12
+ end
13
+
14
+ it 'accepts default configuration options' do
15
+ config = described_class.new(elasticity_config, defaults) {}
16
+ expect(config.index_base_name).to eql('users')
17
+ expect(config.document_type).to eql('user')
18
+ end
19
+
20
+ it 'overrides defaults' do
21
+ config = described_class.new(elasticity_config, defaults) do |c|
22
+ c.index_base_name = 'user_documents'
23
+ c.document_type = 'users'
24
+ end
25
+
26
+ expect(config.index_base_name).to eql('user_documents')
27
+ expect(config.document_type).to eql('users')
28
+ end
29
+ end
@@ -21,17 +21,17 @@ RSpec.describe Elasticity::Strategies::SingleIndex, elasticsearch: true do
21
21
 
22
22
  it "allows creating, recreating and deleting an index" do
23
23
  subject.create(index_def)
24
- expect(subject.mappings).to eq(index_def)
24
+ expect(subject.mapping).to eq(index_def)
25
25
 
26
26
  subject.recreate(index_def)
27
- expect(subject.mappings).to eq(index_def)
27
+ expect(subject.mapping).to eq(index_def)
28
28
 
29
29
  subject.delete
30
- expect(subject.mappings).to be nil
30
+ expect(subject.mapping).to be nil
31
31
  end
32
32
 
33
33
  it "returns nil for mapping and settings when index does not exist" do
34
- expect(subject.mappings).to be nil
34
+ expect(subject.mapping).to be nil
35
35
  expect(subject.settings).to be nil
36
36
  end
37
37
 
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: es-elasticity
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.7.1
4
+ version: 0.8.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Rodrigo Kochenburger
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-02-10 00:00:00.000000000 Z
11
+ date: 2017-02-22 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -218,6 +218,7 @@ files:
218
218
  - spec/functional/segmented_spec.rb
219
219
  - spec/rspec_config.rb
220
220
  - spec/units/document_spec.rb
221
+ - spec/units/index_config_spec.rb
221
222
  - spec/units/index_mapper_spec.rb
222
223
  - spec/units/multi_search_spec.rb
223
224
  - spec/units/search_spec.rb
@@ -242,7 +243,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
242
243
  version: '0'
243
244
  requirements: []
244
245
  rubyforge_project:
245
- rubygems_version: 2.4.5
246
+ rubygems_version: 2.2.3
246
247
  signing_key:
247
248
  specification_version: 4
248
249
  summary: ActiveModel-based library for working with Elasticsearch
@@ -251,7 +252,9 @@ test_files:
251
252
  - spec/functional/segmented_spec.rb
252
253
  - spec/rspec_config.rb
253
254
  - spec/units/document_spec.rb
255
+ - spec/units/index_config_spec.rb
254
256
  - spec/units/index_mapper_spec.rb
255
257
  - spec/units/multi_search_spec.rb
256
258
  - spec/units/search_spec.rb
257
259
  - spec/units/strategies/single_index_spec.rb
260
+ has_rdoc: