active-fedora 6.0.0 → 6.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (32) hide show
  1. data/.gitignore +1 -0
  2. data/History.txt +16 -0
  3. data/README.textile +12 -7
  4. data/active-fedora.gemspec +2 -2
  5. data/lib/active_fedora.rb +1 -0
  6. data/lib/active_fedora/associations/association_collection.rb +1 -1
  7. data/lib/active_fedora/associations/has_and_belongs_to_many_association.rb +12 -3
  8. data/lib/active_fedora/associations/has_many_association.rb +4 -0
  9. data/lib/active_fedora/attributes.rb +6 -0
  10. data/lib/active_fedora/auditable.rb +9 -0
  11. data/lib/active_fedora/base.rb +2 -0
  12. data/lib/active_fedora/delegating.rb +5 -3
  13. data/lib/active_fedora/indexing.rb +1 -1
  14. data/lib/active_fedora/nokogiri_datastream.rb +1 -2
  15. data/lib/active_fedora/querying.rb +1 -0
  16. data/lib/active_fedora/version.rb +1 -1
  17. data/lib/generators/active_fedora/config/solr/solr_generator.rb +1 -0
  18. data/lib/generators/active_fedora/config/solr/templates/jetty.yml +5 -0
  19. data/lib/generators/active_fedora/config/solr/templates/solr_conf/conf/schema.xml +1 -161
  20. data/lib/generators/active_fedora/config/solr/templates/solr_conf/conf/solrconfig.xml +16 -7
  21. data/lib/tasks/active_fedora_dev.rake +1 -1
  22. data/spec/fixtures/auditable.foxml.xml +110 -0
  23. data/spec/integration/base_spec.rb +7 -1
  24. data/spec/unit/auditable_spec.rb +31 -0
  25. data/spec/unit/base_delegate_spec.rb +74 -38
  26. data/spec/unit/base_spec.rb +6 -1
  27. data/spec/unit/has_and_belongs_to_many_collection_spec.rb +59 -0
  28. data/spec/unit/has_many_collection_spec.rb +26 -0
  29. metadata +96 -45
  30. checksums.yaml +0 -7
  31. data/solr/conf/schema.xml +0 -432
  32. data/solr/conf/solrconfig.xml +0 -158
@@ -37,23 +37,27 @@
37
37
  -->
38
38
  <str name="qf">
39
39
  id
40
- all_text_timv
41
40
  active_fedora_model_ssi
42
- object_type_si
41
+ title_tesim
42
+ author_tesim
43
+ subject_tesim
43
44
  </str>
44
45
  <str name="pf">
45
46
  all_text_timv^10
46
47
  </str>
47
48
 
48
49
  <str name="author_qf">
50
+ author_tesim
49
51
  </str>
50
52
  <str name="author_pf">
51
53
  </str>
52
54
  <str name="title_qf">
55
+ title_tesim
53
56
  </str>
54
57
  <str name="title_pf">
55
58
  </str>
56
59
  <str name="subject_qf">
60
+ subject_tesim
57
61
  </str>
58
62
  <str name="subject_pf">
59
63
  </str>
@@ -67,7 +71,7 @@
67
71
  <str name="facet.mincount">1</str>
68
72
  <str name="facet.limit">10</str>
69
73
  <str name="facet.field">active_fedora_model_ssi</str>
70
- <str name="facet.field">object_type_si</str>
74
+ <str name="facet.field">subject_sim</str>
71
75
 
72
76
  <str name="spellcheck">true</str>
73
77
  <str name="spellcheck.dictionary">default</str>
@@ -90,12 +94,17 @@
90
94
  <str name="q">{!raw f=id v=$id}</str> <!-- use id=666 instead of q=id:666 -->
91
95
  <str name="fl">
92
96
  id,
93
- access_tim,
94
- discover_access_group_tim,discover_access_person_tim,
95
- read_access_group_tim,read_access_person_tim,
96
- edit_access_group_tim,edit_access_person_tim,
97
+ access_ssim,
98
+ discover_access_group_ssim,discover_access_person_ssim,
99
+ read_access_group_ssim,read_access_person_ssim,
100
+ edit_access_group_ssim,edit_access_person_ssim,
97
101
  depositor_ti,
98
102
  embargo_release_date_dtsi
103
+ inheritable_access_ssim,
104
+ inheritable_discover_access_group_ssim,inheritable_discover_access_person_ssim,
105
+ inheritable_read_access_group_ssim,inheritable_read_access_person_ssim,
106
+ inheritable_edit_access_group_ssim,inheritable_edit_access_person_ssim,
107
+ inheritable_embargo_release_date_dtsi
99
108
  </str>
100
109
  </lst>
101
110
  </requestHandler>
@@ -53,7 +53,7 @@ require 'rspec/core/rake_task'
53
53
 
54
54
  desc "Copies the default SOLR config for the bundled Testing Server"
55
55
  task :configure_jetty do
56
- FileList['solr/conf/*'].each do |f|
56
+ FileList['lib/generators/active_fedora/config/solr/templates/solr_conf/conf/*'].each do |f|
57
57
  cp("#{f}", 'jetty/solr/development-core/conf/', :verbose => true)
58
58
  cp("#{f}", 'jetty/solr/test-core/conf/', :verbose => true)
59
59
  end
@@ -0,0 +1,110 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <foxml:digitalObject VERSION="1.1" PID="changeme:242"
3
+ xmlns:foxml="info:fedora/fedora-system:def/foxml#"
4
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
5
+ xsi:schemaLocation="info:fedora/fedora-system:def/foxml# http://www.fedora.info/definitions/1/0/foxml1-1.xsd">
6
+ <foxml:objectProperties>
7
+ <foxml:property NAME="info:fedora/fedora-system:def/model#state" VALUE="Active"/>
8
+ <foxml:property NAME="info:fedora/fedora-system:def/model#label" VALUE=""/>
9
+ <foxml:property NAME="info:fedora/fedora-system:def/model#ownerId" VALUE="fedoraAdmin"/>
10
+ <foxml:property NAME="info:fedora/fedora-system:def/model#createdDate" VALUE="2013-02-25T16:43:05.802Z"/>
11
+ <foxml:property NAME="info:fedora/fedora-system:def/view#lastModifiedDate" VALUE="2013-02-25T16:43:06.379Z"/>
12
+ </foxml:objectProperties>
13
+ <foxml:datastream ID="AUDIT" STATE="A" CONTROL_GROUP="X" VERSIONABLE="false">
14
+ <foxml:datastreamVersion ID="AUDIT.0" LABEL="Audit Trail for this object" CREATED="2013-02-25T16:43:05.802Z" MIMETYPE="text/xml" FORMAT_URI="info:fedora/fedora-system:format/xml.fedora.audit">
15
+ <foxml:xmlContent>
16
+ <audit:auditTrail xmlns:audit="info:fedora/fedora-system:def/audit#">
17
+ <audit:record ID="AUDREC1">
18
+ <audit:process type="Fedora API-M"/>
19
+ <audit:action>addDatastream</audit:action>
20
+ <audit:componentID>RELS-EXT</audit:componentID>
21
+ <audit:responsibility>fedoraAdmin</audit:responsibility>
22
+ <audit:date>2013-02-25T16:43:06.219Z</audit:date>
23
+ <audit:justification></audit:justification>
24
+ </audit:record>
25
+ <audit:record ID="AUDREC2">
26
+ <audit:process type="Fedora API-M"/>
27
+ <audit:action>addDatastream</audit:action>
28
+ <audit:componentID>descMetadata</audit:componentID>
29
+ <audit:responsibility>fedoraAdmin</audit:responsibility>
30
+ <audit:date>2013-02-25T16:43:06.315Z</audit:date>
31
+ <audit:justification></audit:justification>
32
+ </audit:record>
33
+ <audit:record ID="AUDREC3">
34
+ <audit:process type="Fedora API-M"/>
35
+ <audit:action>addDatastream</audit:action>
36
+ <audit:componentID>rightsMetadata</audit:componentID>
37
+ <audit:responsibility>fedoraAdmin</audit:responsibility>
38
+ <audit:date>2013-02-25T16:43:06.379Z</audit:date>
39
+ <audit:justification></audit:justification>
40
+ </audit:record>
41
+ </audit:auditTrail>
42
+ </foxml:xmlContent>
43
+ </foxml:datastreamVersion>
44
+ </foxml:datastream>
45
+ <foxml:datastream ID="DC" STATE="A" CONTROL_GROUP="X" VERSIONABLE="true">
46
+ <foxml:datastreamVersion ID="DC1.0" LABEL="Dublin Core Record for this object" CREATED="2013-02-25T16:43:05.802Z" MIMETYPE="text/xml" FORMAT_URI="http://www.openarchives.org/OAI/2.0/oai_dc/" SIZE="341">
47
+ <foxml:contentDigest TYPE="SHA-256" DIGEST="eb075bf6da5903e54464631dc998f66f95bffde9f4137132796457d31de5cd44"/>
48
+ <foxml:xmlContent>
49
+ <oai_dc:dc xmlns:oai_dc="http://www.openarchives.org/OAI/2.0/oai_dc/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.openarchives.org/OAI/2.0/oai_dc/ http://www.openarchives.org/OAI/2.0/oai_dc.xsd">
50
+ <dc:identifier>changeme:242</dc:identifier>
51
+ </oai_dc:dc>
52
+ </foxml:xmlContent>
53
+ </foxml:datastreamVersion>
54
+ </foxml:datastream>
55
+ <foxml:datastream ID="RELS-EXT" STATE="A" CONTROL_GROUP="X" VERSIONABLE="true">
56
+ <foxml:datastreamVersion ID="RELS-EXT.0" LABEL="Fedora Object-to-Object Relationship Metadata" CREATED="2013-02-25T16:43:06.219Z" MIMETYPE="application/rdf+xml" SIZE="284">
57
+ <foxml:contentDigest TYPE="SHA-256" DIGEST="013d2229de7bd91c61256563eff1b475cd1e8f7e45a2f15de5a36f2d20ec2852"/>
58
+ <foxml:xmlContent>
59
+ <rdf:RDF xmlns:ns0="info:fedora/fedora-system:def/model#" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
60
+ <rdf:Description rdf:about="info:fedora/changeme:242">
61
+ <ns0:hasModel rdf:resource="info:fedora/afmodel:TestModel"></ns0:hasModel>
62
+ </rdf:Description>
63
+ </rdf:RDF>
64
+ </foxml:xmlContent>
65
+ </foxml:datastreamVersion>
66
+ </foxml:datastream>
67
+ <foxml:datastream ID="descMetadata" STATE="A" CONTROL_GROUP="X" VERSIONABLE="true">
68
+ <foxml:datastreamVersion ID="descMetadata.0" LABEL="" CREATED="2013-02-25T16:43:06.315Z" MIMETYPE="text/xml" SIZE="215">
69
+ <foxml:contentDigest TYPE="SHA-256" DIGEST="3f588eca58dea77b31c9ed0b90e4560288a419856c4bb744fab9c7fe8749ad19"/>
70
+ <foxml:xmlContent>
71
+ <dc xmlns:dcterms="http://purl.org/dc/terms/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
72
+ <dcterms:title>DulHydra Test Object</dcterms:title>
73
+ <dcterms:identifier>test00001</dcterms:identifier>
74
+ </dc>
75
+ </foxml:xmlContent>
76
+ </foxml:datastreamVersion>
77
+ </foxml:datastream>
78
+ <foxml:datastream ID="rightsMetadata" STATE="A" CONTROL_GROUP="X" VERSIONABLE="true">
79
+ <foxml:datastreamVersion ID="rightsMetadata.0" LABEL="" CREATED="2013-02-25T16:43:06.379Z" MIMETYPE="text/xml" SIZE="596">
80
+ <foxml:contentDigest TYPE="SHA-256" DIGEST="472f8634b31bd425dadd9206531ab02a70c08c22e4250bb2b0d3dd0314cfb240"/>
81
+ <foxml:xmlContent>
82
+ <rightsMetadata xmlns="http://hydra-collab.stanford.edu/schemas/rightsMetadata/v1" version="0.1">
83
+ <copyright>
84
+ <human type="title"></human>
85
+ <human type="description"></human>
86
+ <machine type="uri"></machine>
87
+ </copyright>
88
+ <access type="discover">
89
+ <human></human>
90
+ <machine></machine>
91
+ </access>
92
+ <access type="read">
93
+ <human></human>
94
+ <machine>
95
+ <group>public</group>
96
+ </machine>
97
+ </access>
98
+ <access type="edit">
99
+ <human></human>
100
+ <machine></machine>
101
+ </access>
102
+ <embargo>
103
+ <human></human>
104
+ <machine></machine>
105
+ </embargo>
106
+ </rightsMetadata>
107
+ </foxml:xmlContent>
108
+ </foxml:datastreamVersion>
109
+ </foxml:datastream>
110
+ </foxml:digitalObject>
@@ -431,8 +431,14 @@ describe ActiveFedora::Base do
431
431
  it "should return true for objects that exist" do
432
432
  ActiveFedora::Base.exists?('hydrangea:fixture_mods_article1').should be_true
433
433
  end
434
- it "should return false for objects that dont exist" do
434
+ it "should return false for objects that don't exist" do
435
435
  ActiveFedora::Base.exists?('nil:object').should be_false
436
436
  end
437
+ it "should return false for nil" do
438
+ ActiveFedora::Base.exists?(nil).should be_false
439
+ end
440
+ it "should return false for empty" do
441
+ ActiveFedora::Base.exists?('').should be_false
442
+ end
437
443
  end
438
444
  end
@@ -0,0 +1,31 @@
1
+ require 'spec_helper'
2
+
3
+ describe ActiveFedora::Auditable do
4
+
5
+ before(:all) do
6
+ class AuditableModel < ActiveFedora::Base
7
+ include ActiveFedora::Auditable
8
+ end
9
+ path = File.join(File.dirname(__FILE__), '..', 'fixtures', 'auditable.foxml.xml')
10
+ pid = ActiveFedora::FixtureLoader.import_to_fedora(path)
11
+ ActiveFedora::FixtureLoader.index(pid)
12
+ @test_object = AuditableModel.find(pid)
13
+ end
14
+ after(:all) do
15
+ @test_object.delete
16
+ end
17
+ it "should have the correct number of audit records" do
18
+ @test_object.audit_trail.records.length.should == 3
19
+ end
20
+ it "should return all the data from each audit record" do
21
+ record = @test_object.audit_trail.records.first
22
+ record.id.should == "AUDREC1"
23
+ record.process_type.should == "Fedora API-M"
24
+ record.action.should == "addDatastream"
25
+ record.component_id.should == "RELS-EXT"
26
+ record.responsibility.should == "fedoraAdmin"
27
+ record.date.should == "2013-02-25T16:43:06.219Z"
28
+ record.justification.should == ""
29
+ end
30
+
31
+ end
@@ -1,56 +1,68 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  describe ActiveFedora::Base do
4
-
5
- describe "first level delegation" do
6
- class BarStream2 < ActiveFedora::OmDatastream
7
- set_terminology do |t|
8
- t.root(:path=>"animals", :xmlns=>"urn:zoobar")
9
- t.waterfowl do
10
- t.ducks do
11
- t.duck
4
+ before :all do
5
+ class BarStream2 < ActiveFedora::OmDatastream
6
+ set_terminology do |t|
7
+ t.root(:path=>"animals", :xmlns=>"urn:zoobar")
8
+ t.waterfowl do
9
+ t.ducks do
10
+ t.duck
11
+ end
12
12
  end
13
+ t.donkey()
14
+ t.cow()
15
+ end
16
+
17
+ def self.xml_template
18
+ Nokogiri::XML::Document.parse '<animals xmlns="urn:zoobar">
19
+ <waterfowl>
20
+ <ducks>
21
+ <duck/>
22
+ </ducks>
23
+ </waterfowl>
24
+ <donkey></donkey>
25
+ <cow></cow>
26
+ </animals>'
13
27
  end
14
- t.donkey()
15
- t.cow()
16
28
  end
29
+ end
30
+ after :all do
31
+ Object.send(:remove_const, :BarStream2)
32
+ end
17
33
 
18
- def self.xml_template
19
- Nokogiri::XML::Document.parse '<animals xmlns="urn:zoobar">
20
- <waterfowl>
21
- <ducks>
22
- <duck/>
23
- </ducks>
24
- </waterfowl>
25
- <donkey></donkey>
26
- <cow></cow>
27
- </animals>'
34
+ describe "first level delegation" do
35
+ before :all do
36
+ class BarHistory2 < ActiveFedora::Base
37
+ has_metadata :type=>ActiveFedora::SimpleDatastream, :name=>"someData" do |m|
38
+ m.field "fubar", :string
39
+ m.field "bandana", :string
40
+ m.field "swank", :text
41
+ end
42
+ has_metadata :type=>ActiveFedora::SimpleDatastream, :name=>"withText" do |m|
43
+ m.field "fubar", :text
44
+ end
45
+ has_metadata :type=>ActiveFedora::SimpleDatastream, :name=>"withText2", :label=>"withLabel" do |m|
46
+ m.field "fubar", :text
47
+ end
48
+
49
+ has_metadata :type=>BarStream2, :name=>"xmlish"
50
+ delegate :fubar, :to=>'withText', :unique=>true
51
+ delegate :donkey, :to=>'xmlish', :unique=>true
52
+ delegate :cow, :to=>'xmlish'
53
+ delegate :duck, :to=>'xmlish', :at=>[:waterfowl, :ducks]
28
54
  end
29
55
  end
30
56
 
31
- class BarHistory2 < ActiveFedora::Base
32
- has_metadata :type=>ActiveFedora::SimpleDatastream, :name=>"someData" do |m|
33
- m.field "fubar", :string
34
- m.field "bandana", :string
35
- m.field "swank", :text
36
- end
37
- has_metadata :type=>ActiveFedora::SimpleDatastream, :name=>"withText" do |m|
38
- m.field "fubar", :text
39
- end
40
- has_metadata :type=>ActiveFedora::SimpleDatastream, :name=>"withText2", :label=>"withLabel" do |m|
41
- m.field "fubar", :text
42
- end
43
-
44
- has_metadata :type=>BarStream2, :name=>"xmlish"
45
- delegate :fubar, :to=>'withText', :unique=>true
46
- delegate :donkey, :to=>'xmlish', :unique=>true
47
- delegate :cow, :to=>'xmlish'
48
- delegate :duck, :to=>'xmlish', :at=>[:waterfowl, :ducks]
57
+ after :all do
58
+ Object.send(:remove_const, :BarHistory2)
49
59
  end
60
+
50
61
  before :each do
51
62
  @n = BarHistory2.new()
52
63
  end
53
64
 
65
+
54
66
  it "should save a delegated property uniquely" do
55
67
  @n.fubar="Quack"
56
68
  @n.fubar.should == "Quack"
@@ -74,6 +86,30 @@ describe ActiveFedora::Base do
74
86
  @n[:duck]= ["Cluck", "Gobble"]
75
87
  @n[:duck].should == ["Cluck", "Gobble"]
76
88
  end
89
+
90
+ end
91
+
92
+ describe "with a superclass" do
93
+ before :all do
94
+ class BarHistory2 < ActiveFedora::Base
95
+ has_metadata 'xmlish', :type=>BarStream2
96
+ delegate_to 'xmlish', [:donkey, :cow]
97
+ end
98
+ class BarHistory3 < BarHistory2
99
+ end
100
+ end
101
+
102
+ after :all do
103
+ Object.send(:remove_const, :BarHistory3)
104
+ Object.send(:remove_const, :BarHistory2)
105
+ end
106
+
107
+ subject { BarHistory3.new }
108
+
109
+ it "should be able to delegate deeply into the terminology" do
110
+ subject.donkey=["Bray", "Hee-haw"]
111
+ subject.donkey.should == ["Bray", "Hee-haw"]
112
+ end
77
113
  end
78
114
  end
79
115
 
@@ -2,6 +2,11 @@ require 'spec_helper'
2
2
  @@last_pid = 0
3
3
 
4
4
  describe ActiveFedora::Base do
5
+ describe 'descendants' do
6
+ it "should record the decendants" do
7
+ ActiveFedora::Base.descendants.should include(HydrangeaArticle, SpecialThing)
8
+ end
9
+ end
5
10
  describe "sharding" do
6
11
  it "should have a shard_index" do
7
12
  ActiveFedora::Base.shard_index(@this_pid).should == 0
@@ -424,7 +429,7 @@ describe ActiveFedora::Base do
424
429
  stub_get_content(@this_pid, ['RELS-EXT', 'someData', 'withText2', 'withText'])
425
430
  @test_history = FooHistory.new()
426
431
  solr_doc = @test_history.to_solr
427
- solr_doc[ActiveFedora::SolrService.solr_name("active_fedora_model", :symbol)].should eql(["FooHistory"])
432
+ solr_doc[ActiveFedora::SolrService.solr_name("active_fedora_model", :stored_sortable)].should eql(["FooHistory"])
428
433
  end
429
434
 
430
435
  it "should call .to_solr on all SimpleDatastreams and OmDatastreams, passing the resulting document to solr" do
@@ -0,0 +1,59 @@
1
+ require 'spec_helper'
2
+
3
+ describe ActiveFedora::Associations::HasAndBelongsToManyAssociation do
4
+ it "should call add_relationship" do
5
+ subject = stub("subject", :new_record? => false, :pid => 'subject:a', :internal_uri => 'info:fedora/subject:a', :ids_for_outbound => [])
6
+ predicate = stub(:klass => mock.class, :options=>{:property=>'predicate'}, :class_name=> nil)
7
+ ActiveFedora::SolrService.stub(:query).and_return([])
8
+ ac = ActiveFedora::Associations::HasAndBelongsToManyAssociation.new(subject, predicate)
9
+ object = stub("object", :new_record? => false, :pid => 'object:b', :save => nil)
10
+
11
+ subject.should_receive(:add_relationship).with('predicate', object)
12
+
13
+ ac << object
14
+
15
+ end
16
+
17
+ it "should call add_relationship on subject and object when inverse_of given" do
18
+ subject = stub("subject", :new_record? => false, :pid => 'subject:a', :internal_uri => 'info:fedora/subject:a', :ids_for_outbound => [])
19
+ predicate = stub(:klass => mock.class, :options=>{:property=>'predicate', :inverse_of => 'inverse_predicate'}, :class_name=> nil)
20
+ ActiveFedora::SolrService.stub(:query).and_return([])
21
+ ac = ActiveFedora::Associations::HasAndBelongsToManyAssociation.new(subject, predicate)
22
+ object = stub("object", :new_record? => false, :pid => 'object:b', :save => nil)
23
+
24
+ subject.should_receive(:add_relationship).with('predicate', object)
25
+
26
+ object.should_receive(:add_relationship).with('inverse_predicate', subject)
27
+
28
+ ac << object
29
+
30
+ end
31
+
32
+ it "should call remove_relationship" do
33
+ subject = stub("subject", :new_record? => false, :pid => 'subject:a', :internal_uri => 'info:fedora/subject:a')
34
+ predicate = stub(:klass => mock.class, :options=>{:property=>'predicate'}, :class_name=> nil)
35
+ ActiveFedora::SolrService.stub(:query).and_return([])
36
+ ac = ActiveFedora::Associations::HasAndBelongsToManyAssociation.new(subject, predicate)
37
+ object = stub("object", :new_record? => false, :pid => 'object:b', :save => nil)
38
+
39
+ subject.should_receive(:remove_relationship).with('predicate', object)
40
+
41
+ ac.delete(object)
42
+
43
+ end
44
+
45
+ it "should call remove_relationship on subject and object when inverse_of given" do
46
+ subject = stub("subject", :new_record? => false, :pid => 'subject:a', :internal_uri => 'info:fedora/subject:a')
47
+ predicate = stub(:klass => mock.class, :options=>{:property=>'predicate', :inverse_of => 'inverse_predicate'}, :class_name=> nil)
48
+ ActiveFedora::SolrService.stub(:query).and_return([])
49
+ ac = ActiveFedora::Associations::HasAndBelongsToManyAssociation.new(subject, predicate)
50
+ object = stub("object", :new_record? => false, :pid => 'object:b', :save => nil)
51
+
52
+ subject.should_receive(:remove_relationship).with('predicate', object)
53
+ object.should_receive(:remove_relationship).with('inverse_predicate', subject)
54
+
55
+ ac.delete(object)
56
+
57
+ end
58
+
59
+ end