waistband 0.11.3 → 0.12.1

Sign up to get free protection for your applications and to get access to all the features.
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: