chewy 0.2.0 → 0.2.2

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: 37ef7870c9b4ea62e334143eddf486f55e21627e
4
- data.tar.gz: 57cd914528a78448c58f89d687f84a666b8a2ffc
3
+ metadata.gz: 618e32a755ee2b5035e4640b4a7969e76492689f
4
+ data.tar.gz: 420d6db94ffd55a322246a27e3537467c334782d
5
5
  SHA512:
6
- metadata.gz: 9e923803456e4d75abe810db4c2cceb6bd4cdd758de480f937131570830dcb7e5e1053a4db06ec1aec62f74cf0abe43173f02d461a56e83e9705f2f819d0b7df
7
- data.tar.gz: 53e95e0795081fda77fbb8858207081eded90ab8d5ce5b01b4ae2f140641f71e1db11c3af470f321c4ece7f881916045286a4e22b0ab81694ca5bdb01b271655
6
+ metadata.gz: 9db80b8a18cfc60735822fcd5b9c6e761221a8c485e04fb23088c1cdf4f83f43090a7b211949656eb9c989cf0b3832852b87cde3aa8d888558db157a1e38edc6
7
+ data.tar.gz: be4cb7e42fd04ec7607d9ad9e12dc1cbd664fd004b046b2a756e584760c3a488bf296563ecad006288e45557027db1f2b588d27db45d721e2f70391e9b0ef988
@@ -1,5 +1,24 @@
1
1
  # master
2
2
 
3
+ # Version 0.2.1
4
+
5
+ * Auto-resolved analyzers and analyzers repository:
6
+
7
+ ```ruby
8
+ # Setting up analyzers repository:
9
+ Chewy.analyzer :title_analyzer, type: 'custom', filter: %w(lowercase icu_folding title_nysiis)
10
+ Chewy.filter :title_nysiis, type: 'phonetic', encoder: 'nysiis', replace: false
11
+
12
+ # Using analyzers from repository in index classes
13
+ class ProductsIndex < Chewy::Index
14
+ settings analysis: {analyzer: ['title_analyzer', {one_more_analyzer: {type: 'custom', tokenizer: 'lowercase'}}]}
15
+ end
16
+ ```
17
+
18
+ `title_analyzer` here will be automatically resolved and passed to index mapping
19
+
20
+ # Version 0.2.0
21
+
3
22
  * Reworked import error handling. Now all the import errors from ElasticSearch are handled properly, also import method returns true of false depending on the import process success.
4
23
 
5
24
  * `Chewy::Index.import` now takes types hash as argument within options hash:
data/Guardfile CHANGED
@@ -3,7 +3,7 @@
3
3
 
4
4
  guard :rspec do
5
5
  watch(%r{^spec/.+_spec\.rb$})
6
- watch(%r{^lib/(.+)\.rb$}) { |m| "spec/lib/#{m[1]}_spec.rb" }
6
+ watch(%r{^lib/(.+)\.rb$}) { |m| "spec/#{m[1]}_spec.rb" }
7
7
  watch('spec/spec_helper.rb') { "spec" }
8
8
 
9
9
  # Rails example
data/README.md CHANGED
@@ -113,7 +113,7 @@ Chewy.logger = Logger.new
113
113
 
114
114
  Mapping definitions - http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/mapping.html
115
115
 
116
- 4. Add some index- and type-related settings
116
+ 4. Add some index- and type-related settings. Analyzers repositories might be used as well. See `Chewy::Index.settings` docs for details:
117
117
 
118
118
  ```ruby
119
119
  class UsersIndex < Chewy::Index
@@ -6,6 +6,7 @@ require 'singleton'
6
6
  require 'elasticsearch'
7
7
 
8
8
  require 'chewy/version'
9
+ require 'chewy/errors'
9
10
  require 'chewy/config'
10
11
  require 'chewy/index'
11
12
  require 'chewy/type'
@@ -21,18 +22,6 @@ ActiveSupport.on_load(:active_record) do
21
22
  end
22
23
 
23
24
  module Chewy
24
- class Error < StandardError
25
- end
26
-
27
- class UndefinedIndex < Error
28
- end
29
-
30
- class UndefinedType < Error
31
- end
32
-
33
- class UnderivableType < Error
34
- end
35
-
36
25
  def self.derive_type name
37
26
  return name if name.is_a?(Class) && name < Chewy::Type::Base
38
27
 
@@ -2,19 +2,67 @@ module Chewy
2
2
  class Config
3
3
  include Singleton
4
4
 
5
+ attr_reader :analyzers, :tokenizers, :filters, :char_filters
5
6
  attr_accessor :client_options, :urgent_update, :query_mode, :filter_mode, :logger
6
7
 
7
8
  def self.delegated
8
9
  public_instance_methods - self.superclass.public_instance_methods - Singleton.public_instance_methods
9
10
  end
10
11
 
12
+ def self.repository name
13
+ plural_name = name.to_s.pluralize
14
+
15
+ class_eval <<-EOS
16
+ def #{name}(name, options = nil)
17
+ options ? #{plural_name}[name.to_sym] = options : #{plural_name}[name.to_sym]
18
+ end
19
+ EOS
20
+ end
21
+
11
22
  def initialize
12
23
  @urgent_update = false
13
24
  @client_options = {}
14
25
  @query_mode = :must
15
26
  @filter_mode = :and
27
+ @analyzers = {}
28
+ @tokenizers = {}
29
+ @filters = {}
30
+ @char_filters = {}
16
31
  end
17
32
 
33
+ # Analysers repository:
34
+ #
35
+ # Chewy.analyzer :my_analyzer2, {
36
+ # type: custom,
37
+ # tokenizer: 'my_tokenizer1',
38
+ # filter : ['my_token_filter1', 'my_token_filter2']
39
+ # char_filter : ['my_html']
40
+ # }
41
+ # Chewy.analyzer(:my_analyzer2) # => {type: 'custom', tokenizer: ...}
42
+ #
43
+ repository :analyzer
44
+
45
+ # Tokenizers repository:
46
+ #
47
+ # Chewy.tokenizer :my_tokenizer1, {type: standard, max_token_length: 900}
48
+ # Chewy.tokenizer(:my_tokenizer1) # => {type: standard, max_token_length: 900}
49
+ #
50
+ repository :tokenizer
51
+
52
+ # Token filters repository:
53
+ #
54
+ # Chewy.filter :my_token_filter1, {type: stop, stopwords: [stop1, stop2, stop3, stop4]}
55
+ # Chewy.filter(:my_token_filter1) # => {type: stop, stopwords: [stop1, stop2, stop3, stop4]}
56
+ #
57
+ repository :filter
58
+
59
+ # Char filters repository:
60
+ #
61
+ # Chewy.char_filter :my_html, {type: html_strip, escaped_tags: [xxx, yyy], read_ahead: 1024}
62
+ # Chewy.char_filter(:my_html) # => {type: html_strip, escaped_tags: [xxx, yyy], read_ahead: 1024}
63
+ #
64
+ repository :char_filter
65
+
18
66
  def client_options
19
67
  options = @client_options.merge(yaml_options)
20
68
  options.merge!(logger: logger) if logger
@@ -0,0 +1,13 @@
1
+ module Chewy
2
+ class Error < StandardError
3
+ end
4
+
5
+ class UndefinedIndex < Error
6
+ end
7
+
8
+ class UndefinedType < Error
9
+ end
10
+
11
+ class UnderivableType < Error
12
+ end
13
+ end
@@ -1,6 +1,7 @@
1
1
  require 'chewy/index/actions'
2
2
  require 'chewy/index/aliases'
3
3
  require 'chewy/index/search'
4
+ require 'chewy/index/settings'
4
5
 
5
6
  module Chewy
6
7
  class Index
@@ -14,7 +15,7 @@ module Chewy
14
15
  self.type_hash = {}
15
16
 
16
17
  class_attribute :_settings
17
- self._settings = {}
18
+ self._settings = Chewy::Index::Settings.new
18
19
 
19
20
  # Setups or returns ElasticSearch index name
20
21
  #
@@ -129,23 +130,11 @@ module Chewy
129
130
  # See http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/indices-update-settings.html
130
131
  # for more details
131
132
  #
132
- def self.settings(params)
133
- self._settings = params
134
- end
135
-
136
- # Perform import operation for every defined type
133
+ # It is possible to store analyzers settings in Chewy repositories
134
+ # and link them form index class. See `Chewy::Index::Settings` for details.
137
135
  #
138
- # UsersIndex.import
139
- # UsersIndex.import refresh: false # to disable index refreshing after import
140
- # UsersIndex.import suffix: Time.now.to_i # imports data to index with specified suffix if such is exists
141
- # UsersIndex.import batch_size: 300 # import batch size
142
- #
143
- def self.import options = {}
144
- objects = options.extract!(*type_names.map(&:to_sym))
145
- types.map do |type|
146
- args = [objects[type.type_name.to_sym], options.dup].reject(&:blank?)
147
- type.import *args
148
- end.all?
136
+ def self.settings(params)
137
+ self._settings = Chewy::Index::Settings.new params
149
138
  end
150
139
 
151
140
  private
@@ -156,7 +145,7 @@ module Chewy
156
145
  end
157
146
 
158
147
  def self.settings_hash
159
- _settings.present? ? {settings: _settings} : {}
148
+ _settings.to_hash
160
149
  end
161
150
 
162
151
  def self.mappings_hash
@@ -107,11 +107,29 @@ module Chewy
107
107
  # UsersIndex.purge! '01-2014' # deletes `users` and `users_01-2014` indexes, creates `users_01-2014`
108
108
  #
109
109
  def purge! suffix = nil
110
- delete if suffix.present?
111
- delete suffix
110
+ begin
111
+ delete! if suffix.present? && exists?
112
+ delete! suffix
113
+ rescue Elasticsearch::Transport::Transport::Errors::NotFound
114
+ end
112
115
  create! suffix
113
116
  end
114
117
 
118
+ # Perform import operation for every defined type
119
+ #
120
+ # UsersIndex.import
121
+ # UsersIndex.import refresh: false # to disable index refreshing after import
122
+ # UsersIndex.import suffix: Time.now.to_i # imports data to index with specified suffix if such is exists
123
+ # UsersIndex.import batch_size: 300 # import batch size
124
+ #
125
+ def import options = {}
126
+ objects = options.extract!(*type_names.map(&:to_sym))
127
+ types.map do |type|
128
+ args = [objects[type.type_name.to_sym], options.dup].reject(&:blank?)
129
+ type.import *args
130
+ end.all?
131
+ end
132
+
115
133
  # Deletes, creates and imports data to the index.
116
134
  # Returns import result
117
135
  #
@@ -5,7 +5,7 @@ module Chewy
5
5
 
6
6
  included do
7
7
  singleton_class.delegate :explain, :limit, :offset, :facets, :query,
8
- :filter, :order, :reorder, :only, :types, to: :all
8
+ :filter, :order, :reorder, :only, :types, :none, to: :all
9
9
  end
10
10
 
11
11
  module ClassMethods
@@ -0,0 +1,77 @@
1
+ module Chewy
2
+ class Index
3
+
4
+ # Stores ElasticSearch index settings and resolves `analysis`
5
+ # hash. At first, you need to store sone analyzers or other
6
+ # analysis options to the corresponding repository:
7
+ #
8
+ # Chewy.analyzer :title_analyzer, type: 'custom', filter: %w(lowercase icu_folding title_nysiis)
9
+ # Chewy.filter :title_nysiis, type: 'phonetic', encoder: 'nysiis', replace: false
10
+ #
11
+ # `title_nysiis` filter here will be expanded automatically when
12
+ # `title_analyzer` analyser will be used in index settings:
13
+ #
14
+ # class ProductsIndex < Chewy::Index
15
+ # settings analysis: {
16
+ # analyzer: [
17
+ # 'title_analyzer',
18
+ # {one_more_analyzer: {type: 'custom', tokenizer: 'lowercase'}}
19
+ # ]
20
+ # }
21
+ # end
22
+ #
23
+ # Additional analysing options, which wasn't stored in repositories,
24
+ # might be used as well.
25
+ #
26
+ class Settings
27
+ def initialize(params = {})
28
+ @params = params
29
+ end
30
+
31
+ def to_hash
32
+ return {} unless @params.present?
33
+
34
+ params = @params.deep_dup
35
+ params[:analysis] = resolve_analysis(params[:analysis]) if params[:analysis]
36
+
37
+ {settings: params}
38
+ end
39
+
40
+ private
41
+
42
+ def resolve_analysis(analysis)
43
+ analyzer = resolve(analysis[:analyzer], Chewy.analyzers)
44
+
45
+ options = [:tokenizer, :filter, :char_filter].each.with_object({}) do |type, result|
46
+ dependencies = collect_dependencies(type, analyzer)
47
+ resolved = resolve(dependencies.push(analysis[type]), Chewy.send(type.to_s.pluralize))
48
+ result.merge!(type => resolved) if resolved.present?
49
+ end
50
+
51
+ options.merge!(analyzer: analyzer) if analyzer.present?
52
+ options
53
+ end
54
+
55
+ def collect_dependencies(type, analyzer)
56
+ analyzer.map { |_, options| options[type] }.compact.flatten.uniq
57
+ end
58
+
59
+ def resolve(params, repository)
60
+ if params.is_a?(Array)
61
+ params.flatten.reject(&:blank?).each.with_object({}) do |name_or_hash, result|
62
+ options = if name_or_hash.is_a?(Hash)
63
+ name_or_hash
64
+ else
65
+ name_or_hash = name_or_hash.to_sym
66
+ resolved = repository[name_or_hash]
67
+ resolved ? {name_or_hash => resolved} : {}
68
+ end
69
+ result.merge!(options)
70
+ end
71
+ else
72
+ params || {}
73
+ end
74
+ end
75
+ end
76
+ end
77
+ end
@@ -246,6 +246,20 @@ module Chewy
246
246
  chain { criteria.update_facets params }
247
247
  end
248
248
 
249
+ # Marks the criteria as having zero records. This scope always returns empty array
250
+ # without touching the elasticsearch server.
251
+ # All the chained calls of methods don't affect the result
252
+ #
253
+ # UsersIndex.none.to_a
254
+ # # => []
255
+ # UsersIndex.query(text: {name: 'Johny'}).none.to_a
256
+ # # => []
257
+ # UsersIndex.none.query(text: {name: 'Johny'}).to_a
258
+ # # => []
259
+ def none
260
+ chain { criteria.update_options none: true }
261
+ end
262
+
249
263
  # Adds one or more query to the search request
250
264
  # Internally queries are stored as an array
251
265
  # While the full query compilation this array compiles
@@ -448,7 +462,7 @@ module Chewy
448
462
  end
449
463
 
450
464
  def _results
451
- @_results ||= _response['hits']['hits'].map do |hit|
465
+ @_results ||= (criteria.none? ? [] : _response['hits']['hits']).map do |hit|
452
466
  attributes = hit['_source'] || hit['fields'] || {}
453
467
  attributes.reverse_merge!(id: hit['_id'])
454
468
  .merge!(_score: hit['_score'], _explanation: hit['_explanation'])
@@ -30,6 +30,10 @@ module Chewy
30
30
  end
31
31
  end
32
32
 
33
+ def none?
34
+ !!options[:none]
35
+ end
36
+
33
37
  def update_options(modifer)
34
38
  options.merge!(modifer)
35
39
  end
@@ -1,3 +1,3 @@
1
1
  module Chewy
2
- VERSION = "0.2.0"
2
+ VERSION = '0.2.2'
3
3
  end
@@ -8,6 +8,50 @@ describe Chewy::Config do
8
8
  its(:filter_mode) { should == :and }
9
9
  its(:logger) { should be_nil }
10
10
  its(:client_options) { should_not have_key :logger }
11
+ its(:analyzers) { should == {} }
12
+ its(:tokenizers) { should == {} }
13
+ its(:filters) { should == {} }
14
+ its(:char_filters) { should == {} }
15
+
16
+ describe '#analyzer' do
17
+ specify { subject.analyzer(:name).should be_nil }
18
+
19
+ context do
20
+ before { subject.analyzer(:name, option: :foo) }
21
+ specify { subject.analyzer(:name).should == {option: :foo} }
22
+ specify { subject.analyzers.should == {name: {option: :foo}} }
23
+ end
24
+ end
25
+
26
+ describe '#tokenizer' do
27
+ specify { subject.tokenizer(:name).should be_nil }
28
+
29
+ context do
30
+ before { subject.tokenizer(:name, option: :foo) }
31
+ specify { subject.tokenizer(:name).should == {option: :foo} }
32
+ specify { subject.tokenizers.should == {name: {option: :foo}} }
33
+ end
34
+ end
35
+
36
+ describe '#filter' do
37
+ specify { subject.filter(:name).should be_nil }
38
+
39
+ context do
40
+ before { subject.filter(:name, option: :foo) }
41
+ specify { subject.filter(:name).should == {option: :foo} }
42
+ specify { subject.filters.should == {name: {option: :foo}} }
43
+ end
44
+ end
45
+
46
+ describe '#char_filter' do
47
+ specify { subject.char_filter(:name).should be_nil }
48
+
49
+ context do
50
+ before { subject.char_filter(:name, option: :foo) }
51
+ specify { subject.char_filter(:name).should == {option: :foo} }
52
+ specify { subject.char_filters.should == {name: {option: :foo}} }
53
+ end
54
+ end
11
55
 
12
56
  describe '#logger' do
13
57
  before { subject.logger = double(:logger) }
@@ -0,0 +1,70 @@
1
+ require 'spec_helper'
2
+
3
+ describe Chewy::Index::Settings do
4
+ include ClassHelpers
5
+
6
+ describe '#to_hash' do
7
+ before { Chewy.stub(config: Chewy::Config.send(:new)) }
8
+
9
+ specify { described_class.new.to_hash.should == {} }
10
+ specify { described_class.new(number_of_nodes: 3).to_hash.should == {settings: {number_of_nodes: 3}} }
11
+ specify { described_class.new(number_of_nodes: 3, analysis: {}).to_hash
12
+ .should == {settings: {number_of_nodes: 3, analysis: {}}} }
13
+ specify { described_class.new(number_of_nodes: 3, analysis: {filter: {filter1: {}}}).to_hash
14
+ .should == {settings: {number_of_nodes: 3, analysis: {filter: {filter1: {}}}}} }
15
+ specify { described_class.new(number_of_nodes: 3, analysis: {analyzer: {analyzer1: {}}}).to_hash
16
+ .should == {settings: {number_of_nodes: 3, analysis: {analyzer: {analyzer1: {}}}}} }
17
+ specify { described_class.new(number_of_nodes: 3, analysis: {
18
+ analyzer: {analyzer1: {tokenizer: 'tokenizer1', filter: ['filter1', 'filter2']}}
19
+ }).to_hash
20
+ .should == {settings: {number_of_nodes: 3, analysis: {
21
+ analyzer: {analyzer1: {tokenizer: 'tokenizer1', filter: ['filter1', 'filter2']}}
22
+ }}} }
23
+ specify { described_class.new(number_of_nodes: 3, analysis: {analyser: ['analyzer1']}).to_hash
24
+ .should == {settings: {number_of_nodes: 3, analysis: {}}} }
25
+
26
+ context do
27
+ before { Chewy.tokenizer :tokenizer1, {options: 42} }
28
+
29
+ specify { described_class.new(number_of_nodes: 3, analysis: {
30
+ analyzer: {analyzer1: {tokenizer: 'tokenizer1', filter: ['filter1', 'filter2']}}
31
+ }).to_hash
32
+ .should == {settings: {number_of_nodes: 3, analysis: {
33
+ analyzer: {analyzer1: {tokenizer: 'tokenizer1', filter: ['filter1', 'filter2']}},
34
+ tokenizer: {tokenizer1: {options: 42}}
35
+ }}} }
36
+ end
37
+
38
+ context do
39
+ before do
40
+ Chewy.filter :filter2, {options: 42}
41
+ Chewy.filter :filter3, {options: 43}
42
+ Chewy.filter :filter5, {options: 44}
43
+ end
44
+
45
+ specify { described_class.new(number_of_nodes: 3, analysis: {
46
+ analyzer: {analyzer1: {tokenizer: 'tokenizer1', filter: ['filter1', 'filter2']}},
47
+ filter: ['filter3', {filter4: {options: 45}}]
48
+ }).to_hash
49
+ .should == {settings: {number_of_nodes: 3, analysis: {
50
+ analyzer: {analyzer1: {tokenizer: 'tokenizer1', filter: ['filter1', 'filter2']}},
51
+ filter: {filter2: {options: 42}, filter3: {options: 43}, filter4: {options: 45}}
52
+ }}} }
53
+ end
54
+
55
+ context do
56
+ before do
57
+ Chewy.analyzer :analyzer1, {options: 42, tokenizer: 'tokenizer1'}
58
+ Chewy.tokenizer :tokenizer1, {options: 43}
59
+ end
60
+
61
+ specify { described_class.new(number_of_nodes: 3, analysis: {
62
+ analyzer: ['analyzer1', {analyzer2: {options: 44}}]
63
+ }).to_hash
64
+ .should == {settings: {number_of_nodes: 3, analysis: {
65
+ analyzer: {analyzer1: {options: 42, tokenizer: 'tokenizer1'}, analyzer2: {options: 44}},
66
+ tokenizer: {tokenizer1: {options: 43}}
67
+ }}} }
68
+ end
69
+ end
70
+ end
@@ -22,6 +22,30 @@ describe Chewy::Index do
22
22
  end
23
23
  end
24
24
 
25
+ describe '.settings' do
26
+ before do
27
+ Chewy.stub(config: Chewy::Config.send(:new))
28
+
29
+ Chewy.analyzer :name, filter: ['lowercase', 'icu_folding', 'names_nysiis']
30
+ Chewy.analyzer :phone, tokenizer: 'ngram', char_filter: ['phone']
31
+ Chewy.tokenizer :ngram, type: 'nGram', min_gram: 3, max_gram: 3
32
+ Chewy.char_filter :phone, type: 'pattern_replace', pattern: '[^\d]', replacement: ''
33
+ Chewy.filter :names_nysiis, type: 'phonetic', encoder: 'nysiis', replace: false
34
+ end
35
+
36
+ let(:documents) { stub_index(:documents) { settings analysis: {analyzer: [:name, :phone, {sorted: {option: :baz}}]} } }
37
+
38
+ specify { expect { documents.settings_hash }.to_not change(documents._settings, :inspect) }
39
+ specify { documents.settings_hash.should == {settings: {analysis: {
40
+ analyzer: {name: {filter: ['lowercase', 'icu_folding', 'names_nysiis']},
41
+ phone: {tokenizer: 'ngram', char_filter: ['phone']},
42
+ sorted: {option: :baz}},
43
+ tokenizer: {ngram: {type: 'nGram', min_gram: 3, max_gram: 3}},
44
+ char_filter: {phone: {type: 'pattern_replace', pattern: '[^\d]', replacement: ''}},
45
+ filter: {names_nysiis: {type: 'phonetic', encoder: 'nysiis', replace: false}}
46
+ }}} }
47
+ end
48
+
25
49
  describe '.define_type' do
26
50
  specify { DummiesIndex.type_hash['dummy'].should == DummiesIndex::Dummy }
27
51
 
@@ -13,6 +13,7 @@ describe Chewy::Query::Criteria do
13
13
  its(:fields) { should == [] }
14
14
  its(:types) { should == [] }
15
15
 
16
+ its(:none?){ should be_false }
16
17
  its(:facets?) { should be_false }
17
18
  its(:queries?) { should be_false }
18
19
  its(:filters?) { should be_false }
@@ -72,6 +72,20 @@ describe Chewy::Query do
72
72
  specify { expect { subject.offset(10) }.not_to change { subject.criteria.options } }
73
73
  end
74
74
 
75
+ describe '#none' do
76
+ specify { subject.none.should be_a described_class }
77
+ specify { subject.none.should_not == subject }
78
+ specify { subject.none.criteria.should be_none }
79
+
80
+ context do
81
+ before { described_class.any_instance.should_not_receive(:_response) }
82
+
83
+ specify { subject.none.to_a.should == [] }
84
+ specify { subject.query(match: 'hello').none.to_a.should == [] }
85
+ specify { subject.none.query(match: 'hello').to_a.should == [] }
86
+ end
87
+ end
88
+
75
89
  describe '#query' do
76
90
  specify { subject.query(match: 'hello').should be_a described_class }
77
91
  specify { subject.query(match: 'hello').should_not == subject }
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.0
4
+ version: 0.2.2
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-09 00:00:00.000000000 Z
11
+ date: 2014-02-26 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rake
@@ -157,6 +157,7 @@ files:
157
157
  - filters
158
158
  - lib/chewy.rb
159
159
  - lib/chewy/config.rb
160
+ - lib/chewy/errors.rb
160
161
  - lib/chewy/fields/base.rb
161
162
  - lib/chewy/fields/default.rb
162
163
  - lib/chewy/fields/root.rb
@@ -164,6 +165,7 @@ files:
164
165
  - lib/chewy/index/actions.rb
165
166
  - lib/chewy/index/aliases.rb
166
167
  - lib/chewy/index/search.rb
168
+ - lib/chewy/index/settings.rb
167
169
  - lib/chewy/query.rb
168
170
  - lib/chewy/query/compose.rb
169
171
  - lib/chewy/query/criteria.rb
@@ -211,6 +213,7 @@ files:
211
213
  - spec/chewy/index/actions_spec.rb
212
214
  - spec/chewy/index/aliases_spec.rb
213
215
  - spec/chewy/index/search_spec.rb
216
+ - spec/chewy/index/settings_spec.rb
214
217
  - spec/chewy/index_spec.rb
215
218
  - spec/chewy/query/criteria_spec.rb
216
219
  - spec/chewy/query/filters_spec.rb
@@ -277,6 +280,7 @@ test_files:
277
280
  - spec/chewy/index/actions_spec.rb
278
281
  - spec/chewy/index/aliases_spec.rb
279
282
  - spec/chewy/index/search_spec.rb
283
+ - spec/chewy/index/settings_spec.rb
280
284
  - spec/chewy/index_spec.rb
281
285
  - spec/chewy/query/criteria_spec.rb
282
286
  - spec/chewy/query/filters_spec.rb