waistband 0.11.3 → 0.12.1
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 +8 -8
- data/Gemfile +1 -1
- data/lib/waistband/configuration.rb +13 -13
- data/lib/waistband/index.rb +29 -2
- data/lib/waistband/version.rb +1 -1
- data/spec/lib/index_spec.rb +36 -0
- data/waistband.gemspec +4 -4
- metadata +14 -14
checksums.yaml
CHANGED
|
@@ -1,15 +1,15 @@
|
|
|
1
1
|
---
|
|
2
2
|
!binary "U0hBMQ==":
|
|
3
3
|
metadata.gz: !binary |-
|
|
4
|
-
|
|
4
|
+
MGU3NDk1NDE4OWM5NDYzNjY3ODNhMzc1NTJkOTJhMWVjNWU3OWM5Mg==
|
|
5
5
|
data.tar.gz: !binary |-
|
|
6
|
-
|
|
6
|
+
NjBiNzhmMWVjZTRjYzM1NzI4ODViMTg4NWIxYTdmMzViZjNjZjE3NA==
|
|
7
7
|
SHA512:
|
|
8
8
|
metadata.gz: !binary |-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
9
|
+
NTk5NDk4NDVjNzM3ZDg1YzU0ZWJlMjk1MmJjYTkwY2Q0NGI1MTE0YTI1MDdk
|
|
10
|
+
YTMxMmE5YzZkY2ZmMzk3NzhlNDFiYmJjZDYyNzQ4ZmZkZmQzNGQ0MDE1ZWQz
|
|
11
|
+
NTI5OTA0YzA1MGUzZjQzZTNmOTFkOWU0MzdmMGRmODI1ZGQ0MDg=
|
|
12
12
|
data.tar.gz: !binary |-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
13
|
+
NDJjMmFkZTAwMTk1ZTcxZDI3OTMyNTYwNzk3ZjUwNGQ2NmEzYmZlNzljNzY4
|
|
14
|
+
MTczM2U0MTc0ODUwZDNjOGY5ZTBhYTE4NGQzNDA1NjQwYmI1MTlmODhkZmU2
|
|
15
|
+
N2MwY2E2N2E0MWJmNWRkZTMwNTk1YTMyNTU5NjBhOTU0NTliNjY=
|
data/Gemfile
CHANGED
|
@@ -23,23 +23,15 @@ module Waistband
|
|
|
23
23
|
raise "Please define a valid `config_dir` configuration variable!" unless config_dir
|
|
24
24
|
raise "Couldn't find configuration directory #{config_dir}" unless File.exist?(config_dir)
|
|
25
25
|
|
|
26
|
-
@env
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
yml = YAML.load_file("#{config_dir}/waistband.yml")
|
|
31
|
-
end
|
|
32
|
-
@yml_config = yml[@env].with_indifferent_access
|
|
33
|
-
@adapter = @yml_config.delete('adapter')
|
|
26
|
+
@env ||= ENV['RAILS_ENV'] || ENV['RACK_ENV'] || 'development'
|
|
27
|
+
yml = load_yml_with_erb(File.join(config_dir, 'waistband.yml'))
|
|
28
|
+
@yml_config = yml[@env].with_indifferent_access
|
|
29
|
+
@adapter = @yml_config.delete('adapter')
|
|
34
30
|
end
|
|
35
31
|
|
|
36
32
|
def index(name)
|
|
37
33
|
return @indexes[name] if @indexes[name]
|
|
38
|
-
|
|
39
|
-
yml = YAML.load(ERB.new(File.read("#{config_dir}/waistband_#{name}.yml")).result)
|
|
40
|
-
else
|
|
41
|
-
yml = YAML.load_file("#{config_dir}/waistband_#{name}.yml")
|
|
42
|
-
end
|
|
34
|
+
yml = load_yml_with_erb(File.join(config_dir, "waistband_#{name}.yml"))
|
|
43
35
|
@indexes[name] = yml[@env].with_indifferent_access
|
|
44
36
|
end
|
|
45
37
|
|
|
@@ -78,6 +70,14 @@ module Waistband
|
|
|
78
70
|
|
|
79
71
|
private
|
|
80
72
|
|
|
73
|
+
def load_yml_with_erb(file)
|
|
74
|
+
if defined?(ERB)
|
|
75
|
+
YAML.load(ERB.new(File.read(file)).result)
|
|
76
|
+
else
|
|
77
|
+
YAML.load_file(file)
|
|
78
|
+
end
|
|
79
|
+
end
|
|
80
|
+
|
|
81
81
|
def timeout
|
|
82
82
|
return @timeout if defined? @timeout
|
|
83
83
|
@yml_config['timeout']
|
data/lib/waistband/index.rb
CHANGED
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
require 'active_support/core_ext/hash/keys'
|
|
2
2
|
require 'active_support/core_ext/array/extract_options'
|
|
3
3
|
require 'active_support/core_ext/string/inflections'
|
|
4
|
+
require 'active_support/core_ext/object/blank'
|
|
5
|
+
require 'active_support/core_ext/object/try'
|
|
4
6
|
require 'elasticsearch'
|
|
5
7
|
|
|
6
8
|
module Waistband
|
|
@@ -33,6 +35,12 @@ module Waistband
|
|
|
33
35
|
client.indices.refresh index: config_name
|
|
34
36
|
end
|
|
35
37
|
|
|
38
|
+
def update_all_mappings
|
|
39
|
+
responses = types.map do |type|
|
|
40
|
+
update_mapping(type).merge('_type' => type)
|
|
41
|
+
end
|
|
42
|
+
end
|
|
43
|
+
|
|
36
44
|
def update_mapping(type)
|
|
37
45
|
client.indices.put_mapping(
|
|
38
46
|
index: config_name,
|
|
@@ -55,8 +63,10 @@ module Waistband
|
|
|
55
63
|
end
|
|
56
64
|
|
|
57
65
|
def create!
|
|
58
|
-
raise ::Waistband::Errors::IndexExists.new("Index already exists") if exists?
|
|
59
66
|
client.indices.create index: config_name, body: config.except('name', 'stringify')
|
|
67
|
+
rescue Elasticsearch::Transport::Transport::Errors::BadRequest => ex
|
|
68
|
+
raise ex unless ex.message.to_s =~ /IndexAlreadyExistsException/
|
|
69
|
+
raise ::Waistband::Errors::IndexExists.new("Index already exists")
|
|
60
70
|
end
|
|
61
71
|
|
|
62
72
|
def delete
|
|
@@ -66,8 +76,10 @@ module Waistband
|
|
|
66
76
|
end
|
|
67
77
|
|
|
68
78
|
def delete!
|
|
69
|
-
raise ::Waistband::Errors::IndexNotFound.new("Index not found") unless exists?
|
|
70
79
|
client.indices.delete index: config_name
|
|
80
|
+
rescue Elasticsearch::Transport::Transport::Errors::NotFound => ex
|
|
81
|
+
raise ex unless ex.message.to_s =~ /IndexMissingException/
|
|
82
|
+
raise ::Waistband::Errors::IndexNotFound.new("Index not found")
|
|
71
83
|
end
|
|
72
84
|
|
|
73
85
|
def save(*args)
|
|
@@ -99,6 +111,17 @@ module Waistband
|
|
|
99
111
|
doc['_source']
|
|
100
112
|
end
|
|
101
113
|
|
|
114
|
+
def read_result(id, options = {})
|
|
115
|
+
read_result!(id, options)
|
|
116
|
+
rescue Elasticsearch::Transport::Transport::Errors::NotFound
|
|
117
|
+
nil
|
|
118
|
+
end
|
|
119
|
+
|
|
120
|
+
def read_result!(id, options = {})
|
|
121
|
+
hit = read!(id, options)
|
|
122
|
+
::Waistband::Result.new(hit)
|
|
123
|
+
end
|
|
124
|
+
|
|
102
125
|
def read(id, options = {})
|
|
103
126
|
read!(id, options)
|
|
104
127
|
rescue Elasticsearch::Transport::Transport::Errors::NotFound
|
|
@@ -218,6 +241,10 @@ module Waistband
|
|
|
218
241
|
data
|
|
219
242
|
end
|
|
220
243
|
|
|
244
|
+
def types
|
|
245
|
+
config.try(:[], 'mappings').try(:keys) || []
|
|
246
|
+
end
|
|
247
|
+
|
|
221
248
|
def default_type_name
|
|
222
249
|
@index_name.singularize
|
|
223
250
|
end
|
data/lib/waistband/version.rb
CHANGED
data/spec/lib/index_spec.rb
CHANGED
|
@@ -18,6 +18,22 @@ describe Waistband::Index do
|
|
|
18
18
|
expect{ index.refresh }.to_not raise_error
|
|
19
19
|
end
|
|
20
20
|
|
|
21
|
+
it "blows up when trying to create an existing index" do
|
|
22
|
+
index.delete!
|
|
23
|
+
expect{ index.refresh }.to raise_error(Elasticsearch::Transport::Transport::Errors::NotFound)
|
|
24
|
+
|
|
25
|
+
expect{ index.create! }.to_not raise_error
|
|
26
|
+
expect{ index.create! }.to raise_error(::Waistband::Errors::IndexExists, "Index already exists")
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
it "doesn't blow up on creation when using the non-bang method" do
|
|
30
|
+
index.delete!
|
|
31
|
+
expect{ index.refresh }.to raise_error(Elasticsearch::Transport::Transport::Errors::NotFound)
|
|
32
|
+
|
|
33
|
+
expect{ index.create! }.to_not raise_error
|
|
34
|
+
expect{ index.create }.to_not raise_error
|
|
35
|
+
end
|
|
36
|
+
|
|
21
37
|
it "deletes the index" do
|
|
22
38
|
index.delete!
|
|
23
39
|
expect{ index.refresh }.to raise_error(Elasticsearch::Transport::Transport::Errors::NotFound)
|
|
@@ -35,6 +51,16 @@ describe Waistband::Index do
|
|
|
35
51
|
expect(response['acknowledged']).to be true
|
|
36
52
|
end
|
|
37
53
|
|
|
54
|
+
it "updates all mappings" do
|
|
55
|
+
index.refresh
|
|
56
|
+
responses = index.update_all_mappings
|
|
57
|
+
expect(responses).to be_an Array
|
|
58
|
+
|
|
59
|
+
response = responses.first
|
|
60
|
+
expect(response['acknowledged']).to be true
|
|
61
|
+
expect(response['_type']).to eql 'event'
|
|
62
|
+
end
|
|
63
|
+
|
|
38
64
|
it "updates the index's settings" do
|
|
39
65
|
index.refresh
|
|
40
66
|
response = index.update_settings
|
|
@@ -96,6 +122,16 @@ describe Waistband::Index do
|
|
|
96
122
|
expect(index2.read('__test_write')[:_source]).to eql({'data' => 'index_2'})
|
|
97
123
|
end
|
|
98
124
|
|
|
125
|
+
it "finds a result instead of a hash" do
|
|
126
|
+
index.save('__test_write', attrs)
|
|
127
|
+
result = index.read_result!('__test_write')
|
|
128
|
+
|
|
129
|
+
expect(result).to be_present
|
|
130
|
+
expect(result).to be_a Waistband::Result
|
|
131
|
+
expect(result._id).to eql '__test_write'
|
|
132
|
+
expect(result.ok).to eql '{"yeah"=>true}'
|
|
133
|
+
end
|
|
134
|
+
|
|
99
135
|
end
|
|
100
136
|
|
|
101
137
|
describe 'paginating search results' do
|
data/waistband.gemspec
CHANGED
|
@@ -18,10 +18,10 @@ Gem::Specification.new do |spec|
|
|
|
18
18
|
spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
|
|
19
19
|
spec.require_paths = ["lib"]
|
|
20
20
|
|
|
21
|
-
spec.add_dependency 'activesupport', '>= 3.0
|
|
22
|
-
spec.add_dependency 'elasticsearch', '
|
|
23
|
-
spec.add_dependency 'json', '~> 1.8
|
|
21
|
+
spec.add_dependency 'activesupport', '>= 3.0'
|
|
22
|
+
spec.add_dependency 'elasticsearch', '~> 1.0'
|
|
23
|
+
spec.add_dependency 'json', '~> 1.8'
|
|
24
24
|
|
|
25
25
|
spec.add_development_dependency "bundler", "~> 1.3"
|
|
26
|
-
spec.add_development_dependency "rake"
|
|
26
|
+
spec.add_development_dependency "rake", "~> 10.3"
|
|
27
27
|
end
|
metadata
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: waistband
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.
|
|
4
|
+
version: 0.12.1
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- David Jairala
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: bin
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date: 2014-06-
|
|
11
|
+
date: 2014-06-23 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: activesupport
|
|
@@ -16,42 +16,42 @@ dependencies:
|
|
|
16
16
|
requirements:
|
|
17
17
|
- - ! '>='
|
|
18
18
|
- !ruby/object:Gem::Version
|
|
19
|
-
version: 3.0
|
|
19
|
+
version: '3.0'
|
|
20
20
|
type: :runtime
|
|
21
21
|
prerelease: false
|
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
|
23
23
|
requirements:
|
|
24
24
|
- - ! '>='
|
|
25
25
|
- !ruby/object:Gem::Version
|
|
26
|
-
version: 3.0
|
|
26
|
+
version: '3.0'
|
|
27
27
|
- !ruby/object:Gem::Dependency
|
|
28
28
|
name: elasticsearch
|
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
|
30
30
|
requirements:
|
|
31
|
-
- -
|
|
31
|
+
- - ~>
|
|
32
32
|
- !ruby/object:Gem::Version
|
|
33
|
-
version: 1.0
|
|
33
|
+
version: '1.0'
|
|
34
34
|
type: :runtime
|
|
35
35
|
prerelease: false
|
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
|
37
37
|
requirements:
|
|
38
|
-
- -
|
|
38
|
+
- - ~>
|
|
39
39
|
- !ruby/object:Gem::Version
|
|
40
|
-
version: 1.0
|
|
40
|
+
version: '1.0'
|
|
41
41
|
- !ruby/object:Gem::Dependency
|
|
42
42
|
name: json
|
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
|
44
44
|
requirements:
|
|
45
45
|
- - ~>
|
|
46
46
|
- !ruby/object:Gem::Version
|
|
47
|
-
version: 1.8
|
|
47
|
+
version: '1.8'
|
|
48
48
|
type: :runtime
|
|
49
49
|
prerelease: false
|
|
50
50
|
version_requirements: !ruby/object:Gem::Requirement
|
|
51
51
|
requirements:
|
|
52
52
|
- - ~>
|
|
53
53
|
- !ruby/object:Gem::Version
|
|
54
|
-
version: 1.8
|
|
54
|
+
version: '1.8'
|
|
55
55
|
- !ruby/object:Gem::Dependency
|
|
56
56
|
name: bundler
|
|
57
57
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -70,16 +70,16 @@ dependencies:
|
|
|
70
70
|
name: rake
|
|
71
71
|
requirement: !ruby/object:Gem::Requirement
|
|
72
72
|
requirements:
|
|
73
|
-
- -
|
|
73
|
+
- - ~>
|
|
74
74
|
- !ruby/object:Gem::Version
|
|
75
|
-
version: '
|
|
75
|
+
version: '10.3'
|
|
76
76
|
type: :development
|
|
77
77
|
prerelease: false
|
|
78
78
|
version_requirements: !ruby/object:Gem::Requirement
|
|
79
79
|
requirements:
|
|
80
|
-
- -
|
|
80
|
+
- - ~>
|
|
81
81
|
- !ruby/object:Gem::Version
|
|
82
|
-
version: '
|
|
82
|
+
version: '10.3'
|
|
83
83
|
description: Handles configuration, index creation, quality of life, etc, of Elastic
|
|
84
84
|
Search in Ruby
|
|
85
85
|
email:
|