es-elasticity 0.2.11 → 0.3.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,6 +1,4 @@
1
- require "elasticity/index"
2
-
3
- RSpec.describe Elasticity::Index, elasticsearch: true do
1
+ RSpec.describe Elasticity::Strategies::SingleIndex, elasticsearch: true do
4
2
  subject do
5
3
  described_class.new(Elasticity.config.client, "test_index_name")
6
4
  end
@@ -25,7 +23,7 @@ RSpec.describe Elasticity::Index, elasticsearch: true do
25
23
  subject.create(index_def)
26
24
  expect(subject.mappings).to eq({"document"=>{"properties"=>{"name"=>{"type"=>"string"}}}})
27
25
 
28
- subject.recreate
26
+ subject.recreate(index_def)
29
27
  expect(subject.mappings).to eq({"document"=>{"properties"=>{"name"=>{"type"=>"string"}}}})
30
28
 
31
29
  subject.delete
@@ -62,6 +60,7 @@ RSpec.describe Elasticity::Index, elasticsearch: true do
62
60
  b.index "document", 2, name: "bar"
63
61
  b.delete "document", 1
64
62
  end
63
+
65
64
  expect(results_b).to include("errors"=>false, "items"=>[{"index"=>{"_index"=>"test_index_name", "_type"=>"document", "_id"=>"2", "_version"=>1, "status"=>201}}, {"delete"=>{"_index"=>"test_index_name", "_type"=>"document", "_id"=>"1", "_version"=>2, "status"=>200, "found"=>true}}])
66
65
 
67
66
  subject.flush
@@ -73,13 +72,11 @@ RSpec.describe Elasticity::Index, elasticsearch: true do
73
72
  it "allows searching documents" do
74
73
  subject.index_document("document", 1, name: "test")
75
74
  subject.flush
76
- results = subject.search("document", filter: { term: { name: "test" }})
77
-
78
- expect(results["hits"]["total"]).to be 1
79
75
 
80
- doc = results["hits"]["hits"][0]
81
- expect(doc["_id"]).to eq "1"
82
- expect(doc["_source"]).to eq({ "name" => "test" })
76
+ search = subject.search("document", filter: { term: { name: "test" }})
77
+ hashes = search.document_hashes
78
+ expect(hashes.size).to be 1
79
+ expect(hashes[0]).to eq("_id" => "1", "_index" => "test_index_name", "_type" => "document", "_score" => 1.0, "_source" => { "name" => "test" })
83
80
  end
84
81
 
85
82
  it "allows deleting by queryu" do
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.2.11
4
+ version: 0.3.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: 2014-10-22 00:00:00.000000000 Z
11
+ date: 2014-11-18 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -108,6 +108,20 @@ dependencies:
108
108
  - - ">="
109
109
  - !ruby/object:Gem::Version
110
110
  version: '0'
111
+ - !ruby/object:Gem::Dependency
112
+ name: redis
113
+ requirement: !ruby/object:Gem::Requirement
114
+ requirements:
115
+ - - ">="
116
+ - !ruby/object:Gem::Version
117
+ version: '0'
118
+ type: :development
119
+ prerelease: false
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ requirements:
122
+ - - ">="
123
+ - !ruby/object:Gem::Version
124
+ version: '0'
111
125
  - !ruby/object:Gem::Dependency
112
126
  name: activesupport
113
127
  requirement: !ruby/object:Gem::Requirement
@@ -170,18 +184,24 @@ files:
170
184
  - bin/rspec
171
185
  - elasticity.gemspec
172
186
  - lib/elasticity.rb
187
+ - lib/elasticity/bulk.rb
188
+ - lib/elasticity/config.rb
173
189
  - lib/elasticity/document.rb
174
- - lib/elasticity/index.rb
190
+ - lib/elasticity/instrumented_client.rb
191
+ - lib/elasticity/log_subscriber.rb
175
192
  - lib/elasticity/multi_search.rb
176
193
  - lib/elasticity/railtie.rb
177
194
  - lib/elasticity/search.rb
195
+ - lib/elasticity/strategies.rb
196
+ - lib/elasticity/strategies/alias_index.rb
197
+ - lib/elasticity/strategies/single_index.rb
178
198
  - lib/elasticity/version.rb
179
- - lib/elasticity_base.rb
199
+ - spec/functional/persistence_spec.rb
180
200
  - spec/rspec_config.rb
181
201
  - spec/units/document_spec.rb
182
- - spec/units/index_spec.rb
183
202
  - spec/units/multi_search_spec.rb
184
203
  - spec/units/search_spec.rb
204
+ - spec/units/strategies/single_index_spec.rb
185
205
  homepage: ''
186
206
  licenses:
187
207
  - MIT
@@ -207,9 +227,10 @@ signing_key:
207
227
  specification_version: 4
208
228
  summary: ActiveModel-based library for working with Elasticsearch
209
229
  test_files:
230
+ - spec/functional/persistence_spec.rb
210
231
  - spec/rspec_config.rb
211
232
  - spec/units/document_spec.rb
212
- - spec/units/index_spec.rb
213
233
  - spec/units/multi_search_spec.rb
214
234
  - spec/units/search_spec.rb
235
+ - spec/units/strategies/single_index_spec.rb
215
236
  has_rdoc:
@@ -1,118 +0,0 @@
1
- module Elasticity
2
- class Index
3
- attr_reader :name
4
-
5
- def initialize(client, index_name)
6
- @client = client
7
- @name = index_name
8
- end
9
-
10
- def exists?
11
- @client.indices.exists(index: @name)
12
- end
13
-
14
- def create(index_def)
15
- args = { index: @name, body: index_def }
16
- instrument("index_create", args) { @client.indices.create(args) }
17
- end
18
-
19
- def create_if_undefined(index_def)
20
- create(index_def) unless exists?
21
- end
22
-
23
- def delete
24
- args = { index: @name }
25
- instrument("index_delete", args) { @client.indices.delete(args) }
26
- end
27
-
28
- def delete_if_defined
29
- delete if exists?
30
- end
31
-
32
- def recreate(index_def = nil)
33
- index_def ||= { settings: settings, mappings: mappings }
34
- delete_if_defined
35
- create(index_def)
36
- end
37
-
38
- def index_document(type, id, attributes)
39
- args = { index: @name, type: type, id: id, body: attributes }
40
- instrument("index_document", args) { @client.index(args) }
41
- end
42
-
43
- def delete_document(type, id)
44
- args = { index: @name, type: type, id: id }
45
- instrument("delete_document", args) { @client.delete(args) }
46
- end
47
-
48
- def get_document(type, id)
49
- args = { index: @name, type: type, id: id }
50
- instrument("get_document", args) { @client.get(args) }
51
- end
52
-
53
- def search(type, body)
54
- args = { index: @name, type: type, body: body }
55
- instrument("search", args) { @client.search(args) }
56
- end
57
-
58
- def delete_by_query(type, body)
59
- args = { index: @name, type: type, body: body }
60
- instrument("delete_by_query", args) { @client.delete_by_query(args) }
61
- end
62
-
63
- def bulk
64
- b = Bulk.new(@client, @name)
65
- yield b
66
- b.execute
67
- end
68
-
69
- def settings
70
- args = { index: @name }
71
- settings = instrument("settings", args) { @client.indices.get_settings(args) }
72
- settings[@name]["settings"] if settings[@name]
73
- rescue Elasticsearch::Transport::Transport::Errors::NotFound
74
- nil
75
- end
76
-
77
- def mappings
78
- args = { index: @name }
79
- mappings = instrument("mappings", args) { @client.indices.get_mapping(args) }
80
- mappings[@name]["mappings"] if mappings[@name]
81
- rescue Elasticsearch::Transport::Transport::Errors::NotFound
82
- nil
83
- end
84
-
85
- def flush
86
- args = { index: @name }
87
- instrument("flush", args) { @client.indices.flush(args) }
88
- end
89
-
90
- private
91
-
92
- def instrument(name, extra = {})
93
- ActiveSupport::Notifications.instrument("#{name}.elasticity", args: extra, backtrace: caller(1)) do
94
- yield
95
- end
96
- end
97
-
98
- class Bulk
99
- def initialize(client, name)
100
- @client = client
101
- @name = name
102
- @operations = []
103
- end
104
-
105
- def index(type, id, attributes)
106
- @operations << { index: { _index: @name, _type: type, _id: id, data: attributes }}
107
- end
108
-
109
- def delete(type, id)
110
- @operations << { delete: { _index: @name, _type: type, _id: id }}
111
- end
112
-
113
- def execute
114
- @client.bulk(body: @operations)
115
- end
116
- end
117
- end
118
- end
@@ -1,56 +0,0 @@
1
- require "rubygems"
2
- require "bundler/setup"
3
- Bundler.setup
4
-
5
- require "active_support"
6
- require "active_support/core_ext"
7
- require "active_model"
8
- require "elasticsearch"
9
-
10
- if defined?(Rails)
11
- require "elasticity/railtie"
12
- end
13
-
14
- module Elasticity
15
- class Config
16
- attr_writer :logger, :client, :settings, :namespace, :pretty_json
17
-
18
- def logger
19
- return @logger if defined?(@logger)
20
-
21
- if defined?(Rails)
22
- @logger = Rails.logger
23
- else
24
- @logger = Logger.new(STDOUT)
25
- end
26
- end
27
-
28
- def client
29
- return @client if defined?(@client)
30
- @client = Elasticsearch::Client.new
31
- end
32
-
33
- def settings
34
- return @settings if defined?(@settings)
35
- @settings = {}
36
- end
37
-
38
- def namespace
39
- @namespace
40
- end
41
-
42
- def pretty_json
43
- @pretty_json || false
44
- end
45
- end
46
-
47
- def self.configure
48
- @config = Config.new
49
- yield(@config)
50
- end
51
-
52
- def self.config
53
- return @config if defined?(@config)
54
- @config = Config.new
55
- end
56
- end