solr_wrapper 0.12.1 → 0.13.0

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,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: e2b6e62bcacc07ce12d539a363e03a8ba2085182
4
- data.tar.gz: cd34f5d47c88c8ad1b2c17aaab715399b942bcdc
3
+ metadata.gz: 46083a390cb490449cea481a9ea8b3e994d0ad5f
4
+ data.tar.gz: be741be5a4f756ed77ea3a689dc7b74daa8fdedc
5
5
  SHA512:
6
- metadata.gz: 27633dca7e0813c4cc0f3b2ffdc4669af52d927f12039be3ecc0431445e91166d1f2552e7c8829f8fe0b5efab6d59e23d95168f1124e16321ffb41e0bee40cc8
7
- data.tar.gz: 7a3ebf96abce2e38db1af4f0612e22e4364797229f750866fbbc714e0f5771d790bee8e89660e85e0f4fe00939b9670c86f10edf3e653c1f62ae6499e2577187
6
+ metadata.gz: 278a2fbd55ade0e57220c315a82d7dc403583821e6692393b41edea331e9aafe7d48a8e9847fa76cc87911aa9c41adf79241a5572dea5ac49829b6cca31d5f9f
7
+ data.tar.gz: 3de884dae0e77ca16d8eab23a45b6e159282e87ad3a8c4a373e1a5c376abbf68d370f031acce31c39c40e56734e2326ece54ae4c75cc6d1e8565b92ef194b7cc
data/lib/solr_wrapper.rb CHANGED
@@ -4,10 +4,11 @@ require 'solr_wrapper/settings'
4
4
  require 'solr_wrapper/md5'
5
5
  require 'solr_wrapper/downloader'
6
6
  require 'solr_wrapper/instance'
7
+ require 'solr_wrapper/client'
7
8
 
8
9
  module SolrWrapper
9
10
  def self.default_solr_version
10
- '6.0.1'
11
+ '6.1.0'
11
12
  end
12
13
 
13
14
  def self.default_solr_port
@@ -0,0 +1,36 @@
1
+ require 'faraday'
2
+ require 'json'
3
+
4
+ module SolrWrapper
5
+ # Solr REST API client to get status information
6
+ class Client
7
+ attr_reader :url
8
+
9
+ def initialize(url)
10
+ @url = url
11
+ end
12
+
13
+ # Check if a core or collection exists
14
+ def exists?(core_or_collection_name)
15
+ collection?(core_or_collection_name) || core?(core_or_collection_name)
16
+ end
17
+
18
+ private
19
+
20
+ def collection?(name)
21
+ response = conn.get('admin/collections?action=LIST&wt=json')
22
+ data = JSON.parse(response.body)
23
+ return if data['error'] && data['error']['msg'] == 'Solr instance is not running in SolrCloud mode.'
24
+ data['collections'].include? name
25
+ end
26
+
27
+ def core?(name)
28
+ response = conn.get('admin/cores?action=STATUS&wt=json&core=' + name)
29
+ !JSON.parse(response.body)['status'][name].empty?
30
+ end
31
+
32
+ def conn
33
+ @conn ||= Faraday.new(url: url)
34
+ end
35
+ end
36
+ end
@@ -147,6 +147,10 @@ module SolrWrapper
147
147
  create_options[:c] = options[:name] if options[:name]
148
148
  create_options[:n] = options[:config_name] if options[:config_name]
149
149
  create_options[:d] = options[:dir] if options[:dir]
150
+
151
+ # short-circuit if we're using persisted data with an existing core/collection
152
+ return if options[:persist] && create_options[:c] && client.exists?(create_options[:c])
153
+
150
154
  exec("create", create_options)
151
155
 
152
156
  options[:name]
@@ -381,6 +385,10 @@ module SolrWrapper
381
385
  "#{config.zookeeper_host}:#{config.zookeeper_port}" if config.cloud
382
386
  end
383
387
 
388
+ def client
389
+ SolrWrapper::Client.new(url)
390
+ end
391
+
384
392
  def raise_error_unless_extracted
385
393
  raise RuntimeError, "there is no solr instance at #{config.instance_dir}. Run SolrWrapper.extract first." unless extracted?
386
394
  end
@@ -1,4 +1,5 @@
1
1
  require 'delegate'
2
+ require 'faraday'
2
3
 
3
4
  module SolrWrapper
4
5
  # Configuraton that comes from static and dynamic sources.
@@ -108,15 +109,26 @@ module SolrWrapper
108
109
  @download_dir
109
110
  end
110
111
 
111
-
112
112
  def default_download_url
113
113
  @default_url ||= begin
114
114
  json = open(static_config.mirror_url).read
115
115
  doc = JSON.parse(json)
116
- doc['preferred'] + doc['path_info']
116
+ url = doc['preferred'] + doc['path_info']
117
+
118
+ response = Faraday.head(url)
119
+
120
+ if response.success?
121
+ url
122
+ else
123
+ archive_download_url
124
+ end
117
125
  end
118
- rescue SocketError
119
- "http://www.us.apache.org/dist/lucene/solr/#{static_config.version}/solr-#{static_config.version}.zip"
126
+ rescue SocketError, Faraday::Error
127
+ archive_download_url
128
+ end
129
+
130
+ def archive_download_url
131
+ "http://archive.apache.org/dist/lucene/solr/#{static_config.version}/solr-#{static_config.version}.zip"
120
132
  end
121
133
 
122
134
  def random_open_port
@@ -1,3 +1,3 @@
1
1
  module SolrWrapper
2
- VERSION = '0.12.1'
2
+ VERSION = '0.13.0'
3
3
  end
data/solr_wrapper.gemspec CHANGED
@@ -18,6 +18,7 @@ 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 "faraday"
21
22
  spec.add_dependency "rubyzip"
22
23
  spec.add_dependency "ruby-progressbar"
23
24
 
@@ -27,4 +28,5 @@ Gem::Specification.new do |spec|
27
28
  spec.add_development_dependency "rspec"
28
29
  spec.add_development_dependency "simple_solr_client"
29
30
  spec.add_development_dependency "coveralls"
31
+ spec.add_development_dependency "fakeweb"
30
32
  end
@@ -0,0 +1,25 @@
1
+ require 'spec_helper'
2
+
3
+ describe SolrWrapper::Client do
4
+ subject { described_class.new('http://localhost:8983/solr/') }
5
+
6
+ describe '#exists?' do
7
+ it 'checks if a solrcloud collection exists' do
8
+ FakeWeb.register_uri(:get, 'http://localhost:8983/solr/admin/collections?action=LIST&wt=json', body: '{ "collections": ["x", "y", "z"]}')
9
+ FakeWeb.register_uri(:get, 'http://localhost:8983/solr/admin/cores?action=STATUS&wt=json&core=a', body: '{ "status": { "a": {} } }')
10
+
11
+ expect(subject.exists?('x')).to eq true
12
+ expect(subject.exists?('a')).to eq false
13
+ end
14
+
15
+ it 'checks if a solr core exists' do
16
+ FakeWeb.register_uri(:get, 'http://localhost:8983/solr/admin/collections?action=LIST&wt=json', body: '{ "error": { "msg": "Solr instance is not running in SolrCloud mode."} }')
17
+
18
+ FakeWeb.register_uri(:get, 'http://localhost:8983/solr/admin/cores?action=STATUS&wt=json&core=x', body: '{ "status": { "x": { "name": "x" } } }')
19
+ FakeWeb.register_uri(:get, 'http://localhost:8983/solr/admin/cores?action=STATUS&wt=json&core=a', body: '{ "status": { "a": {} } }')
20
+
21
+ expect(subject.exists?('x')).to eq true
22
+ expect(subject.exists?('a')).to eq false
23
+ end
24
+ end
25
+ end
@@ -42,6 +42,35 @@ describe SolrWrapper::Instance do
42
42
  expect(solr_instance).not_to receive(:delete)
43
43
  solr_instance.with_collection(name: 'project-development', dir: 'solr/config/', persist: true) {}
44
44
  end
45
+
46
+ describe 'single solr node' do
47
+ it 'allows persistent collection on restart' do
48
+ subject.wrap do |solr|
49
+ solr.with_collection(name: 'solr-node-persistent-core', dir: File.join(FIXTURES_DIR, 'basic_configs'), persist: true) {}
50
+ end
51
+
52
+ subject.wrap do |solr|
53
+ solr.with_collection(name: 'solr-node-persistent-core', dir: File.join(FIXTURES_DIR, 'basic_configs'), persist: true) {}
54
+ solr.delete 'solr-node-persistent-core'
55
+ end
56
+ end
57
+ end
58
+
59
+ describe 'solr cloud' do
60
+ let(:options) { { cloud: true } }
61
+
62
+ it 'allows persistent collection on restart' do
63
+ subject.wrap do |solr|
64
+ config_name = solr.upconfig dir: File.join(FIXTURES_DIR, 'basic_configs')
65
+ solr.with_collection(name: 'solr-cloud-persistent-collection', config_name: config_name, persist: true) {}
66
+ end
67
+
68
+ subject.wrap do |solr|
69
+ solr.with_collection(name: 'solr-cloud-persistent-collection', persist: true) {}
70
+ solr.delete 'solr-cloud-persistent-collection'
71
+ end
72
+ end
73
+ end
45
74
  end
46
75
  end
47
76
 
@@ -123,7 +152,7 @@ describe SolrWrapper::Instance do
123
152
 
124
153
  describe "#version" do
125
154
  subject { solr_instance.version }
126
- it { is_expected.to eq '6.0.1' }
155
+ it { is_expected.to eq '6.1.0' }
127
156
  end
128
157
 
129
158
  describe "#md5" do
data/spec/spec_helper.rb CHANGED
@@ -5,6 +5,7 @@ require 'solr_wrapper'
5
5
  require 'simple_solr_client'
6
6
 
7
7
  require 'rspec'
8
+ require 'fakeweb'
8
9
 
9
10
  FIXTURES_DIR = File.expand_path("fixtures", File.dirname(__FILE__))
10
11
 
metadata CHANGED
@@ -1,15 +1,29 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: solr_wrapper
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.12.1
4
+ version: 0.13.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Chris Beer
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2016-05-31 00:00:00.000000000 Z
11
+ date: 2016-06-17 00:00:00.000000000 Z
12
12
  dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: faraday
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: '0'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ">="
25
+ - !ruby/object:Gem::Version
26
+ version: '0'
13
27
  - !ruby/object:Gem::Dependency
14
28
  name: rubyzip
15
29
  requirement: !ruby/object:Gem::Requirement
@@ -108,6 +122,20 @@ dependencies:
108
122
  - - ">="
109
123
  - !ruby/object:Gem::Version
110
124
  version: '0'
125
+ - !ruby/object:Gem::Dependency
126
+ name: fakeweb
127
+ requirement: !ruby/object:Gem::Requirement
128
+ requirements:
129
+ - - ">="
130
+ - !ruby/object:Gem::Version
131
+ version: '0'
132
+ type: :development
133
+ prerelease: false
134
+ version_requirements: !ruby/object:Gem::Requirement
135
+ requirements:
136
+ - - ">="
137
+ - !ruby/object:Gem::Version
138
+ version: '0'
111
139
  description:
112
140
  email:
113
141
  - chris@cbeer.info
@@ -129,6 +157,7 @@ files:
129
157
  - coveralls.yml
130
158
  - exe/solr_wrapper
131
159
  - lib/solr_wrapper.rb
160
+ - lib/solr_wrapper/client.rb
132
161
  - lib/solr_wrapper/configuration.rb
133
162
  - lib/solr_wrapper/downloader.rb
134
163
  - lib/solr_wrapper/instance.rb
@@ -147,6 +176,7 @@ files:
147
176
  - spec/fixtures/basic_configs/stopwords.txt
148
177
  - spec/fixtures/basic_configs/synonyms.txt
149
178
  - spec/fixtures/sample_config.yml
179
+ - spec/lib/solr_wrapper/client_spec.rb
150
180
  - spec/lib/solr_wrapper/configuration_spec.rb
151
181
  - spec/lib/solr_wrapper/instance_spec.rb
152
182
  - spec/lib/solr_wrapper_spec.rb
@@ -171,7 +201,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
171
201
  version: '0'
172
202
  requirements: []
173
203
  rubyforge_project:
174
- rubygems_version: 2.6.4
204
+ rubygems_version: 2.5.1
175
205
  signing_key:
176
206
  specification_version: 4
177
207
  summary: Solr 5 service wrapper
@@ -185,7 +215,9 @@ test_files:
185
215
  - spec/fixtures/basic_configs/stopwords.txt
186
216
  - spec/fixtures/basic_configs/synonyms.txt
187
217
  - spec/fixtures/sample_config.yml
218
+ - spec/lib/solr_wrapper/client_spec.rb
188
219
  - spec/lib/solr_wrapper/configuration_spec.rb
189
220
  - spec/lib/solr_wrapper/instance_spec.rb
190
221
  - spec/lib/solr_wrapper_spec.rb
191
222
  - spec/spec_helper.rb
223
+ has_rdoc: