chewy 0.2.4 → 0.3.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: 37f0fefa72376c597d5ad48d1d6796371f15f809
4
- data.tar.gz: 9f5400688fbdbd4e84022645c40aeeb9cafc665b
3
+ metadata.gz: 20296cb15e845cc45aacb4dddaebaa735b5f9d80
4
+ data.tar.gz: 2872561f5db73ad60dc96ef445de9bdd2da529db
5
5
  SHA512:
6
- metadata.gz: 076944d46b1082021ad1966e4be3543e1ac0a71a559e7013bd6f95879446ba5810fe7304af7b4b4c05775ebbfcbe2f9df5954d4a287411f3bceeb86621fac6fa
7
- data.tar.gz: b5b8ee2719b6d19c478d5ec9e7551340f83e7aeb71de2757dbea33781995ddb82f54b9fab98e006200f8c7344f36fbd79aa556eda5ec11b84506d9a1283005d1
6
+ metadata.gz: 487d34a9309473ae01af8e2f4f2fe4a4318501c83e6370121e97acaa736630ea2b8bfb129b499dc74a01f7899fd131f296ffa372ddfa6eba324a392cd79d6e34
7
+ data.tar.gz: 6387d3bcd0e6e1f48187a0bbcc00cfaaffb0069673e149cdf32b531f979843c3b47c3572e5fde6c5717bb21446cd2138deb703ae705969bad6568ff9efaeddea
data/.travis.yml CHANGED
@@ -5,6 +5,6 @@ rvm:
5
5
  - 2.1.0
6
6
  # - rbx
7
7
  before_install:
8
- - curl -# https://download.elasticsearch.org/elasticsearch/elasticsearch/elasticsearch-0.90.10.tar.gz | tar xz -C /tmp
8
+ - curl -# https://download.elasticsearch.org/elasticsearch/elasticsearch/elasticsearch-1.0.1.tar.gz | tar xz -C /tmp
9
9
  before_script:
10
- - TEST_CLUSTER_COMMAND="/tmp/elasticsearch-0.90.10/bin/elasticsearch" rake elasticsearch:start
10
+ - TEST_CLUSTER_COMMAND="/tmp/elasticsearch-1.0.1/bin/elasticsearch" rake elasticsearch:start
data/CHANGELOG.md CHANGED
@@ -1,5 +1,13 @@
1
1
  # master
2
2
 
3
+ # Version 0.3.0
4
+
5
+ * Added `Chewy.configuration[:index]` config to setup common indexes options.
6
+
7
+ * `Chewy.client_options` replaced with `Chewy.configuration`
8
+
9
+ * Using source filtering instead of fields filter (http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/search-request-source-filtering.html).
10
+
3
11
  # Version 0.2.3
4
12
 
5
13
  * `.import!` indexes method, raises import errors.
data/README.md CHANGED
@@ -41,11 +41,11 @@ Or install it yourself as:
41
41
 
42
42
  ### Client configuration
43
43
 
44
- There are 2 ways to configure Chewy client: `Chewy.client_options` hash and `chewy.yml`
44
+ There are 2 ways to configure Chewy client: `Chewy.configuration` hash and `chewy.yml`
45
45
 
46
46
  ```ruby
47
47
  # config/initializers/chewy.rb
48
- Chewy.client_options = {host: 'localhost:9250'} # do not use environments
48
+ Chewy.configuration = {host: 'localhost:9250'} # do not use environments
49
49
  ```
50
50
 
51
51
  ```yaml
@@ -61,7 +61,7 @@ development:
61
61
  The result config merges both hashes. Client options are passed as is to Elasticsearch::Transport::Client except the `:prefix` - it is used internally by chewy to create prefixed index names:
62
62
 
63
63
  ```ruby
64
- Chewy.client_options = {prefix: 'testing'}
64
+ Chewy.configuration = {prefix: 'testing'}
65
65
  UsersIndex.index_name # => 'testing_users'
66
66
  ```
67
67
 
data/lib/chewy/config.rb CHANGED
@@ -3,7 +3,7 @@ module Chewy
3
3
  include Singleton
4
4
 
5
5
  attr_reader :analyzers, :tokenizers, :filters, :char_filters
6
- attr_accessor :client_options, :urgent_update, :query_mode, :filter_mode, :logger
6
+ attr_accessor :configuration, :urgent_update, :query_mode, :filter_mode, :logger
7
7
 
8
8
  def self.delegated
9
9
  public_instance_methods - self.superclass.public_instance_methods - Singleton.public_instance_methods
@@ -21,7 +21,7 @@ module Chewy
21
21
 
22
22
  def initialize
23
23
  @urgent_update = false
24
- @client_options = {}
24
+ @configuration = {}
25
25
  @query_mode = :must
26
26
  @filter_mode = :and
27
27
  @analyzers = {}
@@ -63,8 +63,8 @@ module Chewy
63
63
  #
64
64
  repository :char_filter
65
65
 
66
- def client_options
67
- options = @client_options.merge(yaml_options)
66
+ def configuration
67
+ options = @configuration.deep_symbolize_keys.merge(yaml_options)
68
68
  options.merge!(logger: logger) if logger
69
69
  options
70
70
  end
@@ -74,7 +74,7 @@ module Chewy
74
74
  end
75
75
 
76
76
  def client
77
- Thread.current[:chewy_client] ||= ::Elasticsearch::Client.new client_options
77
+ Thread.current[:chewy_client] ||= ::Elasticsearch::Client.new configuration
78
78
  end
79
79
 
80
80
  def atomic?
@@ -19,7 +19,7 @@ module Chewy
19
19
  object.send(name)
20
20
  end
21
21
 
22
- result = if result.is_a?(Enumerable)
22
+ result = if result.is_a?(Enumerable) && !result.is_a?(Hash)
23
23
  result.map { |object| nested_compose(object) }
24
24
  else
25
25
  nested_compose(result)
data/lib/chewy/index.rb CHANGED
@@ -30,12 +30,12 @@ module Chewy
30
30
  #
31
31
  def self.index_name(suggest = nil)
32
32
  if suggest
33
- @index_name = build_index_name(suggest, prefix: Chewy.client_options[:prefix])
33
+ @index_name = build_index_name(suggest, prefix: Chewy.configuration[:prefix])
34
34
  else
35
35
  @index_name ||= begin
36
36
  build_index_name(
37
37
  name.gsub(/Index\Z/, '').demodulize.underscore,
38
- prefix: Chewy.client_options[:prefix]
38
+ prefix: Chewy.configuration[:prefix]
39
39
  ) if name
40
40
  end
41
41
  end
@@ -29,12 +29,15 @@ module Chewy
29
29
  end
30
30
 
31
31
  def to_hash
32
- return {} unless @params.present?
32
+ settings = @params.deep_symbolize_keys
33
33
 
34
- params = @params.deep_dup
35
- params[:analysis] = resolve_analysis(params[:analysis]) if params[:analysis]
34
+ settings[:analysis] = resolve_analysis(settings[:analysis]) if settings[:analysis]
35
+ if settings[:index] || Chewy.configuration[:index]
36
+ settings[:index] = (Chewy.configuration[:index] || {})
37
+ .deep_merge((settings[:index] || {}).deep_symbolize_keys)
38
+ end
36
39
 
37
- {settings: params}
40
+ settings.present? ? {settings: settings} : {}
38
41
  end
39
42
 
40
43
  private
data/lib/chewy/query.rb CHANGED
@@ -463,7 +463,7 @@ module Chewy
463
463
 
464
464
  def _results
465
465
  @_results ||= (criteria.none? ? [] : _response['hits']['hits']).map do |hit|
466
- attributes = hit['_source'] || hit['fields'] || {}
466
+ attributes = hit['_source'] || {}
467
467
  attributes.reverse_merge!(id: hit['_id'])
468
468
  .merge!(_score: hit['_score'], _explanation: hit['_explanation'])
469
469
  index.type_hash[hit['_type']].new attributes
@@ -82,7 +82,7 @@ module Chewy
82
82
  body = (_composed_query(_request_query, _request_filter) || {}).tap do |body|
83
83
  body.merge!(facets: facets) if facets?
84
84
  body.merge!(sort: sort) if sort?
85
- body.merge!(fields: fields) if fields?
85
+ body.merge!(_source: fields) if fields?
86
86
  end
87
87
 
88
88
  {body: body.merge!(_request_options)}
data/lib/chewy/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Chewy
2
- VERSION = '0.2.4'
2
+ VERSION = '0.3.0'
3
3
  end
@@ -7,7 +7,7 @@ describe Chewy::Config do
7
7
  its(:query_mode) { should == :must }
8
8
  its(:filter_mode) { should == :and }
9
9
  its(:logger) { should be_nil }
10
- its(:client_options) { should_not have_key :logger }
10
+ its(:configuration) { should_not have_key :logger }
11
11
  its(:analyzers) { should == {} }
12
12
  its(:tokenizers) { should == {} }
13
13
  its(:filters) { should == {} }
@@ -57,7 +57,7 @@ describe Chewy::Config do
57
57
  before { subject.logger = double(:logger) }
58
58
 
59
59
  its(:logger) { should_not be_nil }
60
- its(:client_options) { should have_key :logger }
60
+ its(:configuration) { should have_key :logger }
61
61
  end
62
62
 
63
63
  describe '#atomic?' do
@@ -39,6 +39,18 @@ describe Chewy::Fields::Base do
39
39
 
40
40
  specify { field.compose(double(name: 'Alex')).should == {name: 'Alex'} }
41
41
  end
42
+
43
+ context do
44
+ let(:field) { described_class.new(:name, type: 'object') }
45
+ let(:object) { double(name: { key1: 'value1', key2: 'value2' }) }
46
+
47
+ before do
48
+ field.nested(described_class.new(:key1, value: ->(h){ h[:key1] }))
49
+ field.nested(described_class.new(:key2, value: ->(h){ h[:key2] }))
50
+ end
51
+
52
+ specify{ field.compose(object).should == { name: { 'key1' => 'value1', 'key2' => 'value2' } } }
53
+ end
42
54
  end
43
55
 
44
56
  describe '#nested' do
@@ -2,7 +2,7 @@ require 'spec_helper'
2
2
 
3
3
  describe Chewy::Index::Actions do
4
4
  include ClassHelpers
5
- before { Chewy::Index.client.indices.delete }
5
+ before { Chewy.client.indices.delete index: '*' }
6
6
 
7
7
  before { stub_index :dummies }
8
8
 
@@ -2,7 +2,7 @@ require 'spec_helper'
2
2
 
3
3
  describe Chewy::Index::Aliases do
4
4
  include ClassHelpers
5
- before { Chewy::Index.client.indices.delete }
5
+ before { Chewy.client.indices.delete index: '*' }
6
6
 
7
7
  before { stub_index :dummies }
8
8
 
@@ -66,5 +66,19 @@ describe Chewy::Index::Settings do
66
66
  tokenizer: {tokenizer1: {options: 43}}
67
67
  }}} }
68
68
  end
69
+
70
+ context ':index' do
71
+ specify { described_class.new(index: {number_of_shards: 3}).to_hash
72
+ .should == {settings: {index: {number_of_shards: 3}}} }
73
+
74
+ context do
75
+ before { Chewy.configuration = {index: {number_of_shards: 7, number_of_replicas: 2}} }
76
+
77
+ specify { described_class.new.to_hash
78
+ .should == {settings: {index: {number_of_shards: 7, number_of_replicas: 2}}} }
79
+ specify { described_class.new(index: {number_of_shards: 3}).to_hash
80
+ .should == {settings: {index: {number_of_shards: 3, number_of_replicas: 2}}} }
81
+ end
82
+ end
69
83
  end
70
84
  end
@@ -83,7 +83,7 @@ describe Chewy::Index do
83
83
  specify { stub_const('DevelopersIndex', Class.new(Chewy::Index)).index_name.should == 'developers' }
84
84
 
85
85
  context do
86
- before { Chewy.stub(client_options: {prefix: 'testing'}) }
86
+ before { Chewy.stub(configuration: {prefix: 'testing'}) }
87
87
  specify { DummiesIndex.index_name.should == 'testing_dummies' }
88
88
  specify { stub_index(:dummies) { index_name :users }.index_name.should == 'testing_users' }
89
89
  end
@@ -98,6 +98,8 @@ describe Chewy::Index do
98
98
  end
99
99
 
100
100
  describe '.index_params' do
101
+ before { Chewy.stub(config: Chewy::Config.send(:new)) }
102
+
101
103
  specify { stub_index(:documents).index_params.should == {} }
102
104
  specify { stub_index(:documents) { settings number_of_shards: 1 }.index_params.keys.should == [:settings] }
103
105
  specify { stub_index(:documents) do
@@ -114,6 +116,8 @@ describe Chewy::Index do
114
116
  end
115
117
 
116
118
  describe '.settings_hash' do
119
+ before { Chewy.stub(config: Chewy::Config.send(:new)) }
120
+
117
121
  specify { stub_index(:documents).settings_hash.should == {} }
118
122
  specify { stub_index(:documents) { settings number_of_shards: 1 }.settings_hash.should == {settings: {number_of_shards: 1}} }
119
123
  end
@@ -144,7 +144,7 @@ describe Chewy::Query::Criteria do
144
144
  specify { request_body { update_queries(:query) }.should == {body: {query: :query}} }
145
145
  specify { request_body {
146
146
  update_options(from: 10); update_sort(:field); update_fields(:field); update_queries(:query)
147
- }.should == {body: {query: :query, from: 10, sort: [:field], fields: ['field']}} }
147
+ }.should == {body: {query: :query, from: 10, sort: [:field], _source: ['field']}} }
148
148
  end
149
149
 
150
150
  describe '#_composed_query' do
@@ -2,7 +2,7 @@ require 'spec_helper'
2
2
 
3
3
  describe Chewy::Query::Loading do
4
4
  include ClassHelpers
5
- before { Chewy::Index.client.indices.delete }
5
+ before { Chewy.client.indices.delete index: '*' }
6
6
 
7
7
  before do
8
8
  stub_model(:city)
@@ -24,10 +24,7 @@ describe Chewy::Query::Loading do
24
24
  end
25
25
  end
26
26
 
27
- before do
28
- PlacesIndex::City.import(cities)
29
- PlacesIndex::Country.import(countries)
30
- end
27
+ before { PlacesIndex.import!(cities: cities, countries: countries) }
31
28
 
32
29
  specify { PlacesIndex.order(:rating).limit(6).load.total_count.should == 12 }
33
30
  specify { PlacesIndex.order(:rating).limit(6).load.should =~ cities.first(3) + countries.first(3) }
@@ -2,7 +2,7 @@ require 'spec_helper'
2
2
 
3
3
  describe Chewy::Query::Pagination do
4
4
  include ClassHelpers
5
- before { Chewy::Index.client.indices.delete }
5
+ before { Chewy.client.indices.delete index: '*' }
6
6
 
7
7
  before do
8
8
  stub_index(:products) do
@@ -13,7 +13,7 @@ describe Chewy::Query::Pagination do
13
13
  end
14
14
  let(:data) { 10.times.map { |i| {id: i.next.to_s, name: "Name#{i.next}", age: 10 * i.next}.stringify_keys! } }
15
15
 
16
- before { ProductsIndex::Product.import(data.map { |h| double(h) }) }
16
+ before { ProductsIndex::Product.import!(data.map { |h| double(h) }) }
17
17
  before { Kaminari.config.stub(default_per_page: 3) }
18
18
 
19
19
  let(:search) { ProductsIndex.order(:age) }
@@ -2,8 +2,8 @@ require 'spec_helper'
2
2
 
3
3
  describe Chewy::Query do
4
4
  include ClassHelpers
5
+ before { Chewy.client.indices.delete index: '*' }
5
6
 
6
- before { Chewy::Index.client.indices.delete }
7
7
  before do
8
8
  stub_index(:products) do
9
9
  define_type :product do
@@ -20,9 +20,11 @@ describe Chewy::Query do
20
20
  let(:products) { 3.times.map { |i| {id: i.next.to_s, name: "Name#{i.next}", age: 10 * i.next}.stringify_keys! } }
21
21
  let(:cities) { 3.times.map { |i| {id: i.next.to_s}.stringify_keys! } }
22
22
  let(:countries) { 3.times.map { |i| {id: i.next.to_s}.stringify_keys! } }
23
- before { ProductsIndex::Product.import(products.map { |h| double(h) }) }
24
- before { ProductsIndex::City.import(cities.map { |h| double(h) }) }
25
- before { ProductsIndex::Country.import(countries.map { |h| double(h) }) }
23
+ before do
24
+ ProductsIndex::Product.import!(products.map { |h| double(h) })
25
+ ProductsIndex::City.import!(cities.map { |h| double(h) })
26
+ ProductsIndex::Country.import!(countries.map { |h| double(h) })
27
+ end
26
28
 
27
29
  specify { subject.count.should == 9 }
28
30
  specify { subject.limit(6).count.should == 6 }
@@ -35,7 +37,7 @@ describe Chewy::Query do
35
37
 
36
38
  describe '#==' do
37
39
  let(:data) { 3.times.map { |i| {id: i.next.to_s, name: "Name#{i.next}", age: 10 * i.next}.stringify_keys! } }
38
- before { ProductsIndex::Product.import(data.map { |h| double(h) }) }
40
+ before { ProductsIndex::Product.import!(data.map { |h| double(h) }) }
39
41
 
40
42
  specify { subject.query(match: 'hello').should == subject.query(match: 'hello') }
41
43
  specify { subject.query(match: 'hello').should_not == subject.query(match: 'world') }
@@ -194,7 +196,7 @@ describe Chewy::Query do
194
196
  end.tap(&:create!)
195
197
  end
196
198
 
197
- before { CitiesIndex::City.import cities }
199
+ before { CitiesIndex::City.import! cities }
198
200
 
199
201
  specify { CitiesIndex.order(:rating).first.should be_a CitiesIndex::City }
200
202
  specify { CitiesIndex.order(:rating).first.name.should == 'name0' }
@@ -226,16 +228,12 @@ describe Chewy::Query do
226
228
  end
227
229
  end.tap(&:create!)
228
230
  end
229
- before { CitiesIndex::City.import cities }
231
+ before { CitiesIndex::City.import! cities }
230
232
 
231
233
  specify { CitiesIndex.order(:rating).first.should be_a CitiesIndex::City }
232
234
  specify { CitiesIndex.order(:rating).first.name.should be_nil }
233
235
  specify { CitiesIndex.order(:rating).first.rating.should be_nil }
234
236
  specify { CitiesIndex.order(:rating).first.nested.should be_nil }
235
-
236
- specify { CitiesIndex.order(:rating).only(:name).first.name.should be_nil }
237
- specify { CitiesIndex.order(:rating).only(:name).first.rating.should be_nil }
238
- specify { CitiesIndex.order(:rating).only(:nested).first.nested.should be_nil }
239
237
  end
240
238
  end
241
239
  end
@@ -2,7 +2,7 @@ require 'spec_helper'
2
2
 
3
3
  describe :update_index do
4
4
  include ClassHelpers
5
- before { Chewy::Index.client.indices.delete }
5
+ before { Chewy.client.indices.delete index: '*' }
6
6
 
7
7
  before do
8
8
  stub_index(:dummies) do
@@ -3,7 +3,7 @@ require 'spec_helper'
3
3
  describe Chewy::Type::Import do
4
4
  include ClassHelpers
5
5
 
6
- before { Chewy.client.indices.delete }
6
+ before { Chewy.client.indices.delete index: '*' }
7
7
 
8
8
  before do
9
9
  stub_model(:city)
data/spec/spec_helper.rb CHANGED
@@ -27,7 +27,7 @@ ActiveRecord::Schema.define do
27
27
  end
28
28
  end
29
29
 
30
- Chewy.client_options = { host: 'localhost:9250' }
30
+ Chewy.configuration = {host: 'localhost:9250', index: {number_of_shards: 1, number_of_replicas: 0}}
31
31
 
32
32
  RSpec.configure do |config|
33
33
  config.mock_with :rspec
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: chewy
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.4
4
+ version: 0.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - pyromaniac
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-02-27 00:00:00.000000000 Z
11
+ date: 2014-03-04 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rake