solr_wrapper 0.0.7 → 0.0.8
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 +4 -4
- data/.rubocop.yml +15 -0
- data/.rubocop_hound.yml +1063 -0
- data/.rubocop_todo.yml +0 -0
- data/.travis.yml +1 -1
- data/Gemfile +1 -1
- data/Rakefile +1 -2
- data/lib/solr_wrapper.rb +4 -4
- data/lib/solr_wrapper/instance.rb +74 -46
- data/lib/solr_wrapper/version.rb +2 -2
- data/spec/lib/solr_wrapper/instance_spec.rb +1 -1
- data/spec/lib/solr_wrapper_spec.rb +3 -3
- data/spec/spec_helper.rb +2 -3
- metadata +5 -2
data/.rubocop_todo.yml
ADDED
File without changes
|
data/.travis.yml
CHANGED
data/Gemfile
CHANGED
data/Rakefile
CHANGED
data/lib/solr_wrapper.rb
CHANGED
@@ -3,16 +3,16 @@ require 'solr_wrapper/instance'
|
|
3
3
|
|
4
4
|
module SolrWrapper
|
5
5
|
def self.default_solr_version
|
6
|
-
"5.
|
6
|
+
"5.1.0"
|
7
7
|
end
|
8
8
|
|
9
|
-
def self.default_instance
|
9
|
+
def self.default_instance(options = {})
|
10
10
|
@default_instance ||= SolrWrapper::Instance.new options
|
11
11
|
end
|
12
12
|
|
13
13
|
##
|
14
14
|
# Ensures a Solr service is running before executing the block
|
15
|
-
def self.wrap
|
15
|
+
def self.wrap(options = {}, &block)
|
16
16
|
default_instance(options).wrap &block
|
17
17
|
end
|
18
|
-
end
|
18
|
+
end
|
@@ -21,14 +21,17 @@ module SolrWrapper
|
|
21
21
|
# @option options [String] :instance_dir
|
22
22
|
# @option options [String] :download_path
|
23
23
|
# @option options [String] :md5sum
|
24
|
+
# @option options [String] :solr_xml
|
24
25
|
# @option options [Boolean] :verbose
|
25
26
|
# @option options [Boolean] :managed
|
26
27
|
# @option options [Boolean] :ignore_md5sum
|
27
|
-
|
28
|
+
# @option options [Hash] :solr_options
|
29
|
+
# @option options [Hash] :env
|
30
|
+
def initialize(options = {})
|
28
31
|
@options = options
|
29
32
|
end
|
30
33
|
|
31
|
-
def wrap
|
34
|
+
def wrap(&_block)
|
32
35
|
start
|
33
36
|
yield self
|
34
37
|
ensure
|
@@ -52,7 +55,7 @@ module SolrWrapper
|
|
52
55
|
##
|
53
56
|
# Stop Solr and wait for it to finish exiting
|
54
57
|
def stop
|
55
|
-
if managed?
|
58
|
+
if managed? && started?
|
56
59
|
|
57
60
|
exec('stop', p: port)
|
58
61
|
# Wait for solr to stop
|
@@ -82,18 +85,18 @@ module SolrWrapper
|
|
82
85
|
# @param [Hash] options
|
83
86
|
# @option options [String] :name
|
84
87
|
# @option options [String] :dir
|
85
|
-
def create
|
88
|
+
def create(options = {})
|
86
89
|
options[:name] ||= SecureRandom.hex
|
87
90
|
|
88
91
|
exec("create", c: options[:name], d: options[:dir], p: port)
|
89
92
|
|
90
93
|
options[:name]
|
91
94
|
end
|
92
|
-
|
95
|
+
|
93
96
|
##
|
94
97
|
# Create a new collection in solr
|
95
98
|
# @param [String] name collection name
|
96
|
-
def delete
|
99
|
+
def delete(name, _options = {})
|
97
100
|
exec("delete", c: name, p: port)
|
98
101
|
end
|
99
102
|
|
@@ -102,7 +105,7 @@ module SolrWrapper
|
|
102
105
|
# @param [Hash] options
|
103
106
|
# @option options [String] :name
|
104
107
|
# @option options [String] :dir
|
105
|
-
def with_collection
|
108
|
+
def with_collection(options = {})
|
106
109
|
name = create(options)
|
107
110
|
begin
|
108
111
|
yield name
|
@@ -112,7 +115,7 @@ module SolrWrapper
|
|
112
115
|
end
|
113
116
|
|
114
117
|
##
|
115
|
-
# Get the port this Solr instance is running at
|
118
|
+
# Get the port this Solr instance is running at
|
116
119
|
def port
|
117
120
|
options.fetch(:port, "8983").to_s
|
118
121
|
end
|
@@ -128,9 +131,17 @@ module SolrWrapper
|
|
128
131
|
FileUtils.remove_entry(version_file) if File.exists? version_file
|
129
132
|
end
|
130
133
|
|
134
|
+
##
|
135
|
+
# Get a (likely) URL to the solr instance
|
136
|
+
def url
|
137
|
+
"http://127.0.0.1:#{port}/solr/"
|
138
|
+
end
|
139
|
+
|
131
140
|
protected
|
141
|
+
|
142
|
+
# rubocop:disable Lint/RescueException
|
132
143
|
def extract
|
133
|
-
return solr_dir if File.exists?(solr_binary)
|
144
|
+
return solr_dir if File.exists?(solr_binary) && extracted_version == version
|
134
145
|
|
135
146
|
zip_path = download
|
136
147
|
|
@@ -138,8 +149,8 @@ module SolrWrapper
|
|
138
149
|
Zip::File.open(zip_path) do |zip_file|
|
139
150
|
# Handle entries one by one
|
140
151
|
zip_file.each do |entry|
|
141
|
-
dest_file = File.join(tmp_save_dir,entry.name)
|
142
|
-
FileUtils.remove_entry(dest_file,true)
|
152
|
+
dest_file = File.join(tmp_save_dir, entry.name)
|
153
|
+
FileUtils.remove_entry(dest_file, true)
|
143
154
|
entry.extract(dest_file)
|
144
155
|
end
|
145
156
|
end
|
@@ -148,34 +159,37 @@ module SolrWrapper
|
|
148
159
|
abort "Unable to unzip #{zip_path} into #{tmp_save_dir}: #{e.message}"
|
149
160
|
end
|
150
161
|
|
151
|
-
begin
|
152
|
-
FileUtils.remove_dir(solr_dir,true)
|
153
|
-
FileUtils.cp_r File.join(tmp_save_dir, File.basename(
|
162
|
+
begin
|
163
|
+
FileUtils.remove_dir(solr_dir, true)
|
164
|
+
FileUtils.cp_r File.join(tmp_save_dir, File.basename(download_url, ".zip")), solr_dir
|
154
165
|
self.extracted_version = version
|
155
166
|
FileUtils.chmod 0755, solr_binary
|
156
167
|
rescue Exception => e
|
157
168
|
abort "Unable to copy #{tmp_save_dir} to #{solr_dir}: #{e.message}"
|
158
169
|
end
|
159
170
|
|
171
|
+
configure
|
172
|
+
|
160
173
|
solr_dir
|
161
174
|
ensure
|
162
175
|
FileUtils.remove_entry tmp_save_dir if File.exists? tmp_save_dir
|
163
176
|
end
|
177
|
+
# rubocop:enable Lint/RescueException
|
164
178
|
|
165
179
|
def download
|
166
|
-
unless File.exists?
|
167
|
-
fetch_with_progressbar
|
180
|
+
unless File.exists?(download_path) && validate?(download_path)
|
181
|
+
fetch_with_progressbar download_url, download_path
|
168
182
|
validate! download_path
|
169
183
|
end
|
170
184
|
|
171
185
|
download_path
|
172
186
|
end
|
173
187
|
|
174
|
-
def validate?
|
188
|
+
def validate?(file)
|
175
189
|
Digest::MD5.file(file).hexdigest == expected_md5sum
|
176
190
|
end
|
177
191
|
|
178
|
-
def validate!
|
192
|
+
def validate!(file)
|
179
193
|
unless validate? file
|
180
194
|
raise "MD5 mismatch" unless options[:ignore_md5sum]
|
181
195
|
end
|
@@ -184,18 +198,19 @@ module SolrWrapper
|
|
184
198
|
##
|
185
199
|
# Run a bin/solr command
|
186
200
|
# @see https://github.com/apache/lucene-solr/blob/trunk/solr/bin/solr
|
187
|
-
def exec
|
201
|
+
def exec(cmd, options = {})
|
188
202
|
output = !!options.delete(:output)
|
189
|
-
args = [solr_binary, cmd] + options.map { |k,v| ["-#{k}", "#{v}"] }.flatten
|
203
|
+
args = [solr_binary, cmd] + solr_options.merge(options).map { |k, v| ["-#{k}", "#{v}"] }.flatten
|
190
204
|
|
191
205
|
if IO.respond_to? :popen4
|
192
206
|
# JRuby
|
193
|
-
|
194
|
-
|
207
|
+
env_str = env.map { |k, v| "#{Shellwords.escape(k)}=#{Shellwords.escape(v)}" }.join(" ")
|
208
|
+
_, input, output, error = IO.popen4(env_str + " " + args.join(" "))
|
209
|
+
|
195
210
|
stringio = StringIO.new
|
196
|
-
if verbose?
|
197
|
-
IO.copy_stream(output
|
198
|
-
IO.copy_stream(error
|
211
|
+
if verbose? && !output
|
212
|
+
IO.copy_stream(output, $stderr)
|
213
|
+
IO.copy_stream(error, $stderr)
|
199
214
|
else
|
200
215
|
IO.copy_stream(output, stringio)
|
201
216
|
IO.copy_stream(error, stringio)
|
@@ -203,7 +218,7 @@ module SolrWrapper
|
|
203
218
|
input.close
|
204
219
|
output.close
|
205
220
|
error.close
|
206
|
-
|
221
|
+
|
207
222
|
stringio.rewind
|
208
223
|
|
209
224
|
if $? != 0
|
@@ -212,10 +227,10 @@ module SolrWrapper
|
|
212
227
|
|
213
228
|
stringio
|
214
229
|
else
|
215
|
-
IO.popen(args + [err: [:child, :out]]) do |io|
|
230
|
+
IO.popen(env, args + [err: [:child, :out]]) do |io|
|
216
231
|
stringio = StringIO.new
|
217
|
-
if verbose?
|
218
|
-
IO.copy_stream(io
|
232
|
+
if verbose? && !output
|
233
|
+
IO.copy_stream(io, $stderr)
|
219
234
|
else
|
220
235
|
IO.copy_stream(io, stringio)
|
221
236
|
end
|
@@ -232,12 +247,13 @@ module SolrWrapper
|
|
232
247
|
end
|
233
248
|
end
|
234
249
|
|
235
|
-
private
|
236
|
-
|
237
|
-
|
250
|
+
private
|
251
|
+
|
252
|
+
def download_url
|
253
|
+
@download_url ||= options.fetch(:url, default_download_url)
|
238
254
|
end
|
239
255
|
|
240
|
-
def
|
256
|
+
def default_download_url
|
241
257
|
@default_url ||= begin
|
242
258
|
mirror_url = "http://www.apache.org/dyn/closer.cgi/lucene/solr/#{version}/solr-#{version}.zip?asjson=true"
|
243
259
|
json = open(mirror_url).read
|
@@ -254,20 +270,28 @@ module SolrWrapper
|
|
254
270
|
@version ||= options.fetch(:version, default_solr_version)
|
255
271
|
end
|
256
272
|
|
273
|
+
def solr_options
|
274
|
+
options.fetch(:solr_options, {})
|
275
|
+
end
|
276
|
+
|
277
|
+
def env
|
278
|
+
options.fetch(:env, {})
|
279
|
+
end
|
280
|
+
|
257
281
|
def default_solr_version
|
258
282
|
SolrWrapper.default_solr_version
|
259
283
|
end
|
260
284
|
|
261
285
|
def download_path
|
262
|
-
@download_path ||= options.fetch(:download_path, default_download_path)
|
286
|
+
@download_path ||= options.fetch(:download_path, default_download_path)
|
263
287
|
end
|
264
288
|
|
265
289
|
def default_download_path
|
266
|
-
File.join(Dir.tmpdir, File.basename(
|
290
|
+
File.join(Dir.tmpdir, File.basename(download_url))
|
267
291
|
end
|
268
292
|
|
269
293
|
def solr_dir
|
270
|
-
@solr_dir ||= options.fetch(:instance_dir, File.join(Dir.tmpdir, File.basename(
|
294
|
+
@solr_dir ||= options.fetch(:instance_dir, File.join(Dir.tmpdir, File.basename(download_url, ".zip")))
|
271
295
|
end
|
272
296
|
|
273
297
|
def verbose?
|
@@ -285,7 +309,7 @@ module SolrWrapper
|
|
285
309
|
def expected_md5sum
|
286
310
|
@md5sum ||= options.fetch(:md5sum, open(md5file).read.split(" ").first)
|
287
311
|
end
|
288
|
-
|
312
|
+
|
289
313
|
def solr_binary
|
290
314
|
File.join(solr_dir, "bin", "solr")
|
291
315
|
end
|
@@ -298,17 +322,17 @@ module SolrWrapper
|
|
298
322
|
@tmp_save_dir ||= Dir.mktmpdir
|
299
323
|
end
|
300
324
|
|
301
|
-
def fetch_with_progressbar
|
325
|
+
def fetch_with_progressbar(url, output)
|
302
326
|
pbar = ProgressBar.create(title: File.basename(url), total: nil, format: "%t: |%B| %p%% (%e )")
|
303
|
-
open(url, content_length_proc: lambda
|
327
|
+
open(url, content_length_proc: lambda do|t|
|
304
328
|
if t && 0 < t
|
305
329
|
pbar.total = t
|
306
330
|
end
|
307
|
-
|
308
|
-
|
309
|
-
|
310
|
-
|
311
|
-
IO.copy_stream(io,output)
|
331
|
+
end,
|
332
|
+
progress_proc: lambda do|s|
|
333
|
+
pbar.progress = s
|
334
|
+
end) do |io|
|
335
|
+
IO.copy_stream(io, output)
|
312
336
|
end
|
313
337
|
end
|
314
338
|
|
@@ -324,10 +348,14 @@ module SolrWrapper
|
|
324
348
|
File.read(version_file).strip if File.exists? version_file
|
325
349
|
end
|
326
350
|
|
327
|
-
def extracted_version=
|
351
|
+
def extracted_version=(version)
|
328
352
|
File.open(version_file, "w") do |f|
|
329
353
|
f.puts version
|
330
354
|
end
|
331
355
|
end
|
356
|
+
|
357
|
+
def configure
|
358
|
+
FileUtils.cp options[:solr_xml], File.join(solr_dir, "server", "solr", "solr.xml") if options[:solr_xml]
|
359
|
+
end
|
332
360
|
end
|
333
|
-
end
|
361
|
+
end
|
data/lib/solr_wrapper/version.rb
CHANGED
@@ -1,3 +1,3 @@
|
|
1
1
|
module SolrWrapper
|
2
|
-
VERSION = "0.0.
|
3
|
-
end
|
2
|
+
VERSION = "0.0.8"
|
3
|
+
end
|
@@ -4,12 +4,12 @@ describe SolrWrapper do
|
|
4
4
|
describe ".wrap" do
|
5
5
|
it "should launch solr" do
|
6
6
|
SolrWrapper.wrap do |solr|
|
7
|
-
expect
|
7
|
+
expect do
|
8
8
|
Timeout::timeout(15) do
|
9
9
|
TCPSocket.new('127.0.0.1', solr.port).close
|
10
10
|
end
|
11
|
-
|
11
|
+
end.not_to raise_exception
|
12
12
|
end
|
13
13
|
end
|
14
14
|
end
|
15
|
-
end
|
15
|
+
end
|
data/spec/spec_helper.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: solr_wrapper
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.8
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Chris Beer
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-
|
11
|
+
date: 2015-04-19 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rubyzip
|
@@ -116,6 +116,9 @@ extensions: []
|
|
116
116
|
extra_rdoc_files: []
|
117
117
|
files:
|
118
118
|
- ".gitignore"
|
119
|
+
- ".rubocop.yml"
|
120
|
+
- ".rubocop_hound.yml"
|
121
|
+
- ".rubocop_todo.yml"
|
119
122
|
- ".travis.yml"
|
120
123
|
- Gemfile
|
121
124
|
- LICENSE
|