active-fedora 3.1.6 → 3.2.0.pre1

Sign up to get free protection for your applications and to get access to all the features.
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."]