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 CHANGED
@@ -1,15 +1,15 @@
1
1
  ---
2
2
  !binary "U0hBMQ==":
3
3
  metadata.gz: !binary |-
4
- MzlmMDdlZjQ0NjdhZDIwNjhkNDlkM2QzYTdlMmY2ZTJhMjg4YWIxNw==
4
+ MGU3NDk1NDE4OWM5NDYzNjY3ODNhMzc1NTJkOTJhMWVjNWU3OWM5Mg==
5
5
  data.tar.gz: !binary |-
6
- NWQ4M2ZiYTM5MjQ1NDBkYWYzMjM0ZTNmODFlNzcxMWMwNDRlMDAyZA==
6
+ NjBiNzhmMWVjZTRjYzM1NzI4ODViMTg4NWIxYTdmMzViZjNjZjE3NA==
7
7
  SHA512:
8
8
  metadata.gz: !binary |-
9
- ZjRmZDU0NzBiZWU1ZjYzMzg1MGIyOWJjNDU2MzQxZDIzMDIwNzNjYWJhZmFj
10
- NWFlZDdjZTYwNmE4MzI2ZDcwMTIwNWVlNjUyYzMyNDQ5NjY0NTI3NmU0ZmRl
11
- ZjNiOWI3NzhlZjJmZjc0MzUxMjVmN2RlNTg0OTc0ZjE3ZTU4ODU=
9
+ NTk5NDk4NDVjNzM3ZDg1YzU0ZWJlMjk1MmJjYTkwY2Q0NGI1MTE0YTI1MDdk
10
+ YTMxMmE5YzZkY2ZmMzk3NzhlNDFiYmJjZDYyNzQ4ZmZkZmQzNGQ0MDE1ZWQz
11
+ NTI5OTA0YzA1MGUzZjQzZTNmOTFkOWU0MzdmMGRmODI1ZGQ0MDg=
12
12
  data.tar.gz: !binary |-
13
- MzYzYzY4NmU4ZDcwOWYyMjZkMDNjYmQ4YzJlZWZmNjRmOGU2ZjQwODNmNzk3
14
- MGQxOWM2ZjNmNWJhNTg5MmNmNjVlYWFjOWY0YThhMGNmYjYxZjA0ZWM4MjU2
15
- YWNmZjRhYzVhZDdiM2VkNTU5ZTUxOGI1NTg5ZTgyOTA0MTJhNTQ=
13
+ NDJjMmFkZTAwMTk1ZTcxZDI3OTMyNTYwNzk3ZjUwNGQ2NmEzYmZlNzljNzY4
14
+ MTczM2U0MTc0ODUwZDNjOGY5ZTBhYTE4NGQzNDA1NjQwYmI1MTlmODhkZmU2
15
+ N2MwY2E2N2E0MWJmNWRkZTMwNTk1YTMyNTU5NjBhOTU0NTliNjY=
data/Gemfile CHANGED
@@ -5,5 +5,5 @@ gemspec
5
5
 
6
6
  gem 'rspec', '~> 3.0.0'
7
7
  gem 'debugger', '~> 1.6.8'
8
- gem 'kaminari', '~> 0.16.1', require: false
8
+ gem 'kaminari', require: false
9
9
  gem 'timecop', '~> 0.7.1'
@@ -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 ||= ENV['RAILS_ENV'] || ENV['RACK_ENV'] || 'development'
27
- if defined?(ERB)
28
- yml = YAML.load(ERB.new(File.read("#{config_dir}/waistband.yml")).result)
29
- else
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
- if defined?(ERB)
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']
@@ -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
@@ -1,3 +1,3 @@
1
1
  module Waistband
2
- VERSION = "0.11.3"
2
+ VERSION = "0.12.1"
3
3
  end
@@ -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.0'
22
- spec.add_dependency 'elasticsearch', '>= 1.0.0'
23
- spec.add_dependency 'json', '~> 1.8.0'
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.11.3
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 00:00:00.000000000 Z
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.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.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.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.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.0
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.0
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: '0'
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: '0'
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: