active-fedora 8.5.0 → 8.6.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +5 -5
- data/lib/active_fedora/indexing.rb +8 -1
- data/lib/active_fedora/solr_service.rb +13 -10
- data/lib/active_fedora/version.rb +1 -1
- data/spec/unit/base_spec.rb +9 -6
- data/spec/unit/solr_service_spec.rb +34 -12
- metadata +3 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: fb6990ade9b80f8791ad5f0198253f5a528cefd3d95b464bb1f3e0d4411ff5fc
|
4
|
+
data.tar.gz: 063af609fdfe2ccc6f5f01fe59aa3ee4861267a3ced7916b63ab0d912ef5e757
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 97492f688b577f381a4d265c761943f11149d45ab14d73d035d823467320d59c7e24caa8f7a43b52a249e5181a64c2c9d7fab63a50700c885e79e374badf2cb9
|
7
|
+
data.tar.gz: 8d5c82996f6d07470b268fe0e6afa26112c0c49694b621f9300ec6b6bdd3cfa8e5271ac17e882884238e4fab7acaaf1e406a56a25bf795261bd06684c1f7b4d2
|
@@ -20,7 +20,7 @@ module ActiveFedora
|
|
20
20
|
Solrizer.set_field(solr_doc, 'system_create', c_time, :stored_sortable)
|
21
21
|
Solrizer.set_field(solr_doc, 'system_modified', m_time, :stored_sortable)
|
22
22
|
Solrizer.set_field(solr_doc, 'object_state', state, :stored_sortable)
|
23
|
-
Solrizer.set_field(solr_doc, 'active_fedora_model',
|
23
|
+
Solrizer.set_field(solr_doc, 'active_fedora_model', has_model, :stored_sortable)
|
24
24
|
solr_doc.merge!(SOLR_DOCUMENT_ID.to_sym => pid)
|
25
25
|
solrize_profile(solr_doc)
|
26
26
|
end
|
@@ -73,6 +73,13 @@ module ActiveFedora
|
|
73
73
|
end
|
74
74
|
end
|
75
75
|
|
76
|
+
private
|
77
|
+
|
78
|
+
# Override this method if you want to represent the class in a different way
|
79
|
+
def has_model
|
80
|
+
self.class.inspect
|
81
|
+
end
|
82
|
+
|
76
83
|
|
77
84
|
module ClassMethods
|
78
85
|
# This method can be used instead of ActiveFedora::Model::ClassMethods.find.
|
@@ -1,8 +1,8 @@
|
|
1
1
|
require 'rsolr'
|
2
2
|
|
3
3
|
module ActiveFedora
|
4
|
-
class SolrService
|
5
|
-
|
4
|
+
class SolrService
|
5
|
+
|
6
6
|
attr_reader :conn
|
7
7
|
|
8
8
|
def initialize(host, args)
|
@@ -11,7 +11,7 @@ module ActiveFedora
|
|
11
11
|
args.merge!(:url=>host)
|
12
12
|
@conn = RSolr.connect args
|
13
13
|
end
|
14
|
-
|
14
|
+
|
15
15
|
class << self
|
16
16
|
def register(host=nil, args={})
|
17
17
|
Thread.current[:solr_service] = new(host, args)
|
@@ -23,7 +23,7 @@ module ActiveFedora
|
|
23
23
|
|
24
24
|
def instance
|
25
25
|
# Register Solr
|
26
|
-
|
26
|
+
|
27
27
|
unless Thread.current[:solr_service]
|
28
28
|
register(ActiveFedora.solr_config[:url])
|
29
29
|
end
|
@@ -39,7 +39,7 @@ module ActiveFedora
|
|
39
39
|
end
|
40
40
|
end
|
41
41
|
end
|
42
|
-
|
42
|
+
|
43
43
|
def reify_solr_results(solr_results, opts = {})
|
44
44
|
solr_results.collect {|hit| reify_solr_result(hit, opts)}
|
45
45
|
end
|
@@ -57,7 +57,10 @@ module ActiveFedora
|
|
57
57
|
def class_from_solr_document(hit, opts = {})
|
58
58
|
#Set the default starting point to the class specified, if available.
|
59
59
|
best_model_match = Model.from_class_uri(opts[:class]) unless opts[:class].nil?
|
60
|
-
hit
|
60
|
+
model = hit.fetch(HAS_MODEL_SOLR_FIELD) do
|
61
|
+
raise "Solr document (id: #{hit['id']}) is missing required #{HAS_MODEL_SOLR_FIELD} field."
|
62
|
+
end
|
63
|
+
model.each do |value|
|
61
64
|
|
62
65
|
model_value = Model.from_class_uri(value)
|
63
66
|
|
@@ -75,7 +78,7 @@ module ActiveFedora
|
|
75
78
|
ActiveFedora::Base.logger.warn "Could not find a model for #{hit["id"]}, defaulting to ActiveFedora::Base" unless best_model_match if ActiveFedora::Base.logger
|
76
79
|
best_model_match || ActiveFedora::Base
|
77
80
|
end
|
78
|
-
|
81
|
+
|
79
82
|
# Construct a solr query for a list of pids
|
80
83
|
# This is used to get a solr response based on the list of pids in an object's RELS-EXT relationhsips
|
81
84
|
# If the pid_array is empty, defaults to a query of "id:NEVER_USE_THIS_ID", which will return an empty solr response
|
@@ -96,7 +99,7 @@ module ActiveFedora
|
|
96
99
|
def solr_name(*args)
|
97
100
|
Solrizer.default_field_mapper.solr_name(*args)
|
98
101
|
end
|
99
|
-
|
102
|
+
|
100
103
|
# Create a query with a clause for each key, value
|
101
104
|
# @param [Hash, Array<Array<String>>] args key is the predicate, value is the target_uri
|
102
105
|
# @param [String] join_with ('AND') the value we're joining the clauses with
|
@@ -118,7 +121,7 @@ module ActiveFedora
|
|
118
121
|
end
|
119
122
|
|
120
123
|
# Get the count of records that match the query
|
121
|
-
# @param [String] query a solr query
|
124
|
+
# @param [String] query a solr query
|
122
125
|
# @param [Hash] args arguments to pass through to `args' param of SolrService.query (note that :rows will be overwritten to 0)
|
123
126
|
# @return [Integer] number of records matching
|
124
127
|
def count(query, args={})
|
@@ -127,7 +130,7 @@ module ActiveFedora
|
|
127
130
|
end
|
128
131
|
|
129
132
|
# @param [Hash] doc the document to index
|
130
|
-
# @param [Hash] params
|
133
|
+
# @param [Hash] params
|
131
134
|
# :commit => commits immediately
|
132
135
|
# :softCommit => commit to memory, but don't flush to disk
|
133
136
|
def add(doc, params = {})
|
data/spec/unit/base_spec.rb
CHANGED
@@ -1,5 +1,5 @@
|
|
1
1
|
require 'spec_helper'
|
2
|
-
@@last_pid = 0
|
2
|
+
@@last_pid = 0
|
3
3
|
|
4
4
|
describe ActiveFedora::Base do
|
5
5
|
it_behaves_like "An ActiveModel"
|
@@ -128,7 +128,7 @@ describe ActiveFedora::Base do
|
|
128
128
|
end
|
129
129
|
has_metadata :type=>ActiveFedora::SimpleDatastream, :name=>"withText2", :label=>"withLabel", :autocreate => true do |m|
|
130
130
|
m.field "fubar", :text
|
131
|
-
end
|
131
|
+
end
|
132
132
|
has_attributes :fubar, datastream: 'withText', multiple: true
|
133
133
|
has_attributes :swank, datastream: 'someData', multiple: true
|
134
134
|
end
|
@@ -451,8 +451,12 @@ describe ActiveFedora::Base do
|
|
451
451
|
end
|
452
452
|
end
|
453
453
|
|
454
|
+
describe '#has_model' do
|
455
|
+
subject { FooHistory.new.send(:has_model) }
|
456
|
+
it { is_expected.to eq 'FooHistory' }
|
457
|
+
end
|
454
458
|
|
455
|
-
describe
|
459
|
+
describe '#to_solr' do
|
456
460
|
it "should provide .to_solr" do
|
457
461
|
expect(@test_object).to respond_to(:to_solr)
|
458
462
|
end
|
@@ -478,11 +482,10 @@ describe ActiveFedora::Base do
|
|
478
482
|
expect(solr_doc[ActiveFedora::SolrService.solr_name("has_part", :symbol)]).to be_nil
|
479
483
|
end
|
480
484
|
|
481
|
-
it "
|
485
|
+
it "adds has_model as the :active_fedora_model" do
|
482
486
|
stub_get(@this_pid)
|
483
487
|
stub_get_content(@this_pid, ['RELS-EXT', 'someData', 'withText2', 'withText'])
|
484
|
-
|
485
|
-
solr_doc = @test_history.to_solr
|
488
|
+
solr_doc = FooHistory.new.to_solr
|
486
489
|
expect(solr_doc[ActiveFedora::SolrService.solr_name("active_fedora_model", :stored_sortable)]).to eql("FooHistory")
|
487
490
|
end
|
488
491
|
|
@@ -4,11 +4,11 @@ describe ActiveFedora::SolrService do
|
|
4
4
|
before do
|
5
5
|
Thread.current[:solr_service]=nil
|
6
6
|
end
|
7
|
-
|
7
|
+
|
8
8
|
after(:all) do
|
9
9
|
ActiveFedora::SolrService.register(ActiveFedora.solr_config[:url])
|
10
10
|
end
|
11
|
-
|
11
|
+
|
12
12
|
it "should take a narg constructor and configure for localhost" do
|
13
13
|
expect(RSolr).to receive(:connect).with(:read_timeout => 120, :open_timeout => 120, :url => 'http://localhost:8080/solr')
|
14
14
|
ActiveFedora::SolrService.register
|
@@ -97,7 +97,7 @@ describe ActiveFedora::SolrService do
|
|
97
97
|
expect(ActiveFedora::SolrService.raw_query('id', "my:_PID1_")).to eq '_query_:"{!raw f=id}my:_PID1_"'
|
98
98
|
end
|
99
99
|
end
|
100
|
-
|
100
|
+
|
101
101
|
describe '#construct_query_for_pids' do
|
102
102
|
it "should generate a useable solr query from an array of Fedora pids" do
|
103
103
|
expect(ActiveFedora::SolrService.construct_query_for_pids(["my:_PID1_", "my:_PID2_", "my:_PID3_"])).to eq('_query_:"{!raw f=id}my:_PID1_" OR _query_:"{!raw f=id}my:_PID2_" OR _query_:"{!raw f=id}my:_PID3_"')
|
@@ -105,12 +105,12 @@ describe ActiveFedora::SolrService do
|
|
105
105
|
end
|
106
106
|
it "should return a valid solr query even if given an empty array as input" do
|
107
107
|
expect(ActiveFedora::SolrService.construct_query_for_pids([""])).to eq("id:NEVER_USE_THIS_ID")
|
108
|
-
|
108
|
+
|
109
109
|
end
|
110
110
|
end
|
111
|
-
|
111
|
+
|
112
112
|
describe ".query" do
|
113
|
-
it "should call solr" do
|
113
|
+
it "should call solr" do
|
114
114
|
mock_conn = double("Connection")
|
115
115
|
stub_result = double("Result")
|
116
116
|
expect(mock_conn).to receive(:get).with('select', :params=>{:q=>'querytext', :qt=>'standard'}).and_return(stub_result)
|
@@ -119,23 +119,23 @@ describe ActiveFedora::SolrService do
|
|
119
119
|
end
|
120
120
|
end
|
121
121
|
describe ".count" do
|
122
|
-
it "should return a count of matching records" do
|
122
|
+
it "should return a count of matching records" do
|
123
123
|
mock_conn = double("Connection")
|
124
124
|
stub_result = {'response' => {'numFound'=>'7'}}
|
125
125
|
expect(mock_conn).to receive(:get).with('select', :params=>{:rows=>0, :q=>'querytext', :qt=>'standard'}).and_return(stub_result)
|
126
126
|
allow(ActiveFedora::SolrService).to receive_messages(:instance =>double("instance", :conn=>mock_conn))
|
127
|
-
expect(ActiveFedora::SolrService.count('querytext')).to eq(7)
|
127
|
+
expect(ActiveFedora::SolrService.count('querytext')).to eq(7)
|
128
128
|
end
|
129
129
|
it "should accept query args" do
|
130
130
|
mock_conn = double("Connection")
|
131
131
|
stub_result = {'response' => {'numFound'=>'7'}}
|
132
132
|
expect(mock_conn).to receive(:get).with('select', :params=>{:rows=>0, :q=>'querytext', :qt=>'standard', :fq=>'filter'}).and_return(stub_result)
|
133
133
|
allow(ActiveFedora::SolrService).to receive_messages(:instance =>double("instance", :conn=>mock_conn))
|
134
|
-
expect(ActiveFedora::SolrService.count('querytext', :fq=>'filter', :rows=>10)).to eq(7)
|
134
|
+
expect(ActiveFedora::SolrService.count('querytext', :fq=>'filter', :rows=>10)).to eq(7)
|
135
135
|
end
|
136
136
|
end
|
137
137
|
describe ".add" do
|
138
|
-
it "should call solr" do
|
138
|
+
it "should call solr" do
|
139
139
|
mock_conn = double("Connection")
|
140
140
|
doc = {'id' => '1234'}
|
141
141
|
expect(mock_conn).to receive(:add).with(doc, {:params=>{}})
|
@@ -144,7 +144,7 @@ describe ActiveFedora::SolrService do
|
|
144
144
|
end
|
145
145
|
end
|
146
146
|
describe ".commit" do
|
147
|
-
it "should call solr" do
|
147
|
+
it "should call solr" do
|
148
148
|
mock_conn = double("Connection")
|
149
149
|
doc = {'id' => '1234'}
|
150
150
|
expect(mock_conn).to receive(:commit)
|
@@ -152,5 +152,27 @@ describe ActiveFedora::SolrService do
|
|
152
152
|
ActiveFedora::SolrService.commit()
|
153
153
|
end
|
154
154
|
end
|
155
|
-
|
155
|
+
|
156
|
+
describe '.class_from_solr_document' do
|
157
|
+
subject { described_class.class_from_solr_document(document) }
|
158
|
+
|
159
|
+
context 'when the document does not have has_model_ssim' do
|
160
|
+
let (:document) do
|
161
|
+
{ "id" => "my:_PID1_" }
|
162
|
+
end
|
163
|
+
|
164
|
+
it 'raises a helpful error' do
|
165
|
+
expect { subject }.to raise_error "Solr document (id: my:_PID1_) is missing required has_model_ssim field."
|
166
|
+
end
|
167
|
+
end
|
168
|
+
|
169
|
+
context 'when the document has has_model_ssim' do
|
170
|
+
let (:document) do
|
171
|
+
{ "id" => "my:_PID1_", ActiveFedora::SolrService.solr_name("has_model", :symbol) => ["info:fedora/afmodel:AudioRecord"] }
|
172
|
+
end
|
173
|
+
|
174
|
+
it { is_expected.to eq AudioRecord }
|
175
|
+
|
176
|
+
end
|
177
|
+
end
|
156
178
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: active-fedora
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 8.
|
4
|
+
version: 8.6.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Matt Zumwalt
|
@@ -10,7 +10,7 @@ authors:
|
|
10
10
|
autorequire:
|
11
11
|
bindir: bin
|
12
12
|
cert_chain: []
|
13
|
-
date: 2018-
|
13
|
+
date: 2018-12-10 00:00:00.000000000 Z
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: rsolr
|
@@ -563,7 +563,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
563
563
|
version: '0'
|
564
564
|
requirements: []
|
565
565
|
rubyforge_project:
|
566
|
-
rubygems_version: 2.6
|
566
|
+
rubygems_version: 2.7.6
|
567
567
|
signing_key:
|
568
568
|
specification_version: 4
|
569
569
|
summary: A convenience libary for manipulating documents in the Fedora Repository.
|