active-fedora 7.0.0.rc2 → 7.0.0.rc3
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/.travis.yml +13 -3
- data/CONTRIBUTORS.md +1 -0
- data/Gemfile +2 -3
- data/active-fedora.gemspec +4 -3
- data/gemfiles/rails3.gemfile +1 -7
- data/gemfiles/rails4.1.gemfile +5 -0
- data/gemfiles/rails4.gemfile +1 -6
- data/lib/active_fedora.rb +6 -6
- data/lib/active_fedora/associations/association_scope.rb +1 -1
- data/lib/active_fedora/base.rb +2 -0
- data/lib/active_fedora/datastream.rb +29 -2
- data/lib/active_fedora/datastream_collections.rb +2 -2
- data/lib/active_fedora/datastream_hash.rb +1 -1
- data/lib/active_fedora/datastreams.rb +4 -23
- data/lib/active_fedora/file_configurator.rb +8 -7
- data/lib/active_fedora/om_datastream.rb +1 -1
- data/lib/active_fedora/rdf.rb +9 -0
- data/lib/active_fedora/rdf/configurable.rb +59 -0
- data/lib/active_fedora/rdf/identifiable.rb +59 -0
- data/lib/active_fedora/rdf/indexing.rb +24 -23
- data/lib/active_fedora/rdf/list.rb +154 -0
- data/lib/active_fedora/{ntriples_rdf_datastream.rb → rdf/ntriples_rdf_datastream.rb} +0 -0
- data/lib/active_fedora/rdf/object_resource.rb +20 -0
- data/lib/active_fedora/rdf/properties.rb +108 -0
- data/lib/active_fedora/rdf/rdf_datastream.rb +113 -0
- data/lib/active_fedora/{rdfxml_rdf_datastream.rb → rdf/rdfxml_rdf_datastream.rb} +0 -0
- data/lib/active_fedora/rdf/repositories.rb +36 -0
- data/lib/active_fedora/rdf/resource.rb +324 -0
- data/lib/active_fedora/rdf/term.rb +188 -0
- data/lib/active_fedora/relation.rb +1 -0
- data/lib/active_fedora/relation/finder_methods.rb +16 -17
- data/lib/active_fedora/relation/merger.rb +1 -1
- data/lib/active_fedora/relation/query_methods.rb +13 -5
- data/lib/active_fedora/reload_on_save.rb +16 -0
- data/lib/active_fedora/rubydora_connection.rb +0 -1
- data/lib/active_fedora/sharding.rb +1 -1
- data/lib/active_fedora/version.rb +1 -1
- data/script/console +10 -11
- data/spec/config_helper.rb +1 -1
- data/spec/fixtures/solr_rdf_descMetadata.nt +1 -1
- data/spec/integration/auditable_spec.rb +1 -1
- data/spec/integration/base_spec.rb +21 -3
- data/spec/integration/complex_rdf_datastream_spec.rb +32 -55
- data/spec/integration/field_to_solr_name_spec.rb +6 -8
- data/spec/integration/has_many_associations_spec.rb +10 -3
- data/spec/integration/load_from_solr_spec.rb +15 -17
- data/spec/integration/ntriples_datastream_spec.rb +19 -23
- data/spec/integration/om_datastream_spec.rb +1 -1
- data/spec/integration/rdf_nested_attributes_spec.rb +51 -70
- data/spec/integration/relation_spec.rb +24 -11
- data/spec/integration/scoped_query_spec.rb +5 -1
- data/spec/samples/hydra-mods_article_datastream.rb +4 -0
- data/spec/samples/hydra-rights_metadata_datastream.rb +5 -0
- data/spec/samples/marpa-dc_datastream.rb +6 -1
- data/spec/samples/special_thing.rb +5 -5
- data/spec/spec_helper.rb +0 -3
- data/spec/support/an_active_model.rb +5 -12
- data/spec/unit/active_fedora_spec.rb +2 -2
- data/spec/unit/attributes_spec.rb +4 -8
- data/spec/unit/base_datastream_management_spec.rb +5 -29
- data/spec/unit/base_spec.rb +4 -0
- data/spec/unit/code_configurator_spec.rb +2 -2
- data/spec/unit/config_spec.rb +2 -2
- data/spec/unit/core_spec.rb +2 -4
- data/spec/unit/datastream_spec.rb +15 -0
- data/spec/unit/datastreams_spec.rb +1 -12
- data/spec/unit/file_configurator_spec.rb +1 -1
- data/spec/unit/ntriples_datastream_spec.rb +52 -57
- data/spec/unit/om_datastream_spec.rb +3 -3
- data/spec/unit/query_spec.rb +3 -4
- data/spec/unit/rdf_configurable_spec.rb +37 -0
- data/spec/unit/rdf_datastream_spec.rb +5 -7
- data/spec/unit/rdf_list_nested_attributes_spec.rb +22 -36
- data/spec/unit/rdf_list_spec.rb +26 -38
- data/spec/unit/rdf_properties_spec.rb +70 -0
- data/spec/unit/rdf_repositories_spec.rb +28 -0
- data/spec/unit/rdf_resource_datastream_spec.rb +287 -0
- data/spec/unit/rdf_resource_spec.rb +341 -0
- data/spec/unit/rdfxml_rdf_datastream_spec.rb +10 -26
- data/spec/unit/reload_on_save_spec.rb +24 -0
- data/spec/unit/solr_service_spec.rb +3 -3
- metadata +45 -16
- data/lib/active_fedora/rdf_datastream.rb +0 -113
- data/lib/active_fedora/rdf_list.rb +0 -162
- data/lib/active_fedora/rdf_node.rb +0 -332
- data/lib/active_fedora/rdf_node/term_proxy.rb +0 -141
- data/lib/active_fedora/rdf_object.rb +0 -24
- data/lib/active_fedora/yaml_adaptor.rb +0 -12
- data/spec/unit/rdf_node_spec.rb +0 -36
@@ -151,9 +151,8 @@ module ActiveFedora
|
|
151
151
|
if where_values.empty?
|
152
152
|
load_from_fedora(pid, cast)
|
153
153
|
else
|
154
|
-
|
155
|
-
|
156
|
-
join(" AND ".freeze)
|
154
|
+
conditions = where_values + [ActiveFedora::SolrService.raw_query(SOLR_DOCUMENT_ID, pid)]
|
155
|
+
query = conditions.join(" AND ".freeze)
|
157
156
|
to_enum(:find_each, query, {}).to_a.first
|
158
157
|
end
|
159
158
|
end
|
@@ -196,18 +195,27 @@ module ActiveFedora
|
|
196
195
|
# Returns a solr query for the supplied conditions
|
197
196
|
# @param[Hash] conditions solr conditions to match
|
198
197
|
def create_query(conditions)
|
199
|
-
|
198
|
+
case conditions
|
199
|
+
when Hash
|
200
|
+
build_query([create_query_from_hash(conditions)])
|
201
|
+
when String
|
202
|
+
build_query(["(#{conditions})"])
|
203
|
+
else
|
204
|
+
build_query(conditions)
|
205
|
+
end
|
200
206
|
end
|
201
207
|
|
202
|
-
def
|
208
|
+
def build_query(conditions)
|
203
209
|
clauses = search_model_clause ? [search_model_clause] : []
|
204
|
-
conditions.
|
205
|
-
clauses << condition_to_clauses(key, value)
|
206
|
-
end
|
210
|
+
clauses += conditions.reject{|c| c.blank?}
|
207
211
|
return "*:*" if clauses.empty?
|
208
212
|
clauses.compact.join(" AND ")
|
209
213
|
end
|
210
214
|
|
215
|
+
def create_query_from_hash(conditions)
|
216
|
+
conditions.map {|key,value| condition_to_clauses(key, value)}.compact.join(" AND ")
|
217
|
+
end
|
218
|
+
|
211
219
|
def condition_to_clauses(key, value)
|
212
220
|
unless value.nil?
|
213
221
|
# if the key is a property name, turn it into a solr field
|
@@ -227,15 +235,6 @@ module ActiveFedora
|
|
227
235
|
end
|
228
236
|
end
|
229
237
|
|
230
|
-
def create_query_from_string(conditions)
|
231
|
-
model_clause = search_model_clause
|
232
|
-
if model_clause
|
233
|
-
conditions ? "#{model_clause} AND (#{conditions})" : model_clause
|
234
|
-
else
|
235
|
-
conditions
|
236
|
-
end
|
237
|
-
end
|
238
|
-
|
239
238
|
# Return the solr clause that queries for this type of class
|
240
239
|
def search_model_clause
|
241
240
|
unless @klass == ActiveFedora::Base
|
@@ -11,7 +11,7 @@ module ActiveFedora
|
|
11
11
|
end
|
12
12
|
|
13
13
|
def where_values
|
14
|
-
@values[:where] ||=
|
14
|
+
@values[:where] ||= []
|
15
15
|
end
|
16
16
|
|
17
17
|
def where_values=(values)
|
@@ -49,12 +49,20 @@ module ActiveFedora
|
|
49
49
|
end
|
50
50
|
|
51
51
|
def where!(values)
|
52
|
-
|
53
|
-
|
52
|
+
self.where_values += build_where(values)
|
53
|
+
self
|
54
|
+
end
|
55
|
+
|
56
|
+
def build_where(values)
|
57
|
+
return [] if values.blank?
|
58
|
+
case values
|
59
|
+
when Hash
|
60
|
+
[create_query_from_hash(values)]
|
61
|
+
when String
|
62
|
+
["(#{values})"]
|
54
63
|
else
|
55
|
-
|
64
|
+
[values]
|
56
65
|
end
|
57
|
-
self
|
58
66
|
end
|
59
67
|
|
60
68
|
# Order the returned records by the field and direction provided
|
@@ -15,7 +15,6 @@ module ActiveFedora
|
|
15
15
|
return unless @connection.nil? or force
|
16
16
|
allowable_options = [:url, :user, :password, :timeout, :open_timeout, :ssl_client_cert, :ssl_client_key, :validateChecksum]
|
17
17
|
client_options = options.reject { |k,v| not allowable_options.include?(k) }
|
18
|
-
#puts "CLIENT OPTS #{client_options.inspect}"
|
19
18
|
@connection = Rubydora.connect client_options
|
20
19
|
|
21
20
|
Rubydora::Transaction.after_rollback do |options|
|
@@ -8,7 +8,7 @@ module ActiveFedora
|
|
8
8
|
end
|
9
9
|
|
10
10
|
module ClassMethods
|
11
|
-
# Uses {shard_index} to find or create the rubydora connection for this pid
|
11
|
+
# Uses {#shard_index} to find or create the rubydora connection for this pid
|
12
12
|
# @param [String] pid the identifier of the object to get the connection for
|
13
13
|
# @return [Rubydora::Repository] The repository that the identifier exists in.
|
14
14
|
def connection_for_pid(pid)
|
data/script/console
CHANGED
@@ -1,15 +1,14 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
2
|
# File: script/console
|
3
3
|
irb = RUBY_PLATFORM =~ /(:?mswin|mingw)/ ? 'irb.bat' : 'irb'
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
exec "#{irb} #{libs} --simple-prompt"
|
4
|
+
|
5
|
+
requires = %w{ irb/completion samples/samples }
|
6
|
+
includes = %w{ lib spec }
|
7
|
+
|
8
|
+
def to_param(flag, items)
|
9
|
+
items.map{|lib| "#{flag} #{lib}"}.join(' ')
|
10
|
+
end
|
11
|
+
|
12
|
+
exec "#{irb} #{to_param('-I', includes)} #{to_param('-r', requires)} --simple-prompt"
|
13
|
+
|
15
14
|
|
data/spec/config_helper.rb
CHANGED
@@ -2,7 +2,7 @@ def mock_yaml(hash, path)
|
|
2
2
|
mock_file = double(path.split("/")[-1])
|
3
3
|
File.stub(:exist?).with(path).and_return(true)
|
4
4
|
File.stub(:open).with(path).and_return(mock_file)
|
5
|
-
|
5
|
+
Psych.stub(:load).and_return(hash)
|
6
6
|
end
|
7
7
|
|
8
8
|
def default_predicate_mapping_file
|
@@ -1,4 +1,4 @@
|
|
1
|
-
<info:fedora/test:1> <http://purl.org/dc/terms/created> "2009-10-10" .
|
1
|
+
<info:fedora/test:1> <http://purl.org/dc/terms/created> "2009-10-10"^^<http://www.w3.org/2001/XMLSchema#date> .
|
2
2
|
<info:fedora/test:1> <http://purl.org/dc/terms/title> "fake-title" .
|
3
3
|
<info:fedora/test:1> <http://purl.org/dc/terms/publisher> "publisher1" .
|
4
4
|
<info:fedora/test:1> <http://xmlns.com/foaf/0.1/based_near> "coverage1" .
|
@@ -22,7 +22,7 @@ describe ActiveFedora::Auditable do
|
|
22
22
|
record.action.should == "addDatastream"
|
23
23
|
record.component_id.should == "RELS-EXT"
|
24
24
|
record.responsibility.should == "fedoraAdmin"
|
25
|
-
record.date.
|
25
|
+
expect(DateTime.parse(record.date)).to eq DateTime.parse(@test_object.modified_date)
|
26
26
|
record.justification.should == ""
|
27
27
|
end
|
28
28
|
|
@@ -3,7 +3,7 @@ require 'spec_helper'
|
|
3
3
|
describe "A base object with metadata" do
|
4
4
|
before :all do
|
5
5
|
class MockAFBaseRelationship < ActiveFedora::Base
|
6
|
-
has_metadata
|
6
|
+
has_metadata 'foo', type: Hydra::ModsArticleDatastream
|
7
7
|
end
|
8
8
|
end
|
9
9
|
after :all do
|
@@ -20,7 +20,7 @@ describe "A base object with metadata" do
|
|
20
20
|
obj = ActiveFedora::Base.find(@obj.pid)
|
21
21
|
obj.foo.should_not be_new
|
22
22
|
obj.foo.person.should == ['bob']
|
23
|
-
person_field = ActiveFedora::SolrService.solr_name('
|
23
|
+
person_field = ActiveFedora::SolrService.solr_name('foo__person', type: :string)
|
24
24
|
solr_result = ActiveFedora::SolrService.query("{!raw f=id}#{@obj.pid}", :fl=>"id #{person_field}").first
|
25
25
|
expect(solr_result).to eq("id"=>@obj.pid, person_field =>['bob'])
|
26
26
|
end
|
@@ -51,7 +51,7 @@ describe "A base object with metadata" do
|
|
51
51
|
end
|
52
52
|
it "should save the datastream." do
|
53
53
|
MockAFBaseRelationship.find(@release.pid).foo.person.should == ['frank']
|
54
|
-
person_field = ActiveFedora::SolrService.solr_name('
|
54
|
+
person_field = ActiveFedora::SolrService.solr_name('foo__person', type: :string)
|
55
55
|
ActiveFedora::SolrService.query("id:#{@release.pid.gsub(":", "\\:")}", :fl=>"id #{person_field}").first.should == {"id"=>@release.pid, person_field =>['frank']}
|
56
56
|
end
|
57
57
|
end
|
@@ -248,6 +248,24 @@ describe ActiveFedora::Base do
|
|
248
248
|
inner_object.pid.should == @test_object2.pid
|
249
249
|
inner_object.should respond_to(:lastModifiedDate)
|
250
250
|
end
|
251
|
+
|
252
|
+
it 'when the object is updated, it also updates modification time field in solr' do
|
253
|
+
@test_object2.save
|
254
|
+
|
255
|
+
# Make sure the modification time changes by at least 1 second
|
256
|
+
sleep 1
|
257
|
+
|
258
|
+
@test_object2.state = 'I'
|
259
|
+
@test_object2.save
|
260
|
+
@test_object2.reload
|
261
|
+
|
262
|
+
pid = @test_object2.pid.sub(':', '\:')
|
263
|
+
solr_doc = ActiveFedora::SolrService.query("id:#{pid}")
|
264
|
+
|
265
|
+
new_time_fedora = Time.parse(@test_object2.modified_date).to_i
|
266
|
+
new_time_solr = Time.parse(solr_doc.first['system_modified_dtsi']).to_i
|
267
|
+
new_time_solr.should == new_time_fedora
|
268
|
+
end
|
251
269
|
end
|
252
270
|
|
253
271
|
describe ".datastreams" do
|
@@ -2,29 +2,24 @@ require 'spec_helper'
|
|
2
2
|
|
3
3
|
describe "Nested Rdf Objects" do
|
4
4
|
describe "without type" do
|
5
|
-
before(:each) do
|
5
|
+
before(:each) do
|
6
6
|
class SpecDatastream < ActiveFedora::NtriplesRDFDatastream
|
7
|
-
|
8
|
-
map.parts(:in=> RDF::DC, :to=>'hasPart', :class_name=>'Component')
|
9
|
-
end
|
7
|
+
property :parts, predicate: RDF::DC.hasPart, class_name: 'Component'
|
10
8
|
|
11
|
-
class Component
|
12
|
-
|
13
|
-
map_predicates do |map|
|
14
|
-
map.label(:in=> RDF::DC, :to=>'title')
|
15
|
-
end
|
9
|
+
class Component < ActiveFedora::Rdf::Resource
|
10
|
+
property :label, predicate: RDF::DC.title
|
16
11
|
end
|
17
12
|
end
|
18
13
|
|
19
14
|
end
|
20
|
-
|
15
|
+
|
21
16
|
after(:each) do
|
22
17
|
Object.send(:remove_const, :SpecDatastream)
|
23
18
|
end
|
24
19
|
|
25
20
|
let (:ds) do
|
26
|
-
|
27
|
-
ds = SpecDatastream.new(
|
21
|
+
test_obj = ActiveFedora::Base.new(pid: 'test:124')
|
22
|
+
ds = SpecDatastream.new(test_obj, 'descMd')
|
28
23
|
end
|
29
24
|
|
30
25
|
describe "#new_record?" do
|
@@ -36,16 +31,11 @@ describe "Nested Rdf Objects" do
|
|
36
31
|
it "should not be new when it's loaded from fedora" do
|
37
32
|
ds.content = '_:g70324142325120 <http://purl.org/dc/terms/title> "Alternator" .
|
38
33
|
<info:fedora/test:124> <http://purl.org/dc/terms/hasPart> _:g70324142325120 .'
|
34
|
+
ds.resource.persist!
|
39
35
|
ds.parts.first.should_not be_new_record
|
40
36
|
end
|
41
37
|
end
|
42
38
|
|
43
|
-
it "should not choke on invalid data" do
|
44
|
-
# set a string in the graph where model expects a node
|
45
|
-
ds.parts = ["foo"]
|
46
|
-
expect {ds.parts.inspect}.to raise_error(ArgumentError, "Expected the value of http://purl.org/dc/terms/hasPart to be an RDF object but it is a String \"foo\"")
|
47
|
-
end
|
48
|
-
|
49
39
|
it "should be able to nest a complex object" do
|
50
40
|
comp = SpecDatastream::Component.new(ds.graph)
|
51
41
|
comp.label = ["Alternator"]
|
@@ -139,30 +129,25 @@ END
|
|
139
129
|
|
140
130
|
|
141
131
|
describe "with type" do
|
142
|
-
describe "one class per assertion" do
|
143
|
-
before(:each) do
|
132
|
+
describe "one class per assertion" do
|
133
|
+
before(:each) do
|
144
134
|
class SpecDatastream < ActiveFedora::NtriplesRDFDatastream
|
145
|
-
|
146
|
-
map.mediator(:in=> RDF::DC, :class_name=>'MediatorUser')
|
147
|
-
end
|
135
|
+
property :mediator, predicate: RDF::DC.mediator, class_name: 'MediatorUser'
|
148
136
|
|
149
|
-
class MediatorUser
|
150
|
-
|
151
|
-
|
152
|
-
map_predicates do |map|
|
153
|
-
map.title(:in=> RDF::DC)
|
154
|
-
end
|
137
|
+
class MediatorUser < ActiveFedora::Rdf::Resource
|
138
|
+
configure type: RDF::DC.AgentClass
|
139
|
+
property :title, predicate: RDF::DC.title
|
155
140
|
end
|
156
141
|
end
|
157
142
|
end
|
158
|
-
|
143
|
+
|
159
144
|
after(:each) do
|
160
145
|
Object.send(:remove_const, :SpecDatastream)
|
161
146
|
end
|
162
147
|
|
163
148
|
let (:ds) do
|
164
|
-
mock_obj = double(:mock_obj, :
|
165
|
-
ds = SpecDatastream.new(mock_obj)
|
149
|
+
mock_obj = double(:mock_obj, pid: 'test:124', :new_record? => true)
|
150
|
+
ds = SpecDatastream.new(mock_obj, 'descMd')
|
166
151
|
end
|
167
152
|
|
168
153
|
|
@@ -194,44 +179,36 @@ END
|
|
194
179
|
end
|
195
180
|
|
196
181
|
describe "shared assertion to different classes" do
|
197
|
-
before(:each) do
|
182
|
+
before(:each) do
|
198
183
|
class EbuCore < RDF::Vocabulary("http://www.ebu.ch/metadata/ontologies/ebucore#")
|
199
184
|
property :isEpisodeOf
|
200
185
|
property :title
|
201
186
|
end
|
202
|
-
|
187
|
+
|
203
188
|
class SpecDatastream < ActiveFedora::NtriplesRDFDatastream
|
204
|
-
|
205
|
-
|
206
|
-
map.program(:to => 'isEpisodeOf', :in=> EbuCore, :class_name=>'Program')
|
207
|
-
end
|
189
|
+
property :series, predicate: EbuCore.isEpisodeOf, class_name: 'Series'
|
190
|
+
property :program, predicate: EbuCore.isEpisodeOf, class_name: 'Program'
|
208
191
|
|
209
|
-
class Series
|
210
|
-
|
211
|
-
|
212
|
-
map_predicates do |map|
|
213
|
-
map.title(:in=> EbuCore)
|
214
|
-
end
|
192
|
+
class Series < ActiveFedora::Rdf::Resource
|
193
|
+
configure type: 'http://www.ebu.ch/metadata/ontologies/ebucore#Series'
|
194
|
+
property :title, predicate: EbuCore.title
|
215
195
|
end
|
216
196
|
|
217
|
-
class Program
|
218
|
-
|
219
|
-
|
220
|
-
map_predicates do |map|
|
221
|
-
map.title(:in=> EbuCore)
|
222
|
-
end
|
197
|
+
class Program < ActiveFedora::Rdf::Resource
|
198
|
+
configure type: 'http://www.ebu.ch/metadata/ontologies/ebucore#Programme'
|
199
|
+
property :title, predicate: EbuCore.title
|
223
200
|
end
|
224
201
|
end
|
225
202
|
|
226
203
|
end
|
227
|
-
|
204
|
+
|
228
205
|
after(:each) do
|
229
206
|
Object.send(:remove_const, :SpecDatastream)
|
230
207
|
end
|
231
208
|
|
232
209
|
let (:ds) do
|
233
|
-
mock_obj = double(:mock_obj, :
|
234
|
-
ds = SpecDatastream.new(mock_obj)
|
210
|
+
mock_obj = double(:mock_obj, pid: 'test:124', :new_record? => true)
|
211
|
+
ds = SpecDatastream.new(mock_obj, 'descMd')
|
235
212
|
end
|
236
213
|
|
237
214
|
|
@@ -245,9 +222,9 @@ END
|
|
245
222
|
ds.program = program
|
246
223
|
|
247
224
|
ds.program.first.type.size.should == 1
|
248
|
-
ds.program.first.type.first.to_s.should == 'http://www.ebu.ch/metadata/ontologies/ebucore#Programme'
|
225
|
+
ds.program.first.type.first.to_s.should == 'http://www.ebu.ch/metadata/ontologies/ebucore#Programme'
|
249
226
|
ds.series.first.type.size.should == 1
|
250
|
-
ds.series.first.type.first.to_s.should == 'http://www.ebu.ch/metadata/ontologies/ebucore#Series'
|
227
|
+
ds.series.first.type.first.to_s.should == 'http://www.ebu.ch/metadata/ontologies/ebucore#Series'
|
251
228
|
end
|
252
229
|
|
253
230
|
it "should create an object of the correct type" do
|
@@ -5,14 +5,12 @@ describe "An object with RDF backed attributes" do
|
|
5
5
|
before do
|
6
6
|
class TestOne < ActiveFedora::Base
|
7
7
|
class MyMetadata < ActiveFedora::NtriplesRDFDatastream
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
index.as :stored_searchable, :sortable
|
15
|
-
end
|
8
|
+
property :title, predicate: RDF::DC.title do |index|
|
9
|
+
index.as :stored_searchable
|
10
|
+
end
|
11
|
+
property :date_uploaded, predicate: RDF::DC.dateSubmitted do |index|
|
12
|
+
index.type :date
|
13
|
+
index.as :stored_searchable, :sortable
|
16
14
|
end
|
17
15
|
end
|
18
16
|
has_metadata 'descMetadata', type: MyMetadata
|
@@ -7,7 +7,7 @@ describe "Looking up collection members" do
|
|
7
7
|
end
|
8
8
|
|
9
9
|
class Book < ActiveFedora::Base
|
10
|
-
belongs_to :library, :
|
10
|
+
belongs_to :library, property: :has_constituent
|
11
11
|
end
|
12
12
|
end
|
13
13
|
after :all do
|
@@ -20,12 +20,19 @@ describe "Looking up collection members" do
|
|
20
20
|
before do
|
21
21
|
library.books = [book]
|
22
22
|
library.save!
|
23
|
+
library.reload
|
23
24
|
end
|
24
25
|
it "should read book_ids from solr" do
|
25
|
-
library.
|
26
|
+
expect(library.book_ids).to eq [book.pid]
|
26
27
|
end
|
27
28
|
it "should read books from solr" do
|
28
|
-
library.
|
29
|
+
expect(library.books).to eq [book]
|
30
|
+
end
|
31
|
+
|
32
|
+
it "should cache the results" do
|
33
|
+
expect(library.books.loaded?).to be_false
|
34
|
+
expect(library.books).to eq [book]
|
35
|
+
expect(library.books.loaded?).to be_true
|
29
36
|
end
|
30
37
|
end
|
31
38
|
end
|