chewy 0.2.0 → 0.2.2

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