active-fedora 2.1.0 → 2.2.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.
- data/Rakefile +1 -0
- data/VERSION +1 -1
- data/active-fedora.gemspec +66 -54
- data/config/predicate_mappings.yml +47 -0
- data/lib/active_fedora.rb +28 -4
- data/lib/active_fedora/base.rb +6 -0
- data/lib/active_fedora/content_model.rb +1 -0
- data/lib/active_fedora/rels_ext_datastream.rb +6 -2
- data/lib/active_fedora/semantic_node.rb +21 -31
- data/spec/integration/rels_ext_datastream_spec.rb +3 -2
- data/spec/unit/base_datastream_management_spec.rb +9 -1
- data/spec/unit/content_model_spec.rb +11 -0
- data/spec/unit/rels_ext_datastream_spec.rb +6 -0
- data/spec/unit/semantic_node_spec.rb +50 -28
- metadata +388 -122
data/Rakefile
CHANGED
@@ -24,6 +24,7 @@ begin
|
|
24
24
|
gem.add_dependency("activeresource")
|
25
25
|
gem.add_dependency("mediashelf-loggable")
|
26
26
|
gem.add_dependency("equivalent-xml")
|
27
|
+
gem.add_dependency("facets")
|
27
28
|
|
28
29
|
# gem is a Gem::Specification... see http://www.rubygems.org/read/chapter/20 for additional settings
|
29
30
|
end
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
2.
|
1
|
+
2.2.0
|
data/active-fedora.gemspec
CHANGED
@@ -5,11 +5,11 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = %q{active-fedora}
|
8
|
-
s.version = "2.
|
8
|
+
s.version = "2.2.0"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["Matt Zumwalt", "McClain Looney"]
|
12
|
-
s.date = %q{2011-
|
12
|
+
s.date = %q{2011-05-02}
|
13
13
|
s.description = %q{ActiveFedora provides for creating and managing objects in the Fedora Repository Architecture.}
|
14
14
|
s.email = %q{matt.zumwalt@yourmediashelf.com}
|
15
15
|
s.extra_rdoc_files = [
|
@@ -182,6 +182,7 @@ Gem::Specification.new do |s|
|
|
182
182
|
"VERSION",
|
183
183
|
"active-fedora.gemspec",
|
184
184
|
"config/fedora.yml",
|
185
|
+
"config/predicate_mappings.yml",
|
185
186
|
"config/solr_mappings.yml",
|
186
187
|
"config/solr_mappings_af_0.1.yml",
|
187
188
|
"config/solr_mappings_bl_2.4.yml",
|
@@ -288,58 +289,6 @@ Gem::Specification.new do |s|
|
|
288
289
|
s.rubyforge_project = %q{rubyfedora}
|
289
290
|
s.rubygems_version = %q{1.3.7}
|
290
291
|
s.summary = %q{A convenience libary for manipulating MODS (Metadata Object Description Schema) documents.}
|
291
|
-
s.test_files = [
|
292
|
-
"spec/integration/base_file_management_spec.rb",
|
293
|
-
"spec/integration/base_find_by_fields_spec.rb",
|
294
|
-
"spec/integration/base_loader_spec.rb",
|
295
|
-
"spec/integration/base_spec.rb",
|
296
|
-
"spec/integration/bug_spec.rb",
|
297
|
-
"spec/integration/datastream_spec.rb",
|
298
|
-
"spec/integration/datastreams_crud_spec.rb",
|
299
|
-
"spec/integration/fedora_object_spec.rb",
|
300
|
-
"spec/integration/full_featured_model_spec.rb",
|
301
|
-
"spec/integration/metadata_datastream_helper_spec.rb",
|
302
|
-
"spec/integration/model_spec.rb",
|
303
|
-
"spec/integration/mods_article_integration_spec.rb",
|
304
|
-
"spec/integration/nokogiri_datastream_spec.rb",
|
305
|
-
"spec/integration/rels_ext_datastream_spec.rb",
|
306
|
-
"spec/integration/repository_spec.rb",
|
307
|
-
"spec/integration/rf_fedora_object_spec.rb",
|
308
|
-
"spec/integration/semantic_node_spec.rb",
|
309
|
-
"spec/integration/solr_service_spec.rb",
|
310
|
-
"spec/samples/models/audio_record.rb",
|
311
|
-
"spec/samples/models/image.rb",
|
312
|
-
"spec/samples/models/oral_history.rb",
|
313
|
-
"spec/samples/models/seminar.rb",
|
314
|
-
"spec/samples/models/seminar_audio_file.rb",
|
315
|
-
"spec/samples/oral_history_sample_model.rb",
|
316
|
-
"spec/spec_helper.rb",
|
317
|
-
"spec/unit/active_fedora_spec.rb",
|
318
|
-
"spec/unit/base_cma_spec.rb",
|
319
|
-
"spec/unit/base_datastream_management_spec.rb",
|
320
|
-
"spec/unit/base_extra_spec.rb",
|
321
|
-
"spec/unit/base_file_management_spec.rb",
|
322
|
-
"spec/unit/base_named_datastream_spec.rb",
|
323
|
-
"spec/unit/base_spec.rb",
|
324
|
-
"spec/unit/connection_spec.rb",
|
325
|
-
"spec/unit/content_model_spec.rb",
|
326
|
-
"spec/unit/datastream_concurrency_spec.rb",
|
327
|
-
"spec/unit/datastream_spec.rb",
|
328
|
-
"spec/unit/fedora_object_spec.rb",
|
329
|
-
"spec/unit/inheritance_spec.rb",
|
330
|
-
"spec/unit/metadata_datastream_spec.rb",
|
331
|
-
"spec/unit/model_spec.rb",
|
332
|
-
"spec/unit/nokogiri_datastream_spec.rb",
|
333
|
-
"spec/unit/property_spec.rb",
|
334
|
-
"spec/unit/qualified_dublin_core_datastream_spec.rb",
|
335
|
-
"spec/unit/relationship_spec.rb",
|
336
|
-
"spec/unit/rels_ext_datastream_spec.rb",
|
337
|
-
"spec/unit/repository_spec.rb",
|
338
|
-
"spec/unit/rf_datastream_spec.rb",
|
339
|
-
"spec/unit/semantic_node_spec.rb",
|
340
|
-
"spec/unit/solr_config_options_spec.rb",
|
341
|
-
"spec/unit/solr_service_spec.rb"
|
342
|
-
]
|
343
292
|
|
344
293
|
if s.respond_to? :specification_version then
|
345
294
|
current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
|
@@ -383,6 +332,26 @@ Gem::Specification.new do |s|
|
|
383
332
|
s.add_development_dependency(%q<rspec>, ["< 2.0.0"])
|
384
333
|
s.add_development_dependency(%q<mocha>, [">= 0.9.8"])
|
385
334
|
s.add_development_dependency(%q<ruby-debug>, [">= 0"])
|
335
|
+
s.add_development_dependency(%q<jeweler>, [">= 0"])
|
336
|
+
s.add_development_dependency(%q<rspec>, ["< 2.0.0"])
|
337
|
+
s.add_development_dependency(%q<mocha>, [">= 0.9.8"])
|
338
|
+
s.add_development_dependency(%q<ruby-debug>, [">= 0"])
|
339
|
+
s.add_development_dependency(%q<jeweler>, [">= 0"])
|
340
|
+
s.add_development_dependency(%q<rspec>, ["< 2.0.0"])
|
341
|
+
s.add_development_dependency(%q<mocha>, [">= 0.9.8"])
|
342
|
+
s.add_development_dependency(%q<ruby-debug>, [">= 0"])
|
343
|
+
s.add_development_dependency(%q<jeweler>, [">= 0"])
|
344
|
+
s.add_development_dependency(%q<rspec>, ["< 2.0.0"])
|
345
|
+
s.add_development_dependency(%q<mocha>, [">= 0.9.8"])
|
346
|
+
s.add_development_dependency(%q<ruby-debug>, [">= 0"])
|
347
|
+
s.add_development_dependency(%q<jeweler>, [">= 0"])
|
348
|
+
s.add_development_dependency(%q<rspec>, ["< 2.0.0"])
|
349
|
+
s.add_development_dependency(%q<mocha>, [">= 0.9.8"])
|
350
|
+
s.add_development_dependency(%q<ruby-debug>, [">= 0"])
|
351
|
+
s.add_development_dependency(%q<jeweler>, [">= 0"])
|
352
|
+
s.add_development_dependency(%q<rspec>, ["< 2.0.0"])
|
353
|
+
s.add_development_dependency(%q<mocha>, [">= 0.9.8"])
|
354
|
+
s.add_development_dependency(%q<ruby-debug>, [">= 0"])
|
386
355
|
s.add_runtime_dependency(%q<solr-ruby>, [">= 0.0.6"])
|
387
356
|
s.add_runtime_dependency(%q<xml-simple>, [">= 1.0.12"])
|
388
357
|
s.add_runtime_dependency(%q<mime-types>, [">= 1.16"])
|
@@ -393,6 +362,7 @@ Gem::Specification.new do |s|
|
|
393
362
|
s.add_runtime_dependency(%q<activeresource>, [">= 0"])
|
394
363
|
s.add_runtime_dependency(%q<mediashelf-loggable>, [">= 0"])
|
395
364
|
s.add_runtime_dependency(%q<equivalent-xml>, [">= 0"])
|
365
|
+
s.add_runtime_dependency(%q<facets>, [">= 0"])
|
396
366
|
else
|
397
367
|
s.add_dependency(%q<active-fedora>, [">= 0"])
|
398
368
|
s.add_dependency(%q<jeweler>, [">= 0"])
|
@@ -431,6 +401,26 @@ Gem::Specification.new do |s|
|
|
431
401
|
s.add_dependency(%q<rspec>, ["< 2.0.0"])
|
432
402
|
s.add_dependency(%q<mocha>, [">= 0.9.8"])
|
433
403
|
s.add_dependency(%q<ruby-debug>, [">= 0"])
|
404
|
+
s.add_dependency(%q<jeweler>, [">= 0"])
|
405
|
+
s.add_dependency(%q<rspec>, ["< 2.0.0"])
|
406
|
+
s.add_dependency(%q<mocha>, [">= 0.9.8"])
|
407
|
+
s.add_dependency(%q<ruby-debug>, [">= 0"])
|
408
|
+
s.add_dependency(%q<jeweler>, [">= 0"])
|
409
|
+
s.add_dependency(%q<rspec>, ["< 2.0.0"])
|
410
|
+
s.add_dependency(%q<mocha>, [">= 0.9.8"])
|
411
|
+
s.add_dependency(%q<ruby-debug>, [">= 0"])
|
412
|
+
s.add_dependency(%q<jeweler>, [">= 0"])
|
413
|
+
s.add_dependency(%q<rspec>, ["< 2.0.0"])
|
414
|
+
s.add_dependency(%q<mocha>, [">= 0.9.8"])
|
415
|
+
s.add_dependency(%q<ruby-debug>, [">= 0"])
|
416
|
+
s.add_dependency(%q<jeweler>, [">= 0"])
|
417
|
+
s.add_dependency(%q<rspec>, ["< 2.0.0"])
|
418
|
+
s.add_dependency(%q<mocha>, [">= 0.9.8"])
|
419
|
+
s.add_dependency(%q<ruby-debug>, [">= 0"])
|
420
|
+
s.add_dependency(%q<jeweler>, [">= 0"])
|
421
|
+
s.add_dependency(%q<rspec>, ["< 2.0.0"])
|
422
|
+
s.add_dependency(%q<mocha>, [">= 0.9.8"])
|
423
|
+
s.add_dependency(%q<ruby-debug>, [">= 0"])
|
434
424
|
s.add_dependency(%q<solr-ruby>, [">= 0.0.6"])
|
435
425
|
s.add_dependency(%q<xml-simple>, [">= 1.0.12"])
|
436
426
|
s.add_dependency(%q<mime-types>, [">= 1.16"])
|
@@ -441,6 +431,7 @@ Gem::Specification.new do |s|
|
|
441
431
|
s.add_dependency(%q<activeresource>, [">= 0"])
|
442
432
|
s.add_dependency(%q<mediashelf-loggable>, [">= 0"])
|
443
433
|
s.add_dependency(%q<equivalent-xml>, [">= 0"])
|
434
|
+
s.add_dependency(%q<facets>, [">= 0"])
|
444
435
|
end
|
445
436
|
else
|
446
437
|
s.add_dependency(%q<active-fedora>, [">= 0"])
|
@@ -480,6 +471,26 @@ Gem::Specification.new do |s|
|
|
480
471
|
s.add_dependency(%q<rspec>, ["< 2.0.0"])
|
481
472
|
s.add_dependency(%q<mocha>, [">= 0.9.8"])
|
482
473
|
s.add_dependency(%q<ruby-debug>, [">= 0"])
|
474
|
+
s.add_dependency(%q<jeweler>, [">= 0"])
|
475
|
+
s.add_dependency(%q<rspec>, ["< 2.0.0"])
|
476
|
+
s.add_dependency(%q<mocha>, [">= 0.9.8"])
|
477
|
+
s.add_dependency(%q<ruby-debug>, [">= 0"])
|
478
|
+
s.add_dependency(%q<jeweler>, [">= 0"])
|
479
|
+
s.add_dependency(%q<rspec>, ["< 2.0.0"])
|
480
|
+
s.add_dependency(%q<mocha>, [">= 0.9.8"])
|
481
|
+
s.add_dependency(%q<ruby-debug>, [">= 0"])
|
482
|
+
s.add_dependency(%q<jeweler>, [">= 0"])
|
483
|
+
s.add_dependency(%q<rspec>, ["< 2.0.0"])
|
484
|
+
s.add_dependency(%q<mocha>, [">= 0.9.8"])
|
485
|
+
s.add_dependency(%q<ruby-debug>, [">= 0"])
|
486
|
+
s.add_dependency(%q<jeweler>, [">= 0"])
|
487
|
+
s.add_dependency(%q<rspec>, ["< 2.0.0"])
|
488
|
+
s.add_dependency(%q<mocha>, [">= 0.9.8"])
|
489
|
+
s.add_dependency(%q<ruby-debug>, [">= 0"])
|
490
|
+
s.add_dependency(%q<jeweler>, [">= 0"])
|
491
|
+
s.add_dependency(%q<rspec>, ["< 2.0.0"])
|
492
|
+
s.add_dependency(%q<mocha>, [">= 0.9.8"])
|
493
|
+
s.add_dependency(%q<ruby-debug>, [">= 0"])
|
483
494
|
s.add_dependency(%q<solr-ruby>, [">= 0.0.6"])
|
484
495
|
s.add_dependency(%q<xml-simple>, [">= 1.0.12"])
|
485
496
|
s.add_dependency(%q<mime-types>, [">= 1.16"])
|
@@ -490,6 +501,7 @@ Gem::Specification.new do |s|
|
|
490
501
|
s.add_dependency(%q<activeresource>, [">= 0"])
|
491
502
|
s.add_dependency(%q<mediashelf-loggable>, [">= 0"])
|
492
503
|
s.add_dependency(%q<equivalent-xml>, [">= 0"])
|
504
|
+
s.add_dependency(%q<facets>, [">= 0"])
|
493
505
|
end
|
494
506
|
end
|
495
507
|
|
@@ -0,0 +1,47 @@
|
|
1
|
+
# The default namespace maps to the default namespace for generating rels_ext from solr
|
2
|
+
:default_namespace: info:fedora/fedora-system:def/relations-external#
|
3
|
+
|
4
|
+
# namespace mappings---
|
5
|
+
# you can add specific mappings for your institution by providing the following:
|
6
|
+
# namespace_uri:
|
7
|
+
# :relationship_symbol: relationship_identifier
|
8
|
+
#
|
9
|
+
# For example, if you have the following element in your rels_ext:
|
10
|
+
#
|
11
|
+
# <oai:itemID>oai:example.edu:changeme:500</oai:itemID>
|
12
|
+
#
|
13
|
+
# With the last two lines of this file uncommented, the relationships hash of your object will include:
|
14
|
+
# :oai_item_id => ["info:fedora/oai:example.edu:changeme:500"]
|
15
|
+
#
|
16
|
+
# With the last two lines of this file commented out, the relationships hash of your object will include:
|
17
|
+
# "oai_itemID" => ["info:fedora/oai:example.edu:changeme:500"]
|
18
|
+
#
|
19
|
+
:predicate_mapping:
|
20
|
+
info:fedora/fedora-system:def/relations-external#:
|
21
|
+
:is_derivation_of: isDerivationOf
|
22
|
+
:is_metadata_for: isMetadataFor
|
23
|
+
:is_member_of_collection: isMemberOfCollection
|
24
|
+
:has_derivation: hasDerivation
|
25
|
+
:is_annotation_of: isAnnotationOf
|
26
|
+
:is_constituent_of: isConstituentOf
|
27
|
+
:is_dependent_of: isDependentOf
|
28
|
+
:has_collection_member: hasCollectionMember
|
29
|
+
:has_annotation: hasAnnotation
|
30
|
+
:has_constituent: hasConstituent
|
31
|
+
:has_dependent: hasDependent
|
32
|
+
:is_part_of: isPartOf
|
33
|
+
:has_equivalent: hasEquivalent
|
34
|
+
:is_subset_of: isSubsetOf
|
35
|
+
:is_description_of: isDescriptionOf
|
36
|
+
:is_member_of: isMemberOf
|
37
|
+
:has_model: hasModel
|
38
|
+
:conforms_to: conformsTo
|
39
|
+
:has_metadata: hasMetadata
|
40
|
+
:has_subset: hasSubset
|
41
|
+
:has_description: hasDescription
|
42
|
+
:has_part: hasPart
|
43
|
+
:has_member: hasMember
|
44
|
+
info:fedora/fedora-system:def/model#:
|
45
|
+
:has_model: hasModel
|
46
|
+
# http://www.openarchives.org/OAI/2.0/:
|
47
|
+
# :oai_item_id: itemID
|
data/lib/active_fedora.rb
CHANGED
@@ -28,13 +28,17 @@ ENABLE_SOLR_UPDATES = true unless defined?(ENABLE_SOLR_UPDATES)
|
|
28
28
|
module ActiveFedora #:nodoc:
|
29
29
|
|
30
30
|
class << self
|
31
|
-
attr_accessor :solr_config, :fedora_config
|
31
|
+
attr_accessor :solr_config, :fedora_config, :predicate_config_path
|
32
32
|
end
|
33
33
|
|
34
34
|
# The configuration hash that gets used by RSolr.connect
|
35
35
|
@solr_config ||= {}
|
36
36
|
@fedora_config ||= {}
|
37
|
-
|
37
|
+
|
38
|
+
# Initializes ActiveFedora's connection to Fedora and Solr based on the info in fedora.yml
|
39
|
+
# If RAILS_ENV is set, it will use that environment. Defaults to "development".
|
40
|
+
# @param [String] config_path (optional) the path to fedora.yml
|
41
|
+
# If config_path is not provided and RAILS_ROOT is set, it will look in RAILS_ENV/config/fedora.yml. Otherwise, it will look in your config/fedora.yml. Failing that, it will use localhost urls.
|
38
42
|
def self.init( config_path=nil )
|
39
43
|
|
40
44
|
config_env = defined?(RAILS_ENV) ? RAILS_ENV : "development"
|
@@ -43,10 +47,14 @@ module ActiveFedora #:nodoc:
|
|
43
47
|
if defined?(RAILS_ROOT)
|
44
48
|
config_path = "#{RAILS_ROOT}/config/fedora.yml"
|
45
49
|
else
|
46
|
-
config_path = File.join(
|
47
|
-
|
50
|
+
config_path = File.join("config","fedora.yml")
|
51
|
+
unless File.exist?(config_path)
|
52
|
+
config_path = File.join(File.dirname(__FILE__), "..", "config", "fedora.yml")
|
53
|
+
logger.info "Using the default fedora.yml that comes with active-fedora. If you want to override this, pass the path to fedora.yml as an argument to ActiveFedora.init or set RAILS_ROOT and put fedora.yml into \#{RAILS_ROOT}/config."
|
54
|
+
end
|
48
55
|
end
|
49
56
|
end
|
57
|
+
|
50
58
|
|
51
59
|
logger.info("FEDORA: loading ActiveFedora config from #{File.expand_path(config_path)}")
|
52
60
|
|
@@ -67,6 +75,18 @@ module ActiveFedora #:nodoc:
|
|
67
75
|
Fedora::Repository.register(ActiveFedora.fedora_config[:url])
|
68
76
|
logger.info("FEDORA: initialized Fedora as: #{Fedora::Repository.instance.inspect}")
|
69
77
|
|
78
|
+
# Retrieve the valid path for the predicate mappings config file
|
79
|
+
pred_config_paths = [File.dirname(config_path),File.join(File.dirname(__FILE__),"..","config")]
|
80
|
+
pred_config_paths.each do |path|
|
81
|
+
testfile = File.join(path,"predicate_mappings.yml")
|
82
|
+
if File.exist?(testfile)
|
83
|
+
@predicate_config_path = testfile
|
84
|
+
break
|
85
|
+
end
|
86
|
+
end
|
87
|
+
raise "Could not find predicate_mappings.yml in these locations: #{pred_config_paths.join("; ")}." unless @predicate_config_path
|
88
|
+
|
89
|
+
|
70
90
|
end
|
71
91
|
|
72
92
|
def self.solr
|
@@ -80,6 +100,10 @@ module ActiveFedora #:nodoc:
|
|
80
100
|
def self.logger
|
81
101
|
@logger ||= defined?(RAILS_DEFAULT_LOGGER) ? RAILS_DEFAULT_LOGGER : Logger.new(STDOUT)
|
82
102
|
end
|
103
|
+
|
104
|
+
def self.predicate_config
|
105
|
+
@predicate_config_path
|
106
|
+
end
|
83
107
|
end
|
84
108
|
|
85
109
|
|
data/lib/active_fedora/base.rb
CHANGED
@@ -225,6 +225,12 @@ module ActiveFedora
|
|
225
225
|
keys = datastreams.keys
|
226
226
|
next_index = keys.select {|v| v =~ /(#{prefix}\d*$)/}.length + 1
|
227
227
|
new_dsid = prefix.to_s + next_index.to_s
|
228
|
+
while keys.include?(new_dsid)
|
229
|
+
next_index += 1
|
230
|
+
new_dsid = prefix.to_s + next_index.to_s
|
231
|
+
end
|
232
|
+
new_dsid
|
233
|
+
|
228
234
|
# while keys.include?(new_dsid)
|
229
235
|
# next_index += 1
|
230
236
|
# new_dsid = prefix.to_s + rand(range).to_s
|
@@ -34,7 +34,11 @@ module ActiveFedora
|
|
34
34
|
def self.from_xml(tmpl, node)
|
35
35
|
# node.xpath("./foxml:datastreamVersion[last()]/foxml:xmlContent/rdf:RDF/rdf:Description/*").each do |f|
|
36
36
|
node.xpath("./foxml:datastreamVersion[last()]/foxml:xmlContent/rdf:RDF/rdf:Description/*", {"rdf"=>"http://www.w3.org/1999/02/22-rdf-syntax-ns#", "foxml"=>"info:fedora/fedora-system:def/foxml#"}).each do |f|
|
37
|
-
|
37
|
+
ns_mapping = self.predicate_mappings[f.namespace.href]
|
38
|
+
predicate = ns_mapping ? ns_mapping.invert[f.name] : nil
|
39
|
+
predicate = "#{f.namespace.prefix}_#{f.name}" if predicate.nil?
|
40
|
+
object = f["resource"] ? f["resource"] : f.inner_text
|
41
|
+
r = ActiveFedora::Relationship.new(:subject=>:self, :predicate=>predicate, :object=>object)
|
38
42
|
tmpl.add_relationship(r)
|
39
43
|
end
|
40
44
|
tmpl.send(:dirty=, false)
|
@@ -65,7 +69,7 @@ module ActiveFedora
|
|
65
69
|
# Solr must be synchronized with RELS-EXT data in Fedora.
|
66
70
|
def from_solr(solr_doc)
|
67
71
|
#cycle through all possible predicates
|
68
|
-
|
72
|
+
self.class.predicate_mappings[self.class.default_predicate_namespace].keys.each do |predicate|
|
69
73
|
predicate_symbol = ActiveFedora::SolrService.solr_name(predicate, :symbol)
|
70
74
|
value = (solr_doc[predicate_symbol].nil? ? solr_doc[predicate_symbol.to_s]: solr_doc[predicate_symbol])
|
71
75
|
unless value.nil?
|
@@ -5,34 +5,11 @@ module ActiveFedora
|
|
5
5
|
|
6
6
|
attr_accessor :internal_uri, :named_relationship_desc, :relationships_are_dirty, :load_from_solr
|
7
7
|
|
8
|
-
|
9
|
-
:has_member => "hasMember",
|
10
|
-
:is_part_of => "isPartOf",
|
11
|
-
:has_part => "hasPart",
|
12
|
-
:is_member_of_collection => "isMemberOfCollection",
|
13
|
-
:has_collection_member => "hasCollectionMember",
|
14
|
-
:is_constituent_of => "isConstituentOf",
|
15
|
-
:has_constituent => "hasConstituent",
|
16
|
-
:is_subset_of => "isSubsetOf",
|
17
|
-
:has_subset => "hasSubset",
|
18
|
-
:is_derivation_of => "isDerivationOf",
|
19
|
-
:has_derivation => "hasDerivation",
|
20
|
-
:is_dependent_of => "isDependentOf",
|
21
|
-
:has_dependent => "hasDependent",
|
22
|
-
:is_description_of => "isDescriptionOf",
|
23
|
-
:has_description => "hasDescription",
|
24
|
-
:is_metadata_for => "isMetadataFor",
|
25
|
-
:has_metadata => "hasMetadata",
|
26
|
-
:is_annotation_of => "isAnnotationOf",
|
27
|
-
:has_annotation => "hasAnnotation",
|
28
|
-
:has_equivalent => "hasEquivalent",
|
29
|
-
:conforms_to => "conformsTo",
|
30
|
-
:has_model => "hasModel"]
|
31
|
-
PREDICATE_MAPPINGS.freeze
|
32
|
-
|
8
|
+
|
33
9
|
def self.included(klass)
|
34
10
|
klass.extend(ClassMethods)
|
35
11
|
end
|
12
|
+
|
36
13
|
def assert_kind_of(n, o,t)
|
37
14
|
raise "Assertion failure: #{n}: #{o} is not of type #{t}" unless o.kind_of?(t)
|
38
15
|
end
|
@@ -473,7 +450,7 @@ module ActiveFedora
|
|
473
450
|
# this object's RELS-EXT datastream
|
474
451
|
#
|
475
452
|
# Word of caution - The same predicate may not be used twice for two inbound or two outbound relationships. However, it may be used twice if one is inbound
|
476
|
-
# and one is outbound as shown in the example above. A full list of possible predicates are defined by
|
453
|
+
# and one is outbound as shown in the example above. A full list of possible predicates are defined by predicate_mappings
|
477
454
|
#
|
478
455
|
# For the oral_history relationship in the example above the following helper methods are created:
|
479
456
|
# oral_history: returns array of OralHistory objects that have this AudioRecord with predicate :has_part
|
@@ -759,19 +736,32 @@ module ActiveFedora
|
|
759
736
|
xml.to_s
|
760
737
|
end
|
761
738
|
|
762
|
-
# If predicate is a symbol, looks up the predicate in the
|
739
|
+
# If predicate is a symbol, looks up the predicate in the predicate_mappings
|
763
740
|
# If predicate is not a Symbol, returns the predicate untouched
|
764
|
-
# @throws UnregisteredPredicateError if the predicate is a symbol but is not found in the
|
765
|
-
def predicate_lookup(predicate)
|
741
|
+
# @throws UnregisteredPredicateError if the predicate is a symbol but is not found in the predicate_mappings
|
742
|
+
def predicate_lookup(predicate,namespace="info:fedora/fedora-system:def/relations-external#")
|
766
743
|
if predicate.class == Symbol
|
767
|
-
if
|
768
|
-
return
|
744
|
+
if predicate_mappings[namespace].has_key?(predicate)
|
745
|
+
return predicate_mappings[namespace][predicate]
|
769
746
|
else
|
770
747
|
throw UnregisteredPredicateError
|
771
748
|
end
|
772
749
|
end
|
773
750
|
return predicate
|
774
751
|
end
|
752
|
+
|
753
|
+
def predicate_config
|
754
|
+
@@predicate_config ||= YAML::load(File.open(ActiveFedora.predicate_config)) if File.exist?(ActiveFedora.predicate_config)
|
755
|
+
end
|
756
|
+
|
757
|
+
def predicate_mappings
|
758
|
+
predicate_config[:predicate_mapping]
|
759
|
+
end
|
760
|
+
|
761
|
+
def default_predicate_namespace
|
762
|
+
predicate_config[:default_namespace]
|
763
|
+
end
|
764
|
+
|
775
765
|
end
|
776
766
|
end
|
777
767
|
end
|
@@ -82,7 +82,8 @@ describe ActiveFedora::RelsExtDatastream do
|
|
82
82
|
end
|
83
83
|
|
84
84
|
it "should load relationships from fedora into parent object" do
|
85
|
-
ActiveFedora::SemanticNode
|
85
|
+
class SpecNode; include ActiveFedora::SemanticNode; end
|
86
|
+
SpecNode.predicate_mappings[SpecNode.default_predicate_namespace].each_key do |p|
|
86
87
|
@test_object.add_relationship(p, "demo:#{rand(100)}")
|
87
88
|
end
|
88
89
|
@test_object.save
|
@@ -90,7 +91,7 @@ describe ActiveFedora::RelsExtDatastream do
|
|
90
91
|
@test_object.relationships[:self].should have_key(:is_member_of)
|
91
92
|
ActiveFedora::Base.load_instance(@test_object.pid).relationships.should == @test_object.relationships
|
92
93
|
end
|
93
|
-
|
94
|
+
|
94
95
|
describe '#from_solr' do
|
95
96
|
|
96
97
|
it "should respond_to from_solr" do
|