active-fedora 3.1.6 → 3.2.0.pre1

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.
Files changed (44) hide show
  1. data/.gitignore +1 -0
  2. data/Gemfile.lock +22 -22
  3. data/History.txt +9 -3
  4. data/active-fedora.gemspec +3 -3
  5. data/config/predicate_mappings.yml +1 -0
  6. data/config/service_mappings.yml +9 -0
  7. data/lib/active_fedora.rb +7 -1
  8. data/lib/active_fedora/base.rb +84 -30
  9. data/lib/active_fedora/datastream.rb +4 -1
  10. data/lib/active_fedora/datastream_collections.rb +304 -293
  11. data/lib/active_fedora/metadata_datastream.rb +2 -24
  12. data/lib/active_fedora/metadata_datastream_helper.rb +32 -5
  13. data/lib/active_fedora/named_relationships.rb +95 -0
  14. data/lib/active_fedora/nested_attributes.rb +1 -1
  15. data/lib/active_fedora/predicates.rb +76 -0
  16. data/lib/active_fedora/reflection.rb +9 -1
  17. data/lib/active_fedora/relationship.rb +1 -0
  18. data/lib/active_fedora/relationship_graph.rb +152 -0
  19. data/lib/active_fedora/relationships_helper.rb +32 -41
  20. data/lib/active_fedora/rels_ext_datastream.rb +3 -10
  21. data/lib/active_fedora/semantic_node.rb +47 -203
  22. data/lib/active_fedora/service_definitions.rb +89 -0
  23. data/lib/active_fedora/unsaved_digital_object.rb +40 -0
  24. data/lib/active_fedora/version.rb +1 -1
  25. data/spec/integration/base_spec.rb +106 -309
  26. data/spec/integration/datastream_collections_spec.rb +135 -0
  27. data/spec/integration/rels_ext_datastream_spec.rb +14 -35
  28. data/spec/integration/semantic_node_spec.rb +6 -10
  29. data/spec/unit/base_datastream_management_spec.rb +0 -3
  30. data/spec/unit/base_extra_spec.rb +5 -9
  31. data/spec/unit/base_spec.rb +103 -57
  32. data/spec/unit/{base_named_datastream_spec.rb → datastream_collections_spec.rb} +107 -150
  33. data/spec/unit/metadata_datastream_spec.rb +0 -1
  34. data/spec/unit/nokogiri_datastream_spec.rb +0 -1
  35. data/spec/unit/predicates_spec.rb +64 -0
  36. data/spec/unit/qualified_dublin_core_datastream_spec.rb +0 -7
  37. data/spec/unit/relationship_graph_spec.rb +95 -0
  38. data/spec/unit/relationship_spec.rb +4 -4
  39. data/spec/unit/relationships_helper_spec.rb +43 -104
  40. data/spec/unit/rels_ext_datastream_spec.rb +6 -6
  41. data/spec/unit/semantic_node_spec.rb +27 -116
  42. data/spec/unit/service_definitions_spec.rb +52 -0
  43. data/spec/unit/solr_config_options_spec.rb +1 -1
  44. metadata +35 -17
@@ -0,0 +1,89 @@
1
+ module ActiveFedora
2
+ module ServiceDefinitions
3
+ def self.included(mod)
4
+ # check that it's an AF base
5
+ if mod.ancestors.include? ActiveFedora::Base
6
+ mod.extend(ClassMethods)
7
+ model_uri = mod.to_class_uri
8
+ # load ContentModel, pull Sdef pointers
9
+ begin
10
+ cmodel = ActiveFedora::ContentModel.load_instance(mod.to_class_uri)
11
+ sdef_pids = cmodel.ids_for_outbound(:has_service).collect { |uri|
12
+ uri.split('/')[-1]
13
+ }
14
+ rescue
15
+ sdef_pids = []
16
+ end
17
+ unless sdef_pids.include? "fedora-system:3"
18
+ sdef_pids << "fedora-system:3"
19
+ end
20
+ sdef_pids.each { |sdef_pid| mod.has_service_definition sdef_pid }
21
+ end
22
+ end
23
+ def self.sdef_config
24
+ @@methods ||= begin
25
+ if defined? Rails
26
+ config_path = Rails.root.join('config','service_mappings.yml')
27
+ else
28
+ config_path = 'config/service_mappings.yml'
29
+ end
30
+ YAML::load(File.open(config_path))[:service_mapping]
31
+ end
32
+ @@methods
33
+ end
34
+ def self.lookup_method(sdef_uri, method_name)
35
+ sdef_pid = sdef_uri.split('/')[-1]
36
+ begin
37
+ sdef = sdef_config[sdef_pid]
38
+ return nil unless sdef
39
+ result = nil
40
+ sdef.each { |key, value| result = key if method_name == value }
41
+ rescue
42
+ return nil
43
+ end
44
+ return result
45
+ end
46
+
47
+ module ClassMethods
48
+ def sdef_pids
49
+ @sdef_pids ||= []
50
+ end
51
+ def has_service_definition sdef_uri
52
+ sdef_pid = sdef_uri.split('/')[-1]
53
+ unless sdef_pids.include? sdef_pid
54
+ self.add_sdef_methods! sdef_pid
55
+ sdef_pids << sdef_pid
56
+ end
57
+ end
58
+ # iterate over SDef pointers, identify symbols in yaml map
59
+ # inject methods by symbol key
60
+ def add_sdef_methods! sdef_pid
61
+ unless sdef_pid == "fedora-system:3"
62
+ content = ActiveFedora::RubydoraConnection.instance.connection.datastream_dissemination(:pid=>sdef_pid, :dsid=>"METHODMAP")
63
+ method_map = Nokogiri::XML.parse(content)
64
+ methods = method_map.xpath('//fmm:Method').collect { |method|
65
+ method["operationName"]
66
+ }
67
+ else
68
+ methods = ["viewObjectProfile","viewMethodIndex","viewItemIndex","viewDublinCore"]
69
+ end
70
+ methods.each { |method|
71
+ add_method!(sdef_pid, method)
72
+ }
73
+ end
74
+ def add_method!(sdef_pid, method_name)
75
+ # find method_key
76
+ method_key = ServiceDefinitions.lookup_method(sdef_pid, method_name)
77
+ if method_key and not method_defined? method_key
78
+ define_method(method_key) { |*args, &block|
79
+ opts = args[0] || {}
80
+ opts = opts.merge({:pid => pid, :sdef => sdef_pid, :method => method_name })
81
+ repo = ActiveFedora::RubydoraConnection.instance.connection
82
+ # dispatch to the dissemination method on restAPI client
83
+ repo.dissemination opts, &block
84
+ }
85
+ end
86
+ end
87
+ end
88
+ end
89
+ end
@@ -0,0 +1,40 @@
1
+ module ActiveFedora
2
+ # Helps Rubydora create datastreams of the type defined by the ActiveFedora::Base#datastream_class_for_name
3
+ class UnsavedDigitalObject
4
+ attr_accessor :original_class, :datastreams, :label, :namespace
5
+
6
+ def initialize(original_class, namespace)
7
+ self.original_class = original_class
8
+ self.namespace = namespace
9
+ self.datastreams = {}
10
+ end
11
+
12
+ def pid
13
+ '__DO_NOT_USE__'
14
+ end
15
+
16
+ def new?
17
+ true
18
+ end
19
+
20
+ ### Change this into a real digital object
21
+ def save
22
+ obj = DigitalObject.find(self.original_class, assign_pid)
23
+ self.datastreams.each do |k, v|
24
+ v.digital_object = obj
25
+ obj.datastreams[k] = v
26
+ end
27
+ obj
28
+ end
29
+
30
+ def assign_pid
31
+ args = {}
32
+ args[:namespace] = self.namespace if self.namespace
33
+ RubydoraConnection.instance.nextid args
34
+ end
35
+
36
+
37
+
38
+ end
39
+ end
40
+
@@ -1,3 +1,3 @@
1
1
  module ActiveFedora
2
- VERSION = "3.1.6"
2
+ VERSION = "3.2.0.pre1"
3
3
  end
@@ -11,11 +11,6 @@ class MockAFBaseRelationship < ActiveFedora::Base
11
11
  has_relationship "testing3", :is_member_of_collection
12
12
  end
13
13
 
14
- class MockAFBaseDatastream < ActiveFedora::Base
15
- has_datastream :name=>"thumbnail",:prefix => "THUMB", :type=>ActiveFedora::Datastream, :mimeType=>"image/jpeg", :controlGroup=>'M'
16
- has_datastream :name=>"high", :type=>ActiveFedora::Datastream, :mimeType=>"image/jpeg", :controlGroup=>'M'
17
- end
18
-
19
14
  class MockAFBaseFromSolr < ActiveFedora::Base
20
15
  has_relationship "testing", :has_part, :type=>MockAFBaseFromSolr
21
16
  has_relationship "testing2", :has_member, :type=>MockAFBaseFromSolr
@@ -39,7 +34,7 @@ end
39
34
  describe "Datastreams synched together" do
40
35
  before do
41
36
  class DSTest < ActiveFedora::Base
42
- def configure_defined_datastreams
37
+ def load_datastreams
43
38
  super
44
39
  unless self.datastreams.keys.include? 'test_ds'
45
40
  add_file_datastream("XXX",:dsid=>'test_ds', :mimeType=>'text/html')
@@ -101,12 +96,6 @@ describe ActiveFedora::Base do
101
96
  @test_object.pid.should_not be_nil
102
97
  end
103
98
 
104
- it "passing namespace to constructor with no pid should generate a pid with the supplied namespace" do
105
- @test_object2 = ActiveFedora::Base.new({:namespace=>"randomNamespace"})
106
- #@test_object2.pid.match('changeme:\d+').to_a.first.should == @test_object2.pid
107
- # will be nil if match failed, otherwise will equal pid
108
- @test_object2.pid.match('randomNamespace:\d+').to_a.first.should == @test_object2.pid
109
- end
110
99
  end
111
100
 
112
101
  describe ".save" do
@@ -118,6 +107,13 @@ describe ActiveFedora::Base do
118
107
  @test_object2.delete
119
108
  end
120
109
 
110
+ it "passing namespace to constructor with no pid should generate a pid with the supplied namespace" do
111
+ @test_object2 = ActiveFedora::Base.new({:namespace=>"randomNamespace"})
112
+ # will be nil if match failed, otherwise will equal pid
113
+ @test_object2.save
114
+ @test_object2.pid.match('randomNamespace:\d+').to_a.first.should == @test_object2.pid
115
+ end
116
+
121
117
  it "should set the CMA hasModel relationship in the Rels-EXT" do
122
118
  @test_object2.save
123
119
  rexml = REXML::Document.new(@test_object2.datastreams["RELS-EXT"].content)
@@ -125,9 +121,9 @@ describe ActiveFedora::Base do
125
121
  rexml.root.elements["rdf:Description/ns0:hasModel"].attributes["rdf:resource"].should == 'info:fedora/afmodel:ActiveFedora_Base'
126
122
  end
127
123
  it "should merge attributes from fedora into attributes hash" do
124
+ @test_object2.save
128
125
  inner_object = @test_object2.inner_object
129
126
  inner_object.pid.should == @test_object2.pid
130
- @test_object2.save
131
127
  inner_object.should respond_to(:state)
132
128
  inner_object.should respond_to(:lastModifiedDate)
133
129
  inner_object.should respond_to(:ownerId)
@@ -231,12 +227,9 @@ describe ActiveFedora::Base do
231
227
 
232
228
  describe '.add_relationship' do
233
229
  it "should update the RELS-EXT datastream and relationships should end up in Fedora when the object is saved" do
234
- test_relationships = [ActiveFedora::Relationship.new(:subject => :self, :predicate => :is_member_of, :object => "info:fedora/demo:5"),
235
- ActiveFedora::Relationship.new(:subject => :self, :predicate => :is_member_of, :object => "info:fedora/demo:10"),
236
- ActiveFedora::Relationship.new(:subject => :self, :predicate => :conforms_to, :object => "info:fedora/afmodel:OralHistory")]
237
- test_relationships.each do |rel|
238
- @test_object.add_relationship(rel.predicate, rel.object)
239
- end
230
+ @test_object.add_relationship(:is_member_of, "info:fedora/demo:5")
231
+ @test_object.add_relationship(:is_member_of, "info:fedora/demo:10")
232
+ @test_object.add_relationship(:conforms_to, "info:fedora/afmodel:OralHistory")
240
233
  @test_object.save
241
234
  rexml = REXML::Document.new(@test_object.datastreams["RELS-EXT"].content)
242
235
  # Purpose: confirm that the isMemberOf entries exist and have real RDF in them
@@ -321,9 +314,11 @@ describe ActiveFedora::Base do
321
314
  describe "delete" do
322
315
 
323
316
  it "should delete the object from Fedora and Solr" do
317
+ @test_object.save
324
318
  ActiveFedora::Base.find_by_solr(@test_object.pid).hits.first["id"].should == @test_object.pid
319
+ pid = @test_object.pid # store so we can access it after deletion
325
320
  @test_object.delete
326
- ActiveFedora::Base.find_by_solr(@test_object.pid).hits.should be_empty
321
+ ActiveFedora::Base.find_by_solr(pid).hits.should be_empty
327
322
  end
328
323
 
329
324
  describe '#delete' do
@@ -347,24 +342,19 @@ describe ActiveFedora::Base do
347
342
  @test_object5.add_relationship_by_name("testing2",@test_object3)
348
343
  @test_object2.save
349
344
  @test_object5.save
350
- r2 = ActiveFedora::Relationship.new(:subject=>:self, :predicate=>:dummy, :object=>@test_object2)
351
- r3 = ActiveFedora::Relationship.new(:subject=>:self, :predicate=>:dummy, :object=>@test_object3)
352
- r4 = ActiveFedora::Relationship.new(:subject=>:self, :predicate=>:dummy, :object=>@test_object4)
353
- r5 = ActiveFedora::Relationship.new(:subject=>:self, :predicate=>:dummy, :object=>@test_object5)
354
- model_rel = ActiveFedora::Relationship.new(:subject=>:self, :predicate=>:dummy, :object=>ActiveFedora::ContentModel.pid_from_ruby_class(MockAFBaseRelationship))
355
345
  #check inbound correct, testing goes to :has_part and testing2 goes to :has_member
356
- @test_object2.relationships_by_name(false).should == {:inbound=>{"testing_inbound3"=>[], "testing_bidirectional_inbound"=>[], "parts_inbound"=>[], "testing_inbound"=>[r5.object], "testing_inbound2"=>[]}, :self=>{"testing2"=>[r4.object], "collection_members"=>[], "testing3"=>[], "part_of"=>[], "testing"=>[r3.object], "parts_outbound"=>[r3.object], "testing_bidirectional_outbound"=>[]}}
357
- @test_object3.relationships_by_name(false).should == {:inbound=>{"testing_inbound3"=>[], "testing_bidirectional_inbound"=>[], "parts_inbound"=>[], "testing_inbound"=>[r2.object], "testing_inbound2"=>[r5.object]}, :self=>{"testing2"=>[], "collection_members"=>[], "testing3"=>[], "part_of"=>[], "testing"=>[], "parts_outbound"=>[], "testing_bidirectional_outbound"=>[]}}
358
- @test_object4.relationships_by_name(false).should == {:inbound=>{"testing_inbound3"=>[], "testing_bidirectional_inbound"=>[], "parts_inbound"=>[], "testing_inbound"=>[], "testing_inbound2"=>[r2.object]}, :self=>{"testing2"=>[], "collection_members"=>[], "testing3"=>[], "part_of"=>[], "testing"=>[], "parts_outbound"=>[], "testing_bidirectional_outbound"=>[]}}
359
- @test_object5.relationships_by_name(false).should == {:inbound=>{"testing_inbound3"=>[], "testing_bidirectional_inbound"=>[], "parts_inbound"=>[], "testing_inbound"=>[], "testing_inbound2"=>[]}, :self=>{"testing2"=>[r3.object], "collection_members"=>[], "testing3"=>[], "part_of"=>[], "testing"=>[r2.object], "parts_outbound"=>[r2.object], "testing_bidirectional_outbound"=>[]}}
346
+ @test_object2.relationships_by_name(false).should == {:inbound=>{"testing_inbound3"=>[], "testing_bidirectional_inbound"=>[], "parts_inbound"=>[], "testing_inbound"=>[@test_object5.internal_uri], "testing_inbound2"=>[]}, :self=>{"testing2"=>[@test_object4.internal_uri], "collection_members"=>[], "testing3"=>[], "part_of"=>[], "testing"=>[@test_object3.internal_uri], "parts_outbound"=>[@test_object3.internal_uri], "testing_bidirectional_outbound"=>[]}}
347
+ @test_object3.relationships_by_name(false).should == {:inbound=>{"testing_inbound3"=>[], "testing_bidirectional_inbound"=>[], "parts_inbound"=>[], "testing_inbound"=>[@test_object2.internal_uri], "testing_inbound2"=>[@test_object5.internal_uri]}, :self=>{"testing2"=>[], "collection_members"=>[], "testing3"=>[], "part_of"=>[], "testing"=>[], "parts_outbound"=>[], "testing_bidirectional_outbound"=>[]}}
348
+ @test_object4.relationships_by_name(false).should == {:inbound=>{"testing_inbound3"=>[], "testing_bidirectional_inbound"=>[], "parts_inbound"=>[], "testing_inbound"=>[], "testing_inbound2"=>[@test_object2.internal_uri]}, :self=>{"testing2"=>[], "collection_members"=>[], "testing3"=>[], "part_of"=>[], "testing"=>[], "parts_outbound"=>[], "testing_bidirectional_outbound"=>[]}}
349
+ @test_object5.relationships_by_name(false).should == {:inbound=>{"testing_inbound3"=>[], "testing_bidirectional_inbound"=>[], "parts_inbound"=>[], "testing_inbound"=>[], "testing_inbound2"=>[]}, :self=>{"testing2"=>[@test_object3.internal_uri], "collection_members"=>[], "testing3"=>[], "part_of"=>[], "testing"=>[@test_object2.internal_uri], "parts_outbound"=>[@test_object2.internal_uri], "testing_bidirectional_outbound"=>[]}}
360
350
  @test_object2.delete
361
351
  #need to reload since removed from rels_ext in memory
362
352
  @test_object5 = MockAFBaseRelationship.load_instance(@test_object5.pid)
363
353
 
364
354
  #check any test_object2 inbound rels gone from source
365
- @test_object3.relationships_by_name(false).should == {:inbound=>{"testing_inbound3"=>[], "testing_bidirectional_inbound"=>[], "parts_inbound"=>[], "testing_inbound"=>[], "testing_inbound2"=>[r5.object]}, :self=>{"testing2"=>[], "collection_members"=>[], "testing3"=>[], "part_of"=>[], "testing"=>[], "parts_outbound"=>[], "testing_bidirectional_outbound"=>[]}}
355
+ @test_object3.relationships_by_name(false).should == {:inbound=>{"testing_inbound3"=>[], "testing_bidirectional_inbound"=>[], "parts_inbound"=>[], "testing_inbound"=>[], "testing_inbound2"=>[@test_object5.internal_uri]}, :self=>{"testing2"=>[], "collection_members"=>[], "testing3"=>[], "part_of"=>[], "testing"=>[], "parts_outbound"=>[], "testing_bidirectional_outbound"=>[]}}
366
356
  @test_object4.relationships_by_name(false).should == {:inbound=>{"testing_inbound3"=>[], "testing_bidirectional_inbound"=>[], "parts_inbound"=>[], "testing_inbound"=>[], "testing_inbound2"=>[]}, :self=>{"testing2"=>[], "collection_members"=>[], "testing3"=>[], "part_of"=>[], "testing"=>[], "parts_outbound"=>[], "testing_bidirectional_outbound"=>[]}}
367
- @test_object5.relationships_by_name(false).should == {:inbound=>{"testing_inbound3"=>[], "testing_bidirectional_inbound"=>[], "parts_inbound"=>[], "testing_inbound"=>[], "testing_inbound2"=>[]}, :self=>{"testing2"=>[r3.object], "collection_members"=>[], "testing3"=>[], "part_of"=>[], "testing"=>[], "parts_outbound"=>[], "testing_bidirectional_outbound"=>[]}}
357
+ @test_object5.relationships_by_name(false).should == {:inbound=>{"testing_inbound3"=>[], "testing_bidirectional_inbound"=>[], "parts_inbound"=>[], "testing_inbound"=>[], "testing_inbound2"=>[]}, :self=>{"testing2"=>[@test_object3.internal_uri], "collection_members"=>[], "testing3"=>[], "part_of"=>[], "testing"=>[], "parts_outbound"=>[], "testing_bidirectional_outbound"=>[]}}
368
358
  end
369
359
  end
370
360
 
@@ -373,6 +363,7 @@ describe ActiveFedora::Base do
373
363
  describe '#remove_relationship' do
374
364
  it 'should remove a relationship from an object after a save' do
375
365
  @test_object2 = ActiveFedora::Base.new
366
+ @test_object2.save
376
367
  @test_object.add_relationship(:has_part,@test_object2)
377
368
  @test_object.save
378
369
  @pid = @test_object.pid
@@ -382,16 +373,11 @@ describe ActiveFedora::Base do
382
373
  puts "#{e.message}\n#{e.backtrace}"
383
374
  raise e
384
375
  end
385
- #use dummy relationships just to get correct formatting for expected objects
386
- r = ActiveFedora::Relationship.new(:subject=>:self, :predicate=>:dummy, :object=>@test_object2)
387
- model_rel = ActiveFedora::Relationship.new(:subject=>:self, :predicate=>:dummy, :object=>ActiveFedora::ContentModel.pid_from_ruby_class(ActiveFedora::Base))
388
- # @test_object.relationships.should == {:self=>{:has_model=>[model_rel.object], :has_part=>[r.object]}}
389
- stmt = @test_object.build_statement(@test_object.internal_uri, :has_part, r.object)
390
- @test_object.relationships.has_statement?(stmt).should be_true
376
+ @test_object.object_relations[:has_part].should include @test_object2.internal_uri
391
377
  @test_object.remove_relationship(:has_part,@test_object2)
392
378
  @test_object.save
393
379
  @test_object = ActiveFedora::Base.load_instance(@pid)
394
- @test_object.relationships.has_statement?(stmt).should be_false
380
+ @test_object.object_relations[:has_part].should be_nil
395
381
  end
396
382
  end
397
383
 
@@ -414,64 +400,38 @@ describe ActiveFedora::Base do
414
400
  @test_object5.testing_bidirectional_append(@test_object4)
415
401
  @test_object2.save
416
402
  @test_object5.save
417
- r2 = ActiveFedora::Relationship.new(:subject=>:self, :predicate=>:dummy, :object=>@test_object2)
418
- r3 = ActiveFedora::Relationship.new(:subject=>:self, :predicate=>:dummy, :object=>@test_object3)
419
- r4 = ActiveFedora::Relationship.new(:subject=>:self, :predicate=>:dummy, :object=>@test_object4)
420
- r5 = ActiveFedora::Relationship.new(:subject=>:self, :predicate=>:dummy, :object=>@test_object5)
421
- model_rel = ActiveFedora::Relationship.new(:subject=>:self, :predicate=>:dummy, :object=>ActiveFedora::ContentModel.pid_from_ruby_class(MockAFBaseRelationship))
403
+ model_rel = ActiveFedora::ContentModel.pid_from_ruby_class(MockAFBaseRelationship)
422
404
  #check inbound correct, testing goes to :has_part and testing2 goes to :has_member
423
- stmt = @test_object2.build_statement(@test_object2.internal_uri, :has_model, model_rel.object)
424
- @test_object2.relationships.has_statement?(stmt).should be_true
425
- stmt = @test_object2.build_statement(@test_object2.internal_uri, :has_part, r3.object)
426
- @test_object2.relationships.has_statement?(stmt).should be_true
427
- stmt = @test_object2.build_statement(@test_object2.internal_uri, :has_member, r4.object)
428
- @test_object2.relationships.has_statement?(stmt).should be_true
429
- stmt = @test_object2.build_statement(@test_object2.internal_uri, :is_member_of_collection, r5.object)
430
- @test_object2.relationships.has_statement?(stmt).should be_true
431
- @test_object2.inbound_relationships.should == {:has_part=>[r5.object]}
432
- stmt = @test_object3.build_statement(@test_object3.internal_uri, :has_model, model_rel.object)
433
- @test_object3.relationships.has_statement?(stmt).should be_true
434
- @test_object3.inbound_relationships.should == {:has_part=>[r2.object],
435
- :has_member=>[r5.object]}
436
- stmt = @test_object4.build_statement(@test_object4.internal_uri, :has_model, model_rel.object)
437
- @test_object4.relationships.has_statement?(stmt).should be_true
438
- @test_object4.inbound_relationships.should == {:has_member=>[r2.object],:has_collection_member=>[r5.object]}
405
+ @test_object2.object_relations[:has_model].should include model_rel
406
+ @test_object2.object_relations[:has_part].should include @test_object3
407
+
408
+ @test_object2.object_relations[:has_member].should include @test_object4
409
+ @test_object2.object_relations[:is_member_of_collection].should include @test_object5
410
+ @test_object2.inbound_relationships.should == {:has_part=>[@test_object5.internal_uri]}
411
+
412
+ @test_object3.object_relations[:has_model].should include model_rel
413
+ @test_object3.inbound_relationships.should == {:has_part=>[@test_object2.internal_uri],
414
+ :has_member=>[@test_object5.internal_uri]}
415
+ @test_object4.object_relations[:has_model].should include model_rel
416
+ @test_object4.inbound_relationships.should == {:has_member=>[@test_object2.internal_uri],:has_collection_member=>[@test_object5.internal_uri]}
439
417
 
440
- stmt = @test_object5.build_statement(@test_object5.internal_uri, :has_model, model_rel.object)
441
- @test_object5.relationships.has_statement?(stmt).should be_true
442
- stmt = @test_object5.build_statement(@test_object5.internal_uri, :has_part, r2.object)
443
- @test_object5.relationships.has_statement?(stmt).should be_true
444
- stmt = @test_object5.build_statement(@test_object5.internal_uri, :has_member, r3.object)
445
- @test_object5.relationships.has_statement?(stmt).should be_true
446
- stmt = @test_object5.build_statement(@test_object5.internal_uri, :has_collection_member, r4.object)
447
- @test_object5.relationships.has_statement?(stmt).should be_true
448
- @test_object5.inbound_relationships.should == {:is_member_of_collection=>[r2.object]}
449
- # @test_object2.outbound_relationships.should == {:has_model=>[model_rel.object],
450
- # :has_part=>[r3.object],
451
- # :has_member=>[r4.object],
452
- # :is_member_of_collection=>[r5.object]}
453
- # @test_object3.outbound_relationships.should == {:has_model=>[model_rel.object]}
454
- # @test_object4.outbound_relationships.should == {:has_model=>[model_rel.object]}
455
- # @test_object5.outbound_relationships.should == {:has_model=>[model_rel.object],
456
- # :has_part=>[r2.object],
457
- # :has_member=>[r3.object],
458
- # :has_collection_member=>[r4.object]}
418
+ @test_object5.object_relations[:has_model].should include model_rel
419
+ @test_object5.object_relations[:has_part].should include @test_object2
420
+ @test_object5.object_relations[:has_member].should include @test_object3
421
+ @test_object5.object_relations[:has_collection_member].should include @test_object4
422
+ @test_object5.inbound_relationships.should == {:is_member_of_collection=>[@test_object2.internal_uri]}
459
423
  end
460
424
  end
461
425
 
462
426
  describe '#inbound_relationships' do
463
427
  it 'should return a hash of inbound relationships' do
464
428
  @test_object2 = MockAFBaseRelationship.new
465
- #@test_object2.new_object = true
466
429
  @test_object2.save
467
430
  @test_object3 = MockAFBaseRelationship.new
468
- #@test_object3.new_object = true
469
431
  @test_object3.save
470
432
  @test_object4 = MockAFBaseRelationship.new
471
- #@test_object4.new_object = true
472
433
  @test_object4.save
473
434
  @test_object5 = MockAFBaseRelationship.new
474
- #@test_object5.new_object = true
475
435
  @test_object5.save
476
436
  #append to named relationship 'testing'
477
437
  @test_object2.testing_append(@test_object3)
@@ -481,15 +441,10 @@ describe ActiveFedora::Base do
481
441
  #@test_object5.testing_bidirectional_append(@test_object4)
482
442
  @test_object2.save
483
443
  @test_object5.save
484
- r2 = ActiveFedora::Relationship.new(:subject=>:self, :predicate=>:dummy, :object=>@test_object2)
485
- r3 = ActiveFedora::Relationship.new(:subject=>:self, :predicate=>:dummy, :object=>@test_object3)
486
- r4 = ActiveFedora::Relationship.new(:subject=>:self, :predicate=>:dummy, :object=>@test_object4)
487
- r5 = ActiveFedora::Relationship.new(:subject=>:self, :predicate=>:dummy, :object=>@test_object5)
488
- model_rel = ActiveFedora::Relationship.new(:subject=>:self, :predicate=>:dummy, :object=>ActiveFedora::ContentModel.pid_from_ruby_class(MockAFBaseRelationship))
489
444
  #check inbound correct, testing goes to :has_part and testing2 goes to :has_member
490
- @test_object2.inbound_relationships.should == {:has_part=>[r5.object]}
491
- @test_object3.inbound_relationships.should == {:has_part=>[r2.object],:has_member=>[r5.object]}
492
- @test_object4.inbound_relationships.should == {:has_member=>[r2.object]}
445
+ @test_object2.inbound_relationships.should == {:has_part=>[@test_object5.internal_uri]}
446
+ @test_object3.inbound_relationships.should == {:has_part=>[@test_object2.internal_uri],:has_member=>[@test_object5.internal_uri]}
447
+ @test_object4.inbound_relationships.should == {:has_member=>[@test_object2.internal_uri]}
493
448
  @test_object5.inbound_relationships.should == {}
494
449
  end
495
450
  end
@@ -497,16 +452,12 @@ describe ActiveFedora::Base do
497
452
  describe '#inbound_relationships_by_name' do
498
453
  it 'should return a hash of inbound relationship names to array of objects' do
499
454
  @test_object2 = MockAFBaseRelationship.new
500
- #@test_object2.new_object = true
501
455
  @test_object2.save
502
456
  @test_object3 = MockAFBaseRelationship.new
503
- #@test_object3.new_object = true
504
457
  @test_object3.save
505
458
  @test_object4 = MockAFBaseRelationship.new
506
- #@test_object4.new_object = true
507
459
  @test_object4.save
508
460
  @test_object5 = MockAFBaseRelationship.new
509
- #@test_object5.new_object = true
510
461
  @test_object5.save
511
462
  #append to named relationship 'testing'
512
463
  @test_object2.testing_append(@test_object3)
@@ -515,17 +466,12 @@ describe ActiveFedora::Base do
515
466
  @test_object5.testing2_append(@test_object3)
516
467
  @test_object2.save
517
468
  @test_object5.save
518
- r2 = ActiveFedora::Relationship.new(:subject=>:self, :predicate=>:dummy, :object=>@test_object2)
519
- r3 = ActiveFedora::Relationship.new(:subject=>:self, :predicate=>:dummy, :object=>@test_object3)
520
- r4 = ActiveFedora::Relationship.new(:subject=>:self, :predicate=>:dummy, :object=>@test_object4)
521
- r5 = ActiveFedora::Relationship.new(:subject=>:self, :predicate=>:dummy, :object=>@test_object5)
522
- model_rel = ActiveFedora::Relationship.new(:subject=>:self, :predicate=>:dummy, :object=>ActiveFedora::ContentModel.pid_from_ruby_class(MockAFBaseRelationship))
523
469
  #check inbound correct, testing goes to :has_part and testing2 goes to :has_member
524
- @test_object2.inbound_relationships_by_name.should == {"testing_inbound"=>[r5.object],"testing_inbound2"=>[],
470
+ @test_object2.inbound_relationships_by_name.should == {"testing_inbound"=>[@test_object5.internal_uri],"testing_inbound2"=>[],
525
471
  "testing_bidirectional_inbound"=>[],"testing_inbound3"=>[], "parts_inbound" => []}
526
- @test_object3.inbound_relationships_by_name.should == {"testing_inbound"=>[r2.object],"testing_inbound2"=>[r5.object],
472
+ @test_object3.inbound_relationships_by_name.should == {"testing_inbound"=>[@test_object2.internal_uri],"testing_inbound2"=>[@test_object5.internal_uri],
527
473
  "testing_bidirectional_inbound"=>[],"testing_inbound3"=>[], "parts_inbound" => []}
528
- @test_object4.inbound_relationships_by_name.should == {"testing_inbound"=>[],"testing_inbound2"=>[r2.object],
474
+ @test_object4.inbound_relationships_by_name.should == {"testing_inbound"=>[],"testing_inbound2"=>[@test_object2.internal_uri],
529
475
  "testing_bidirectional_inbound"=>[],"testing_inbound3"=>[], "parts_inbound" => []}
530
476
  @test_object5.inbound_relationships_by_name.should == {"testing_inbound"=>[],"testing_inbound2"=>[],
531
477
  "testing_bidirectional_inbound"=>[],"testing_inbound3"=>[], "parts_inbound" => []}
@@ -535,16 +481,12 @@ describe ActiveFedora::Base do
535
481
  describe '#relationships_by_name' do
536
482
  it '' do
537
483
  @test_object2 = MockAFBaseRelationship.new
538
- #@test_object2.new_object = true
539
484
  @test_object2.save
540
485
  @test_object3 = MockAFBaseRelationship.new
541
- #@test_object3.new_object = true
542
486
  @test_object3.save
543
487
  @test_object4 = MockAFBaseRelationship.new
544
- #@test_object4.new_object = true
545
488
  @test_object4.save
546
489
  @test_object5 = MockAFBaseRelationship.new
547
- #@test_object5.new_object = true
548
490
  @test_object5.save
549
491
  #append to named relationship 'testing'
550
492
  @test_object2.testing_append(@test_object3)
@@ -553,21 +495,16 @@ describe ActiveFedora::Base do
553
495
  @test_object5.testing2_append(@test_object3)
554
496
  @test_object2.save
555
497
  @test_object5.save
556
- r2 = ActiveFedora::Relationship.new(:subject=>:self, :predicate=>:dummy, :object=>@test_object2)
557
- r3 = ActiveFedora::Relationship.new(:subject=>:self, :predicate=>:dummy, :object=>@test_object3)
558
- r4 = ActiveFedora::Relationship.new(:subject=>:self, :predicate=>:dummy, :object=>@test_object4)
559
- r5 = ActiveFedora::Relationship.new(:subject=>:self, :predicate=>:dummy, :object=>@test_object5)
560
- model_rel = ActiveFedora::Relationship.new(:subject=>:self, :predicate=>:dummy, :object=>ActiveFedora::ContentModel.pid_from_ruby_class(MockAFBaseRelationship))
561
498
  #check inbound correct, testing goes to :has_part and testing2 goes to :has_member
562
- @test_object2.relationships_by_name(false).should == {:inbound=>{"testing_inbound3"=>[], "testing_bidirectional_inbound"=>[], "parts_inbound"=>[], "testing_inbound"=>[r5.object], "testing_inbound2"=>[]}, :self=>{"testing2"=>[r4.object], "collection_members"=>[], "testing3"=>[], "part_of"=>[], "testing"=>[r3.object], "parts_outbound"=>[r3.object], "testing_bidirectional_outbound"=>[]}}
563
- @test_object3.relationships_by_name(false).should == {:inbound=>{"testing_inbound3"=>[], "testing_bidirectional_inbound"=>[], "parts_inbound"=>[], "testing_inbound"=>[r2.object], "testing_inbound2"=>[r5.object]}, :self=>{"testing2"=>[], "collection_members"=>[], "testing3"=>[], "part_of"=>[], "testing"=>[], "parts_outbound"=>[], "testing_bidirectional_outbound"=>[]}}
564
- @test_object4.relationships_by_name(false).should == {:inbound=>{"testing_inbound3"=>[], "testing_bidirectional_inbound"=>[], "parts_inbound"=>[], "testing_inbound"=>[], "testing_inbound2"=>[r2.object]}, :self=>{"testing2"=>[], "collection_members"=>[], "testing3"=>[], "part_of"=>[], "testing"=>[], "parts_outbound"=>[], "testing_bidirectional_outbound"=>[]}}
565
- @test_object5.relationships_by_name(false).should == {:inbound=>{"testing_inbound3"=>[], "testing_bidirectional_inbound"=>[], "parts_inbound"=>[], "testing_inbound"=>[], "testing_inbound2"=>[]}, :self=>{"testing2"=>[r3.object], "collection_members"=>[], "testing3"=>[], "part_of"=>[], "testing"=>[r2.object], "parts_outbound"=>[r2.object], "testing_bidirectional_outbound"=>[]}}
499
+ @test_object2.relationships_by_name(false).should == {:inbound=>{"testing_inbound3"=>[], "testing_bidirectional_inbound"=>[], "parts_inbound"=>[], "testing_inbound"=>[@test_object5.internal_uri], "testing_inbound2"=>[]}, :self=>{"testing2"=>[@test_object4.internal_uri], "collection_members"=>[], "testing3"=>[], "part_of"=>[], "testing"=>[@test_object3.internal_uri], "parts_outbound"=>[@test_object3.internal_uri], "testing_bidirectional_outbound"=>[]}}
500
+ @test_object3.relationships_by_name(false).should == {:inbound=>{"testing_inbound3"=>[], "testing_bidirectional_inbound"=>[], "parts_inbound"=>[], "testing_inbound"=>[@test_object2.internal_uri], "testing_inbound2"=>[@test_object5.internal_uri]}, :self=>{"testing2"=>[], "collection_members"=>[], "testing3"=>[], "part_of"=>[], "testing"=>[], "parts_outbound"=>[], "testing_bidirectional_outbound"=>[]}}
501
+ @test_object4.relationships_by_name(false).should == {:inbound=>{"testing_inbound3"=>[], "testing_bidirectional_inbound"=>[], "parts_inbound"=>[], "testing_inbound"=>[], "testing_inbound2"=>[@test_object2.internal_uri]}, :self=>{"testing2"=>[], "collection_members"=>[], "testing3"=>[], "part_of"=>[], "testing"=>[], "parts_outbound"=>[], "testing_bidirectional_outbound"=>[]}}
502
+ @test_object5.relationships_by_name(false).should == {:inbound=>{"testing_inbound3"=>[], "testing_bidirectional_inbound"=>[], "parts_inbound"=>[], "testing_inbound"=>[], "testing_inbound2"=>[]}, :self=>{"testing2"=>[@test_object3.internal_uri], "collection_members"=>[], "testing3"=>[], "part_of"=>[], "testing"=>[@test_object2.internal_uri], "parts_outbound"=>[@test_object2.internal_uri], "testing_bidirectional_outbound"=>[]}}
566
503
  #all inbound should now be empty if no parameter supplied to relationships
567
- @test_object2.relationships_by_name.should == {:self=>{"testing2"=>[r4.object], "collection_members"=>[], "testing3"=>[], "part_of"=>[], "testing"=>[r3.object], "parts_outbound"=>[r3.object], "testing_bidirectional_outbound"=>[]}}
504
+ @test_object2.relationships_by_name.should == {:self=>{"testing2"=>[@test_object4.internal_uri], "collection_members"=>[], "testing3"=>[], "part_of"=>[], "testing"=>[@test_object3.internal_uri], "parts_outbound"=>[@test_object3.internal_uri], "testing_bidirectional_outbound"=>[]}}
568
505
  @test_object3.relationships_by_name.should == {:self=>{"testing2"=>[], "collection_members"=>[], "testing3"=>[], "part_of"=>[], "testing"=>[], "parts_outbound"=>[], "testing_bidirectional_outbound"=>[]}}
569
506
  @test_object4.relationships_by_name.should == {:self=>{"testing2"=>[], "collection_members"=>[], "testing3"=>[], "part_of"=>[], "testing"=>[], "parts_outbound"=>[], "testing_bidirectional_outbound"=>[]}}
570
- @test_object5.relationships_by_name.should == {:self=>{"testing2"=>[r3.object], "collection_members"=>[], "testing3"=>[], "part_of"=>[], "testing"=>[r2.object], "parts_outbound"=>[r2.object], "testing_bidirectional_outbound"=>[]}}
507
+ @test_object5.relationships_by_name.should == {:self=>{"testing2"=>[@test_object3.internal_uri], "collection_members"=>[], "testing3"=>[], "part_of"=>[], "testing"=>[@test_object2.internal_uri], "parts_outbound"=>[@test_object2.internal_uri], "testing_bidirectional_outbound"=>[]}}
571
508
  end
572
509
  end
573
510
 
@@ -592,16 +529,11 @@ describe ActiveFedora::Base do
592
529
  @test_object5.add_relationship_by_name("testing2",@test_object3)
593
530
  @test_object2.save
594
531
  @test_object5.save
595
- r2 = ActiveFedora::Relationship.new(:subject=>:self, :predicate=>:dummy, :object=>@test_object2)
596
- r3 = ActiveFedora::Relationship.new(:subject=>:self, :predicate=>:dummy, :object=>@test_object3)
597
- r4 = ActiveFedora::Relationship.new(:subject=>:self, :predicate=>:dummy, :object=>@test_object4)
598
- r5 = ActiveFedora::Relationship.new(:subject=>:self, :predicate=>:dummy, :object=>@test_object5)
599
- model_rel = ActiveFedora::Relationship.new(:subject=>:self, :predicate=>:dummy, :object=>ActiveFedora::ContentModel.pid_from_ruby_class(MockAFBaseRelationship))
600
532
  #check inbound correct, testing goes to :has_part and testing2 goes to :has_member
601
- @test_object2.relationships_by_name(false).should == {:inbound=>{"testing_inbound3"=>[], "testing_bidirectional_inbound"=>[], "parts_inbound"=>[], "testing_inbound"=>[r5.object], "testing_inbound2"=>[]}, :self=>{"testing2"=>[r4.object], "collection_members"=>[], "testing3"=>[], "part_of"=>[], "testing"=>[r3.object], "parts_outbound"=>[r3.object], "testing_bidirectional_outbound"=>[]}}
602
- @test_object3.relationships_by_name(false).should == {:inbound=>{"testing_inbound3"=>[], "testing_bidirectional_inbound"=>[], "parts_inbound"=>[], "testing_inbound"=>[r2.object], "testing_inbound2"=>[r5.object]}, :self=>{"testing2"=>[], "collection_members"=>[], "testing3"=>[], "part_of"=>[], "testing"=>[], "parts_outbound"=>[], "testing_bidirectional_outbound"=>[]}}
603
- @test_object4.relationships_by_name(false).should == {:inbound=>{"testing_inbound3"=>[], "testing_bidirectional_inbound"=>[], "parts_inbound"=>[], "testing_inbound"=>[], "testing_inbound2"=>[r2.object]}, :self=>{"testing2"=>[], "collection_members"=>[], "testing3"=>[], "part_of"=>[], "testing"=>[], "parts_outbound"=>[], "testing_bidirectional_outbound"=>[]}}
604
- @test_object5.relationships_by_name(false).should == {:inbound=>{"testing_inbound3"=>[], "testing_bidirectional_inbound"=>[], "parts_inbound"=>[], "testing_inbound"=>[], "testing_inbound2"=>[]}, :self=>{"testing2"=>[r3.object], "collection_members"=>[], "testing3"=>[], "part_of"=>[], "testing"=>[r2.object], "parts_outbound"=>[r2.object], "testing_bidirectional_outbound"=>[]}}
533
+ @test_object2.relationships_by_name(false).should == {:inbound=>{"testing_inbound3"=>[], "testing_bidirectional_inbound"=>[], "parts_inbound"=>[], "testing_inbound"=>[@test_object5.internal_uri], "testing_inbound2"=>[]}, :self=>{"testing2"=>[@test_object4.internal_uri], "collection_members"=>[], "testing3"=>[], "part_of"=>[], "testing"=>[@test_object3.internal_uri], "parts_outbound"=>[@test_object3.internal_uri], "testing_bidirectional_outbound"=>[]}}
534
+ @test_object3.relationships_by_name(false).should == {:inbound=>{"testing_inbound3"=>[], "testing_bidirectional_inbound"=>[], "parts_inbound"=>[], "testing_inbound"=>[@test_object2.internal_uri], "testing_inbound2"=>[@test_object5.internal_uri]}, :self=>{"testing2"=>[], "collection_members"=>[], "testing3"=>[], "part_of"=>[], "testing"=>[], "parts_outbound"=>[], "testing_bidirectional_outbound"=>[]}}
535
+ @test_object4.relationships_by_name(false).should == {:inbound=>{"testing_inbound3"=>[], "testing_bidirectional_inbound"=>[], "parts_inbound"=>[], "testing_inbound"=>[], "testing_inbound2"=>[@test_object2.internal_uri]}, :self=>{"testing2"=>[], "collection_members"=>[], "testing3"=>[], "part_of"=>[], "testing"=>[], "parts_outbound"=>[], "testing_bidirectional_outbound"=>[]}}
536
+ @test_object5.relationships_by_name(false).should == {:inbound=>{"testing_inbound3"=>[], "testing_bidirectional_inbound"=>[], "parts_inbound"=>[], "testing_inbound"=>[], "testing_inbound2"=>[]}, :self=>{"testing2"=>[@test_object3.internal_uri], "collection_members"=>[], "testing3"=>[], "part_of"=>[], "testing"=>[@test_object2.internal_uri], "parts_outbound"=>[@test_object2.internal_uri], "testing_bidirectional_outbound"=>[]}}
605
537
  end
606
538
  end
607
539
 
@@ -626,28 +558,24 @@ describe ActiveFedora::Base do
626
558
  @test_object5.add_relationship_by_name("testing2",@test_object3)
627
559
  @test_object2.save
628
560
  @test_object5.save
629
- r2 = ActiveFedora::Relationship.new(:subject=>:self, :predicate=>:dummy, :object=>@test_object2)
630
- r3 = ActiveFedora::Relationship.new(:subject=>:self, :predicate=>:dummy, :object=>@test_object3)
631
- r4 = ActiveFedora::Relationship.new(:subject=>:self, :predicate=>:dummy, :object=>@test_object4)
632
- r5 = ActiveFedora::Relationship.new(:subject=>:self, :predicate=>:dummy, :object=>@test_object5)
633
- model_rel = ActiveFedora::Relationship.new(:subject=>:self, :predicate=>:dummy, :object=>ActiveFedora::ContentModel.pid_from_ruby_class(MockAFBaseRelationship))
634
561
  #check inbound correct, testing goes to :has_part and testing2 goes to :has_member
635
- @test_object2.relationships_by_name(false).should == {:self=>{"testing"=>[r3.object],
636
- "testing2"=>[r4.object],
562
+ @test_object2.relationships_by_name(false).should == {:self=>{"testing"=>[@test_object3.internal_uri],
563
+ "testing2"=>[@test_object4.internal_uri],
637
564
  "testing_bidirectional_outbound"=>[],"testing3"=>[],
638
- "collection_members"=>[], "part_of"=>[], "parts_outbound"=>[r3.object]},
639
- :inbound=>{"testing_inbound"=>[r5.object],"testing_inbound2"=>[],
565
+ "collection_members"=>[], "part_of"=>[], "parts_outbound"=>[@test_object3.internal_uri]},
566
+ :inbound=>{"testing_inbound"=>[@test_object5.internal_uri],"testing_inbound2"=>[],
640
567
  "testing_bidirectional_inbound"=>[],"testing_inbound3"=>[], "parts_inbound"=>[]}}
641
- @test_object3.relationships_by_name(false).should == {:inbound=>{"testing_inbound3"=>[], "testing_bidirectional_inbound"=>[], "parts_inbound"=>[], "testing_inbound"=>[r2.object], "testing_inbound2"=>[r5.object]}, :self=>{"testing2"=>[], "collection_members"=>[], "testing3"=>[], "part_of"=>[], "testing"=>[], "parts_outbound"=>[], "testing_bidirectional_outbound"=>[]}}
642
- @test_object4.relationships_by_name(false).should == {:inbound=>{"testing_inbound3"=>[], "testing_bidirectional_inbound"=>[], "parts_inbound"=>[], "testing_inbound"=>[], "testing_inbound2"=>[r2.object]}, :self=>{"testing2"=>[], "collection_members"=>[], "testing3"=>[], "part_of"=>[], "testing"=>[], "parts_outbound"=>[], "testing_bidirectional_outbound"=>[]}}
643
- @test_object5.relationships_by_name(false).should == {:inbound=>{"testing_inbound3"=>[], "testing_bidirectional_inbound"=>[], "parts_inbound"=>[], "testing_inbound"=>[], "testing_inbound2"=>[]}, :self=>{"testing2"=>[r3.object], "collection_members"=>[], "testing3"=>[], "part_of"=>[], "testing"=>[r2.object], "parts_outbound"=>[r2.object], "testing_bidirectional_outbound"=>[]}}
644
- @test_object2.remove_relationship_by_name("testing",@test_object3)
568
+ @test_object3.relationships_by_name(false).should == {:inbound=>{"testing_inbound3"=>[], "testing_bidirectional_inbound"=>[], "parts_inbound"=>[], "testing_inbound"=>[@test_object2.internal_uri], "testing_inbound2"=>[@test_object5.internal_uri]}, :self=>{"testing2"=>[], "collection_members"=>[], "testing3"=>[], "part_of"=>[], "testing"=>[], "parts_outbound"=>[], "testing_bidirectional_outbound"=>[]}}
569
+ @test_object4.relationships_by_name(false).should == {:inbound=>{"testing_inbound3"=>[], "testing_bidirectional_inbound"=>[], "parts_inbound"=>[], "testing_inbound"=>[], "testing_inbound2"=>[@test_object2.internal_uri]}, :self=>{"testing2"=>[], "collection_members"=>[], "testing3"=>[], "part_of"=>[], "testing"=>[], "parts_outbound"=>[], "testing_bidirectional_outbound"=>[]}}
570
+ @test_object5.relationships_by_name(false).should == {:inbound=>{"testing_inbound3"=>[], "testing_bidirectional_inbound"=>[], "parts_inbound"=>[], "testing_inbound"=>[], "testing_inbound2"=>[]}, :self=>{"testing2"=>[@test_object3.internal_uri], "collection_members"=>[], "testing3"=>[], "part_of"=>[], "testing"=>[@test_object2.internal_uri], "parts_outbound"=>[@test_object2.internal_uri], "testing_bidirectional_outbound"=>[]}}
571
+ @test_object2.remove_relationship_by_name("testing",@test_object3.internal_uri)
645
572
  @test_object2.save
646
573
  #check now removed for both outbound and inbound
647
- @test_object2.relationships_by_name(false).should == {:inbound=>{"testing_inbound3"=>[], "testing_bidirectional_inbound"=>[], "parts_inbound"=>[], "testing_inbound"=>[r5.object], "testing_inbound2"=>[]}, :self=>{"testing2"=>[r4.object], "collection_members"=>[], "testing3"=>[], "part_of"=>[], "testing"=>[], "parts_outbound"=>[], "testing_bidirectional_outbound"=>[]}}
648
- @test_object3.relationships_by_name(false).should == {:inbound=>{"testing_inbound3"=>[], "testing_bidirectional_inbound"=>[], "parts_inbound"=>[], "testing_inbound"=>[], "testing_inbound2"=>[r5.object]}, :self=>{"testing2"=>[], "collection_members"=>[], "testing3"=>[], "part_of"=>[], "testing"=>[], "parts_outbound"=>[], "testing_bidirectional_outbound"=>[]}}
649
- @test_object4.relationships_by_name(false).should == {:inbound=>{"testing_inbound3"=>[], "testing_bidirectional_inbound"=>[], "parts_inbound"=>[], "testing_inbound"=>[], "testing_inbound2"=>[r2.object]}, :self=>{"testing2"=>[], "collection_members"=>[], "testing3"=>[], "part_of"=>[], "testing"=>[], "parts_outbound"=>[], "testing_bidirectional_outbound"=>[]}}
650
- @test_object5.relationships_by_name(false).should == {:inbound=>{"testing_inbound3"=>[], "testing_bidirectional_inbound"=>[], "parts_inbound"=>[], "testing_inbound"=>[], "testing_inbound2"=>[]}, :self=>{"testing2"=>[r3.object], "collection_members"=>[], "testing3"=>[], "part_of"=>[], "testing"=>[r2.object], "parts_outbound"=>[r2.object], "testing_bidirectional_outbound"=>[]}}
574
+ @test_object2.relationships_by_name(false).should == {:inbound=>{"testing_inbound3"=>[], "testing_bidirectional_inbound"=>[], "parts_inbound"=>[], "testing_inbound"=>[@test_object5.internal_uri], "testing_inbound2"=>[]}, :self=>{"testing2"=>[@test_object4.internal_uri], "collection_members"=>[], "testing3"=>[], "part_of"=>[], "testing"=>[], "parts_outbound"=>[], "testing_bidirectional_outbound"=>[]}}
575
+
576
+ @test_object3.inbound_relationships[:has_part].should be_nil
577
+
578
+ @test_object3.relationships_by_name(false).should == {:inbound=>{"testing_inbound3"=>[], "testing_bidirectional_inbound"=>[], "parts_inbound"=>[], "testing_inbound"=>[], "testing_inbound2"=>[@test_object5.internal_uri]}, :self=>{"testing2"=>[], "collection_members"=>[], "testing3"=>[], "part_of"=>[], "testing"=>[], "parts_outbound"=>[], "testing_bidirectional_outbound"=>[]}}
651
579
  end
652
580
  end
653
581
 
@@ -668,153 +596,26 @@ describe ActiveFedora::Base do
668
596
  @test_object5.add_relationship_by_name("testing2",@test_object3)
669
597
  @test_object2.save
670
598
  @test_object5.save
671
- r2 = ActiveFedora::Relationship.new(:subject=>:self, :predicate=>:dummy, :object=>@test_object2)
672
- r3 = ActiveFedora::Relationship.new(:subject=>:self, :predicate=>:dummy, :object=>@test_object3)
673
- r4 = ActiveFedora::Relationship.new(:subject=>:self, :predicate=>:dummy, :object=>@test_object4)
674
- r5 = ActiveFedora::Relationship.new(:subject=>:self, :predicate=>:dummy, :object=>@test_object5)
675
- model_rel = ActiveFedora::Relationship.new(:subject=>:self, :predicate=>:dummy, :object=>ActiveFedora::ContentModel.pid_from_ruby_class(MockAFBaseRelationship))
676
- @test_object2.find_relationship_by_name("testing").should == [r3.object]
677
- @test_object2.find_relationship_by_name("testing2").should == [r4.object]
678
- @test_object2.find_relationship_by_name("testing_inbound").should == [r5.object]
599
+ @test_object2.find_relationship_by_name("testing").should == [@test_object3.internal_uri]
600
+ @test_object2.find_relationship_by_name("testing2").should == [@test_object4.internal_uri]
601
+ @test_object2.find_relationship_by_name("testing_inbound").should == [@test_object5.internal_uri]
679
602
  @test_object2.find_relationship_by_name("testing_inbound2").should == []
680
603
  @test_object3.find_relationship_by_name("testing").should == []
681
604
  @test_object3.find_relationship_by_name("testing2").should == []
682
- @test_object3.find_relationship_by_name("testing_inbound").should == [r2.object]
683
- @test_object3.find_relationship_by_name("testing_inbound2").should == [r5.object]
605
+ @test_object3.find_relationship_by_name("testing_inbound").should == [@test_object2.internal_uri]
606
+ @test_object3.find_relationship_by_name("testing_inbound2").should == [@test_object5.internal_uri]
684
607
  @test_object4.find_relationship_by_name("testing").should == []
685
608
  @test_object4.find_relationship_by_name("testing2").should == []
686
609
  @test_object4.find_relationship_by_name("testing_inbound").should == []
687
- @test_object4.find_relationship_by_name("testing_inbound2").should == [r2.object]
688
- @test_object5.find_relationship_by_name("testing").should == [r2.object]
689
- @test_object5.find_relationship_by_name("testing2").should == [r3.object]
610
+ @test_object4.find_relationship_by_name("testing_inbound2").should == [@test_object2.internal_uri]
611
+ @test_object5.find_relationship_by_name("testing").should == [@test_object2.internal_uri]
612
+ @test_object5.find_relationship_by_name("testing2").should == [@test_object3.internal_uri]
690
613
  @test_object5.find_relationship_by_name("testing_inbound").should == []
691
614
  @test_object5.find_relationship_by_name("testing_inbound2").should == []
692
615
 
693
616
  end
694
617
  end
695
618
 
696
- #
697
- # Named datastream specs
698
- #
699
- describe '#add_named_datastream' do
700
- it 'should add a datastream with the given name to the object in fedora' do
701
- @test_object2 = MockAFBaseDatastream.new
702
- # @test_object2.new_object = true
703
- f = File.open(File.join( File.dirname(__FILE__), "../fixtures/minivan.jpg"), 'rb')
704
- f2 = File.open(File.join( File.dirname(__FILE__), "../fixtures/dino.jpg" ), 'rb')
705
- f2.stubs(:original_filename).returns("dino.jpg")
706
- f.stubs(:content_type).returns("image/jpeg")
707
- @test_object2.add_named_datastream("thumbnail",{:content_type=>"image/jpeg",:blob=>f, :label=>"testDS"})
708
- @test_object2.add_named_datastream("high",{:content_type=>"image/jpeg",:blob=>f2})
709
- ds = @test_object2.thumbnail.first
710
- ds2 = @test_object2.high.first
711
- @test_object2.save
712
- @test_object2 = MockAFBaseDatastream.load_instance(@test_object2.pid)
713
- @test_object2.named_datastreams.keys.size.should == 2
714
- @test_object2.named_datastreams.keys.include?("thumbnail").should == true
715
- @test_object2.named_datastreams.keys.include?("high").should == true
716
- @test_object2.named_datastreams["thumbnail"].size.should == 1
717
- @test_object2.named_datastreams["high"].size.should == 1
718
- t2_thumb1 = @test_object2.named_datastreams["thumbnail"].first
719
- t2_thumb1.dsid.should == ds.dsid
720
- t2_thumb1.mimeType.should == ds.mimeType
721
- t2_thumb1.pid.should == ds.pid
722
- t2_thumb1.dsLabel.should == ds.dsLabel
723
- t2_thumb1.controlGroup.should == ds.controlGroup
724
- t2_high1 = @test_object2.named_datastreams["high"].first
725
- t2_high1.dsid.should == ds2.dsid
726
- t2_high1.mimeType.should == ds2.mimeType
727
- t2_high1.pid.should == ds2.pid
728
- t2_high1.dsLabel.should == ds2.dsLabel
729
- t2_high1.controlGroup.should == ds2.controlGroup
730
- end
731
- end
732
-
733
- describe '#add_named_file_datastream' do
734
- it 'should add a file datastream with the given name to the object in fedora' do
735
- @test_object2 = MockAFBaseDatastream.new
736
- # @test_object2.new_object = true
737
- f = File.open(File.join( File.dirname(__FILE__), "../fixtures/minivan.jpg"), 'rb')
738
- f.stubs(:content_type).returns("image/jpeg")
739
- @test_object2.add_named_file_datastream("thumbnail",f)
740
- ds = @test_object2.thumbnail.first
741
- @test_object2.save
742
- @test_object2 = MockAFBaseDatastream.load_instance(@test_object2.pid)
743
- @test_object2.named_datastreams["thumbnail"].size.should == 1
744
- t2_thumb1 = @test_object2.named_datastreams["thumbnail"].first
745
- t2_thumb1.dsid.should == "THUMB1"
746
- t2_thumb1.mimeType.should == "image/jpeg"
747
- t2_thumb1.pid.should == @test_object2.pid
748
- t2_thumb1.dsLabel.should == "minivan.jpg"
749
- t2_thumb1.controlGroup.should == "M"
750
-
751
- # .attributes.should == {"label"=>ds.label,"dsid"=>ds.dsid,
752
- # "mimeType"=>ds.attributes[:mimeType],
753
- # :controlGroup=>ds.attributes[:controlGroup],
754
- # :pid=>ds.pid, :dsID=>ds.dsid, :dsLabel=>ds.attributes[:dsLabel]}
755
- end
756
- end
757
-
758
- describe '#update_named_datastream' do
759
- it 'should update a named datastream to have a new file' do
760
- @test_object2 = MockAFBaseDatastream.new
761
- f = File.open(File.join( File.dirname(__FILE__), "../fixtures/minivan.jpg"), 'rb')
762
- minivan = f.read
763
- f.rewind
764
- f2 = File.open(File.join( File.dirname(__FILE__), "../fixtures/dino.jpg" ), 'rb')
765
- dino = f2.read
766
- f2.rewind
767
- f.stubs(:content_type).returns("image/jpeg")
768
- f.stubs(:original_filename).returns("minivan.jpg")
769
- f2.stubs(:content_type).returns("image/jpeg")
770
- f2.stubs(:original_filename).returns("dino.jpg")
771
- #check raise exception if dsid not supplied
772
- @test_object2.add_named_datastream("thumbnail",{:file=>f})
773
- @test_object2.save
774
- @test_object2 = MockAFBaseDatastream.load_instance(@test_object2.pid)
775
-
776
- @test_object2.thumbnail.size.should == 1
777
- @test_object2.thumbnail_ids == ["THUMB1"]
778
- ds = @test_object2.thumbnail.first
779
- ds.dsid.should == "THUMB1"
780
- ds.mimeType.should == "image/jpeg"
781
- ds.pid.should == @test_object2.pid
782
- ds.dsLabel.should == "minivan.jpg"
783
- ds.controlGroup.should == "M"
784
-
785
- ds.content.should == minivan
786
- @test_object2.update_named_datastream("thumbnail",{:file=>f2,:dsid=>"THUMB1"})
787
- @test_object2.save
788
- @test_object2 = MockAFBaseDatastream.load_instance(@test_object2.pid)
789
- @test_object2.thumbnail.size.should == 1
790
- @test_object2.thumbnail_ids == ["THUMB1"]
791
- ds2 = @test_object2.thumbnail.first
792
- ds2.dsid.should == "THUMB1"
793
- ds2.mimeType.should == "image/jpeg"
794
- ds2.pid.should == @test_object2.pid
795
- ds2.dsLabel.should == "dino.jpg"
796
- ds2.controlGroup.should == "M"
797
- (ds2.content == dino).should be_true
798
- end
799
- end
800
-
801
- describe '#named_datastreams_ids' do
802
- it 'should return a hash of datastream name to an array of dsids' do
803
- @test_object2 = MockAFBaseDatastream.new
804
- # @test_object2.new_object = true
805
- f = File.open(File.join( File.dirname(__FILE__), "../fixtures/minivan.jpg"), 'rb')
806
- f2 = File.open(File.join( File.dirname(__FILE__), "../fixtures/dino.jpg" ), 'rb')
807
- f2.stubs(:original_filename).returns("dino.jpg")
808
- f.stubs(:content_type).returns("image/jpeg")
809
- @test_object2.add_named_datastream("thumbnail",{:content_type=>"image/jpeg",:blob=>f, :label=>"testDS"})
810
- @test_object2.add_named_datastream("thumbnail",{:content_type=>"image/jpeg",:blob=>f2})
811
- @test_object2.save
812
- @test_object2 = MockAFBaseDatastream.load_instance(@test_object2.pid)
813
- @test_object2.named_datastreams_ids.should == {"high"=>[], "thumbnail"=>["THUMB1", "THUMB2"]}
814
- end
815
- end
816
-
817
-
818
619
  # describe '#load_instance_from_solr' do
819
620
  # it 'should populate an instance of an ActiveFedora::Base object using solr instead of Fedora' do
820
621
  #
@@ -856,11 +657,7 @@ describe ActiveFedora::Base do
856
657
  # @test_object5.testing2_append(@test_object3)
857
658
  # @test_object2.save
858
659
  # @test_object5.save
859
- # r2 = ActiveFedora::Relationship.new(:subject=>:self, :predicate=>:dummy, :object=>@test_object2)
860
- # r3 = ActiveFedora::Relationship.new(:subject=>:self, :predicate=>:dummy, :object=>@test_object3)
861
- # r4 = ActiveFedora::Relationship.new(:subject=>:self, :predicate=>:dummy, :object=>@test_object4)
862
- # r5 = ActiveFedora::Relationship.new(:subject=>:self, :predicate=>:dummy, :object=>@test_object5)
863
- # model_rel = ActiveFedora::Relationship.new(:subject=>:self, :predicate=>:dummy, :object=>ActiveFedora::ContentModel.pid_from_ruby_class(MockAFBaseFromSolr))
660
+ # model_rel = ActiveFedora::ContentModel.pid_from_ruby_class(MockAFBaseFromSolr)
864
661
  # #check inbound correct, testing goes to :has_part and testing2 goes to :has_member
865
662
  # test_from_solr_object2 = MockAFBaseFromSolr.load_instance_from_solr(@test_object2.pid)
866
663
  # test_from_solr_object3 = MockAFBaseFromSolr.load_instance_from_solr(@test_object3.pid)
@@ -884,37 +681,37 @@ describe ActiveFedora::Base do
884
681
  # Time.parse(test_from_solr_object5.modified_date).should == Time.parse(@test_object5.modified_date)
885
682
  #
886
683
  # # need to test outbound and inbound relationships
887
- # test_from_solr_object2.relationships(false).should == {:self=>{:has_model=>[model_rel.object],
888
- # :has_part=>[r3.object],
889
- # :has_member=>[r4.object]},
890
- # :inbound=>{:has_part=>[r5.object]}}
891
- # test_from_solr_object2.relationships_by_name(false).should == {:self=>{"testing"=>[r3.object],"testing2"=>[r4.object],
892
- # "collection_members"=>[],"part_of"=>[],"parts_outbound"=>[r3.object]},
893
- # :inbound=>{"testing_inbound"=>[r5.object],"testing_inbound2"=>[],"parts_inbound"=>[]}}
894
- # test_from_solr_object3.relationships(false).should == {:self=>{:has_model=>[model_rel.object]},
895
- # :inbound=>{:has_part=>[r2.object],
896
- # :has_member=>[r5.object]}}
684
+ # test_from_solr_object2.relationships(false).should == {:self=>{:has_model=>[model_rel],
685
+ # :has_part=>[@test_object3],
686
+ # :has_member=>[@test_object4]},
687
+ # :inbound=>{:has_part=>[@test_object5]}}
688
+ # test_from_solr_object2.relationships_by_name(false).should == {:self=>{"testing"=>[@test_object3],"testing2"=>[@test_object4],
689
+ # "collection_members"=>[],"part_of"=>[],"parts_outbound"=>[@test_object3]},
690
+ # :inbound=>{"testing_inbound"=>[@test_object5],"testing_inbound2"=>[],"parts_inbound"=>[]}}
691
+ # test_from_solr_object3.relationships(false).should == {:self=>{:has_model=>[model_rel]},
692
+ # :inbound=>{:has_part=>[@test_object2],
693
+ # :has_member=>[@test_object5]}}
897
694
  # test_from_solr_object3.relationships_by_name(false).should == {:self=>{"testing"=>[],"testing2"=>[], "collection_members"=>[],"part_of"=>[],"parts_outbound"=>[]},
898
- # :inbound=>{"testing_inbound"=>[r2.object],"testing_inbound2"=>[r5.object], "parts_inbound"=>[]}}
899
- # test_from_solr_object4.relationships(false).should == {:self=>{:has_model=>[model_rel.object]},
900
- # :inbound=>{:has_member=>[r2.object]}}
901
- # test_from_solr_object4.relationships_by_name(false).should == {:inbound=>{"parts_inbound"=>[], "testing_inbound"=>[], "testing_inbound2"=>[r2.object]}, :self=>{"testing2"=>[], "collection_members"=>[], "part_of"=>[], "testing"=>[], "parts_outbound"=>[]}}
902
- # test_from_solr_object5.relationships(false).should == {:self=>{:has_model=>[model_rel.object],
903
- # :has_part=>[r2.object],
904
- # :has_member=>[r3.object]},
695
+ # :inbound=>{"testing_inbound"=>[@test_object2],"testing_inbound2"=>[@test_object5], "parts_inbound"=>[]}}
696
+ # test_from_solr_object4.relationships(false).should == {:self=>{:has_model=>[model_rel]},
697
+ # :inbound=>{:has_member=>[@test_object2]}}
698
+ # test_from_solr_object4.relationships_by_name(false).should == {:inbound=>{"parts_inbound"=>[], "testing_inbound"=>[], "testing_inbound2"=>[@test_object2]}, :self=>{"testing2"=>[], "collection_members"=>[], "part_of"=>[], "testing"=>[], "parts_outbound"=>[]}}
699
+ # test_from_solr_object5.relationships(false).should == {:self=>{:has_model=>[model_rel],
700
+ # :has_part=>[@test_object2],
701
+ # :has_member=>[@test_object3]},
905
702
  # :inbound=>{}}
906
- # test_from_solr_object5.relationships_by_name(false).should == {:inbound=>{"parts_inbound"=>[], "testing_inbound"=>[], "testing_inbound2"=>[]}, :self=>{"testing2"=>[r3.object], "collection_members"=>[], "part_of"=>[], "testing"=>[r2.object], "parts_outbound"=>[r2.object]}}
703
+ # test_from_solr_object5.relationships_by_name(false).should == {:inbound=>{"parts_inbound"=>[], "testing_inbound"=>[], "testing_inbound2"=>[]}, :self=>{"testing2"=>[@test_object3], "collection_members"=>[], "part_of"=>[], "testing"=>[@test_object2], "parts_outbound"=>[@test_object2]}}
907
704
  # #all inbound should now be empty if no parameter supplied to relationships
908
- # test_from_solr_object2.relationships.should == {:self=>{:has_part=>[r3.object],:has_member=>[r4.object],:has_model=>[model_rel.object]}}
909
- # test_from_solr_object2.relationships_by_name.should == {:self=>{"testing2"=>[r4.object], "collection_members"=>[], "part_of"=>[], "testing"=>[r3.object], "parts_outbound"=>[r3.object]}}
910
- # test_from_solr_object3.relationships.should == {:self=>{:has_model=>[model_rel.object]}}
705
+ # test_from_solr_object2.relationships.should == {:self=>{:has_part=>[@test_object3],:has_member=>[@test_object4],:has_model=>[model_rel]}}
706
+ # test_from_solr_object2.relationships_by_name.should == {:self=>{"testing2"=>[@test_object4], "collection_members"=>[], "part_of"=>[], "testing"=>[@test_object3], "parts_outbound"=>[@test_object3]}}
707
+ # test_from_solr_object3.relationships.should == {:self=>{:has_model=>[model_rel]}}
911
708
  # test_from_solr_object3.relationships_by_name.should == {:self=>{"testing2"=>[], "collection_members"=>[], "part_of"=>[], "testing"=>[], "parts_outbound"=>[]}}
912
- # test_from_solr_object4.relationships.should == {:self=>{:has_model=>[model_rel.object]}}
709
+ # test_from_solr_object4.relationships.should == {:self=>{:has_model=>[model_rel]}}
913
710
  # test_from_solr_object4.relationships_by_name.should == {:self=>{"testing2"=>[], "collection_members"=>[], "part_of"=>[], "testing"=>[], "parts_outbound"=>[]}}
914
- # test_from_solr_object5.relationships.should == {:self=>{:has_model=>[model_rel.object],
915
- # :has_part=>[r2.object],
916
- # :has_member=>[r3.object]}}
917
- # test_from_solr_object5.relationships_by_name.should == {:self=>{"testing2"=>[r3.object], "collection_members"=>[], "part_of"=>[], "testing"=>[r2.object], "parts_outbound"=>[r2.object]}}
711
+ # test_from_solr_object5.relationships.should == {:self=>{:has_model=>[model_rel],
712
+ # :has_part=>[@test_object2],
713
+ # :has_member=>[@test_object3]}}
714
+ # test_from_solr_object5.relationships_by_name.should == {:self=>{"testing2"=>[@test_object3], "collection_members"=>[], "part_of"=>[], "testing"=>[@test_object2], "parts_outbound"=>[@test_object2]}}
918
715
  # # need to check metadata
919
716
  # test_from_solr_object2.fields[:language][:values].should == ["Italian"]
920
717
  # test_from_solr_object2.fields[:creator][:values].should == ["Linguist, A."]