active-fedora 11.0.0.rc6 → 11.0.0.rc7

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. checksums.yaml +4 -4
  2. data/active-fedora.gemspec +0 -3
  3. data/lib/active_fedora.rb +0 -10
  4. data/lib/active_fedora/associations/has_many_association.rb +1 -1
  5. data/lib/active_fedora/attributes.rb +1 -1
  6. data/lib/active_fedora/base.rb +3 -7
  7. data/lib/active_fedora/querying.rb +1 -1
  8. data/lib/active_fedora/rdf.rb +0 -1
  9. data/lib/active_fedora/version.rb +1 -1
  10. data/spec/integration/attached_files_spec.rb +14 -4
  11. data/spec/integration/file_spec.rb +22 -23
  12. data/spec/integration/versionable_spec.rb +0 -254
  13. data/spec/spec_helper.rb +0 -7
  14. data/spec/unit/attached_files_spec.rb +10 -7
  15. data/spec/unit/base_spec.rb +3 -1
  16. data/spec/unit/has_many_association_spec.rb +23 -8
  17. data/spec/unit/inheritance_spec.rb +11 -7
  18. data/spec/unit/model_classifier_spec.rb +1 -1
  19. data/spec/unit/rdf/indexing_service_spec.rb +9 -9
  20. data/spec/unit/solr_config_options_spec.rb +12 -15
  21. metadata +2 -67
  22. data/lib/active_fedora/datastreams.rb +0 -6
  23. data/lib/active_fedora/datastreams/nokogiri_datastreams.rb +0 -119
  24. data/lib/active_fedora/nom_datastream.rb +0 -73
  25. data/lib/active_fedora/om_datastream.rb +0 -118
  26. data/lib/active_fedora/qualified_dublin_core_datastream.rb +0 -158
  27. data/lib/active_fedora/rdf/datastream_indexing.rb +0 -49
  28. data/lib/active_fedora/rdf/ntriples_rdf_datastream.rb +0 -13
  29. data/lib/active_fedora/rdf/rdf_datastream.rb +0 -173
  30. data/lib/active_fedora/rdf/rdfxml_datastream.rb +0 -13
  31. data/spec/integration/complex_rdf_datastream_spec.rb +0 -227
  32. data/spec/integration/datastream_rdf_nested_attributes_spec.rb +0 -180
  33. data/spec/integration/ntriples_datastream_spec.rb +0 -215
  34. data/spec/integration/om_datastream_spec.rb +0 -78
  35. data/spec/samples/hydra-mods_article_datastream.rb +0 -515
  36. data/spec/samples/models/mods_article.rb +0 -9
  37. data/spec/samples/samples.rb +0 -2
  38. data/spec/unit/nom_datastream_spec.rb +0 -60
  39. data/spec/unit/ntriples_datastream_spec.rb +0 -167
  40. data/spec/unit/om_datastream_spec.rb +0 -294
  41. data/spec/unit/qualified_dublin_core_datastream_spec.rb +0 -119
  42. data/spec/unit/rdf_datastream_spec.rb +0 -84
  43. data/spec/unit/rdf_resource_datastream_spec.rb +0 -208
  44. data/spec/unit/rdfxml_datastream_spec.rb +0 -106
@@ -1,119 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe ActiveFedora::QualifiedDublinCoreDatastream do
4
- DC_ELEMENTS = [:contributor, :coverage, :creator, :date, :description, :identifier, :language, :publisher, :relation, :rights, :source].freeze
5
-
6
- let(:sample_xml) do "<dc xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' xmlns:dcterms='http://purl.org/dc/terms/'>
7
- <dcterms:type xsi:type='DCMITYPE'>sound</dcterms:type>
8
- <dcterms:medium>medium</dcterms:medium>
9
- <dcterms:rights>rights</dcterms:rights>
10
- <dcterms:language>English</dcterms:language>
11
- <dcterms:temporal>tmp</dcterms:temporal>
12
- <dcterms:subject>kw1</dcterms:subject>
13
- <dcterms:subject>kw2</dcterms:subject>
14
- <dcterms:creator>creator</dcterms:creator>
15
- <dcterms:creator>creator</dcterms:creator>
16
- <dcterms:contributor>contributor</dcterms:contributor>
17
- <dcterms:coverage>coverage</dcterms:coverage>
18
- <dcterms:identifier>identifier</dcterms:identifier>
19
- <dcterms:relation>relation</dcterms:relation>
20
- <dcterms:source>source</dcterms:source>
21
- <dcterms:title>title</dcterms:title>
22
- <dcterms:extent>extent</dcterms:extent>
23
- <dcterms:format>audio/x-wav</dcterms:format>
24
- <dcterms:subject xsi:type='LCSH'>sh1</dcterms:subject>
25
- <dcterms:subject xsi:type='LCSH'>sh2</dcterms:subject>
26
- <dcterms:spatial>sp1</dcterms:spatial>
27
- <dcterms:spatial>sp2</dcterms:spatial>
28
- <dcterms:publisher>jwa</dcterms:publisher>
29
- <dcterms:alternative>alt</dcterms:alternative>
30
- <dcterms:description>desc</dcterms:description>
31
- <dcterms:date>datestr</dcterms:date>
32
- </dc>"
33
- end
34
- before do
35
- @test_ds = described_class.new
36
- @test_ds.content = sample_xml
37
- end
38
-
39
- it "creates the right number of fields" do
40
- expect(ActiveFedora::QualifiedDublinCoreDatastream::DCTERMS.size).to eq 54
41
- end
42
-
43
- it "has unmodifiable constants" do
44
- expect { ActiveFedora::QualifiedDublinCoreDatastream::DCTERMS << :foo }.to raise_error(RuntimeError, /can't modify frozen array/i)
45
- end
46
-
47
- it "defaults dc elements to :multiple=>true" do
48
- @test_ds.fields.values.each do |s|
49
- expect(s.key?(:multiple)).to be true
50
- end
51
- end
52
-
53
- describe '#new' do
54
- it 'provides #new' do
55
- expect(described_class).to respond_to(:new)
56
- end
57
-
58
- describe "model methods" do
59
- DC_ELEMENTS.each do |el|
60
- it "should respond to getters and setters for #{el} element" do
61
- pending if el == :type
62
- value = "Hey #{el}"
63
- @test_ds.send("#{el}=", value)
64
- expect(@test_ds.send(el).first).to eq value # Looking at first because creator has 2 nodes
65
- end
66
- end
67
- end
68
- end
69
-
70
- describe '.to_xml' do
71
- it 'outputs the fields hash as Qualified Dublin Core XML' do
72
- @test_ds = described_class.new
73
-
74
- @test_ds.field :publisher
75
- @test_ds.field :creator
76
- @test_ds.field :title
77
-
78
- @test_ds.publisher = ["publisher1"]
79
- @test_ds.creator = ["creator1", "creator2"]
80
- @test_ds.title = ["title1"]
81
-
82
- expect(@test_ds.to_xml).to be_equivalent_to('
83
- <dc xmlns:dcterms="http://purl.org/dc/terms/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
84
- <dcterms:publisher>publisher1</dcterms:publisher>
85
- <dcterms:creator>creator1</dcterms:creator>
86
- <dcterms:creator>creator2</dcterms:creator>
87
- <dcterms:title>title1</dcterms:title>
88
- </dc>')
89
- end
90
- end
91
-
92
- describe "#to_solr" do
93
- it "has title" do
94
- @test_ds = described_class.new
95
- @test_ds.title = "War and Peace"
96
- solr = @test_ds.to_solr
97
- expect(solr[ActiveFedora.index_field_mapper.solr_name('title', type: :string)]).to eq "War and Peace"
98
- end
99
- end
100
-
101
- describe 'custom fields' do
102
- subject(:datastream) { described_class.new }
103
- it 'grabs the term' do
104
- sample_xml = "<dc xmlns:dcterms='http://purl.org/dc/terms/' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance'><dcterms:cust>custom</dcterms:cust></dc>"
105
- datastream.content = sample_xml
106
- datastream.field :cust
107
- expect(datastream.cust).to eq ['custom']
108
- end
109
- end
110
-
111
- describe "#field should accept :path option" do
112
- subject(:datastream) { described_class.new }
113
- it "is able to map :dc_type to the path 'type'" do
114
- datastream.content = sample_xml
115
- datastream.field :dc_type, :string, path: "type", multiple: true
116
- expect(datastream.dc_type).to eq ['sound']
117
- end
118
- end
119
- end
@@ -1,84 +0,0 @@
1
- # -*- encoding: utf-8 -*-
2
- require 'spec_helper'
3
-
4
- describe ActiveFedora::RDFDatastream do
5
- describe "a new instance" do
6
- subject { described_class.new }
7
- it { should be_metadata }
8
- it { should_not be_content_changed }
9
- end
10
-
11
- describe "an instance that exists in the datastore, but hasn't been loaded" do
12
- before do
13
- class MyDatastream < ActiveFedora::NtriplesRDFDatastream
14
- property :title, predicate: ::RDF::Vocab::DC.title
15
- property :description, predicate: ::RDF::Vocab::DC.description
16
- end
17
- class MyObj < ActiveFedora::Base
18
- has_subresource 'descMetadata', class_name: 'MyDatastream'
19
- end
20
- @obj = MyObj.new
21
- @obj.descMetadata.title = 'Foobar'
22
- @obj.save
23
- end
24
- after do
25
- @obj.destroy
26
- Object.send(:remove_const, :MyDatastream)
27
- Object.send(:remove_const, :MyObj)
28
- end
29
-
30
- subject(:desc_metadata) { @obj.reload.descMetadata }
31
-
32
- it "does not load the descMetadata datastream when calling content_changed?" do
33
- expect(desc_metadata).to_not receive(:retrieve_content)
34
- expect(desc_metadata).to_not be_content_changed
35
- end
36
-
37
- it "allows asserting an empty string" do
38
- desc_metadata.title = ['']
39
- expect(desc_metadata.title).to eq ['']
40
- end
41
-
42
- it "clears stuff" do
43
- desc_metadata.title = ['one', 'two', 'three']
44
- desc_metadata.title.clear
45
- expect(desc_metadata.graph.query([desc_metadata.rdf_subject, ::RDF::Vocab::DC.title, nil]).first).to be_nil
46
- end
47
-
48
- it "has a list of fields" do
49
- expect(MyDatastream.fields).to eq [:title, :description]
50
- end
51
- end
52
-
53
- describe "deserialize" do
54
- subject(:datastream) { ActiveFedora::NtriplesRDFDatastream.new }
55
- it "is able to handle non-utf-8 characters" do
56
- # see https://github.com/ruby-rdf/rdf/issues/142
57
- data = "<info:fedora/scholarsphere:qv33rx50r> <http://purl.org/dc/terms/description> \"\\n\xE2\x80\x99 \" .\n".force_encoding('ASCII-8BIT')
58
-
59
- result = datastream.deserialize(data)
60
- expect(result.dump(:ntriples)).to eq "<info:fedora/scholarsphere:qv33rx50r> <http://purl.org/dc/terms/description> \"\\n’ \" .\n"
61
- end
62
- end
63
-
64
- describe 'content=' do
65
- let(:ds) { ActiveFedora::NtriplesRDFDatastream.new }
66
- it "is able to handle non-utf-8 characters" do
67
- data = "<info:fedora/scholarsphere:qv33rx50r> <http://purl.org/dc/terms/description> \"\\n\xE2\x80\x99 \" .\n".force_encoding('ASCII-8BIT')
68
- ds.content = data
69
- expect(ds.resource.dump(:ntriples)).to eq "<info:fedora/scholarsphere:qv33rx50r> <http://purl.org/dc/terms/description> \"\\n’ \" .\n"
70
- end
71
- end
72
-
73
- describe 'legacy non-utf-8 characters' do
74
- let(:ds) do
75
- ActiveFedora::NtriplesRDFDatastream.new.tap do |datastream|
76
- allow(datastream).to receive(:new_record?).and_return(false)
77
- allow(datastream).to receive(:remote_content).and_return("<info:fedora/scholarsphere:qv33rx50r> <http://purl.org/dc/terms/description> \"\\n\xE2\x80\x99 \" .\n".force_encoding('ASCII-8BIT'))
78
- end
79
- end
80
- it "does not error on access" do
81
- expect(ds.resource.dump(:ntriples)).to eq "<info:fedora/scholarsphere:qv33rx50r> <http://purl.org/dc/terms/description> \"\\n’ \" .\n"
82
- end
83
- end
84
- end
@@ -1,208 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe ActiveFedora::RDFDatastream do
4
- before do
5
- class DummySubnode < ActiveTriples::Resource
6
- property :title, predicate: ::RDF::Vocab::DC[:title], class_name: ::RDF::Literal
7
- property :relation, predicate: ::RDF::Vocab::DC[:relation]
8
- end
9
-
10
- class DummyResource < ActiveFedora::RDFDatastream
11
- property :title, predicate: ::RDF::Vocab::DC[:title], class_name: ::RDF::Literal
12
- property :license, predicate: ::RDF::Vocab::DC[:license], class_name: DummySubnode
13
- property :creator, predicate: ::RDF::Vocab::DC[:creator], class_name: 'DummyAsset'
14
-
15
- def serialization_format
16
- :ntriples
17
- end
18
- end
19
-
20
- class DummyAsset < ActiveFedora::Base
21
- has_subresource 'descMetadata', class_name: 'DummyResource'
22
- property :something, predicate: ::RDF::URI('http://example.com/thing')
23
- end
24
- end
25
-
26
- after do
27
- Object.send(:remove_const, "DummyAsset")
28
- Object.send(:remove_const, "DummyResource")
29
- Object.send(:remove_const, "DummySubnode")
30
- end
31
-
32
- subject(:resource) { DummyResource.new("#{ActiveFedora.fedora.host}/test/test:1") }
33
-
34
- describe "attribute setting" do
35
- context "on text attributes" do
36
- before do
37
- resource.title = "bla"
38
- end
39
-
40
- it "lets you access" do
41
- expect(resource.title).to eq ["bla"]
42
- end
43
-
44
- it "marks it as changed" do
45
- expect(resource).to be_changed
46
- end
47
-
48
- context "after it is persisted" do
49
- before do
50
- resource.save
51
- resource.reload
52
- end
53
-
54
- it "is persisted" do
55
- expect(resource.resource).to be_persisted
56
- end
57
-
58
- context "and it's reloaded" do
59
- before do
60
- resource.reload
61
- end
62
-
63
- it "is accessible after being saved" do
64
- expect(resource.title).to eq ["bla"]
65
- end
66
-
67
- it "serializes to content" do
68
- expect(resource.content).not_to be_blank
69
- end
70
- end
71
-
72
- context "and it is found again" do
73
- before do
74
- @object = DummyResource.new(resource.uri)
75
- end
76
-
77
- it "serializes to content" do
78
- expect(@object.content).not_to be_blank
79
- end
80
-
81
- it "is accessible after being saved" do
82
- expect(@object.title).to eq ["bla"]
83
- end
84
-
85
- it "has datastream content" do
86
- expect(@object.remote_content).not_to be_blank
87
- end
88
- end
89
- end
90
- end
91
-
92
- context "on rdf resource attributes" do
93
- context "persisted to parent" do
94
- before do
95
- dummy = DummySubnode.new
96
- dummy.title = 'subbla'
97
- resource.license = dummy
98
- end
99
-
100
- it "lets you access" do
101
- expect(resource.license.first.title).to eq ['subbla']
102
- end
103
-
104
- it "marks it as changed" do
105
- expect(resource).to be_changed
106
- end
107
- end
108
- context "persisted to repository" do
109
- before do
110
- allow_any_instance_of(DummySubnode).to receive(:repository).and_return(RDF::Repository.new)
111
- dummy = DummySubnode.new(RDF::URI('http://example.org/dummy/blah'))
112
- dummy.title = 'subbla'
113
- # We want to have to manually persist to the repository.
114
- # Parent objects shouldn't be persisting children they share with other parents
115
- dummy.persist!
116
- resource.license = dummy
117
- end
118
-
119
- it "lets you access" do
120
- expect(resource.license.first.title).to eq ['subbla']
121
- end
122
-
123
- it "marks it as changed" do
124
- expect(resource).to be_changed
125
- end
126
- end
127
- end
128
- end
129
-
130
- describe "relationships" do
131
- before do
132
- @new_object = DummyAsset.create(something: ["subbla"])
133
- resource.title = ["bla"]
134
- resource.creator = @new_object
135
- end
136
-
137
- it "can set sub-properties to AF objects" do
138
- expect(resource.creator).to eq [@new_object]
139
- end
140
-
141
- it "has accessible relationship attributes" do
142
- expect(resource.creator.first.something).to eq ["subbla"]
143
- end
144
-
145
- it "lets me get to an AF:Base object" do
146
- resource.save
147
- new_resource = DummyResource.new(resource.uri)
148
- expect(new_resource.creator.first).to be_kind_of(ActiveFedora::Base)
149
- end
150
-
151
- context "when the AF:Base object is deleted" do
152
- before do
153
- resource.save
154
- @resource = DummyResource.new(resource.uri)
155
- @new_object.destroy
156
- end
157
- it "gives back an ActiveTriples::Resource" do
158
- expect(@resource.creator.first).to be_kind_of(ActiveTriples::Resource)
159
- expect(@resource.creator.first.rdf_subject).to eq @new_object.resource.rdf_subject
160
- end
161
- end
162
-
163
- it "allows for deep attributes to be set directly" do
164
- resource.creator.first.something = ["Bla"]
165
- expect(resource.creator.first.something).to eq ["Bla"]
166
- end
167
-
168
- context "when the subject is set with base_uri" do
169
- before do
170
- @old_uri = DummyResource.resource_class.base_uri
171
- DummyResource.resource_class.configure base_uri: 'http://example.org/'
172
- new_object = DummyAsset.new
173
- new_object.save
174
- resource.creator = new_object
175
- end
176
- after do
177
- DummyResource.resource_class.configure base_uri: @old_uri
178
- end
179
-
180
- it "lets me get to an AF:Base object" do
181
- resource.save
182
- new_resource = DummyResource.new(resource.uri)
183
- expect(new_resource.creator.first).to be_kind_of(ActiveFedora::Base)
184
- end
185
- end
186
-
187
- context "when the object with a relationship is saved" do
188
- before do
189
- resource.save
190
- end
191
-
192
- it "is retrievable" do
193
- expect(resource.creator.first.something).to eq ["subbla"]
194
- end
195
- end
196
-
197
- context "when the object with a relationship is frozen" do
198
- before do
199
- resource.save
200
- resource.freeze
201
- end
202
-
203
- it "is retrievable" do
204
- expect(resource.creator.first.something).to eq ["subbla"]
205
- end
206
- end
207
- end
208
- end
@@ -1,106 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe ActiveFedora::RDFXMLDatastream do
4
- describe "a new instance" do
5
- subject(:my_datastream) { MyRdfxmlDatastream.new }
6
- before(:each) do
7
- class MyRdfxmlDatastream < ActiveFedora::RDFXMLDatastream
8
- property :publisher, predicate: ::RDF::Vocab::DC.publisher
9
- end
10
- allow(my_datastream).to receive(:id).and_return('test:1')
11
- end
12
-
13
- after(:each) do
14
- Object.send(:remove_const, :MyRdfxmlDatastream)
15
- end
16
-
17
- it "saves and reload" do
18
- my_datastream.publisher = ["St. Martin's Press"]
19
- expect(my_datastream.serialize).to match(/<rdf:RDF/)
20
- end
21
- end
22
-
23
- describe "a complex data model" do
24
- before do
25
- class DAMS < RDF::Vocabulary("http://library.ucsd.edu/ontology/dams#")
26
- property :title
27
- property :relatedTitle
28
- property :type
29
- property :date
30
- property :beginDate
31
- property :endDate
32
- property :language
33
- property :typeOfResource
34
- property :otherResource
35
- property :RelatedResource
36
- property :description
37
- property :uri
38
- property :relationship
39
- property :Relationship
40
- property :role
41
- property :name
42
- property :assembledCollection
43
- property :Object
44
- property :value
45
- end
46
-
47
- module RDF
48
- # This enables RDF to respond_to? :value
49
- def self.value
50
- self[:value]
51
- end
52
- end
53
-
54
- class MyDatastream < ActiveFedora::RDFXMLDatastream
55
- property :resource_type, predicate: DAMS.typeOfResource
56
- property :title, predicate: DAMS.title, class_name: 'Description'
57
-
58
- rdf_subject { |ds| RDF::URI.new(ds.about) }
59
-
60
- attr_accessor :about
61
-
62
- def initialize(options = {})
63
- @about = options.delete(:about)
64
- super
65
- end
66
-
67
- class Description < ActiveTriples::Resource
68
- configure type: DAMS.Description
69
- property :value, predicate: ::RDF.value do |index|
70
- index.as :searchable
71
- end
72
- end
73
- end
74
- end
75
-
76
- after do
77
- Object.send(:remove_const, :MyDatastream)
78
- Object.send(:remove_const, :DAMS)
79
- end
80
-
81
- describe "a new instance" do
82
- let(:my_datastream) { MyDatastream.new(about: "http://library.ucsd.edu/ark:/20775/") }
83
- it "has a subject" do
84
- expect(my_datastream.rdf_subject.to_s).to eq "http://library.ucsd.edu/ark:/20775/"
85
- end
86
- end
87
-
88
- describe "an instance with content" do
89
- let(:my_datastream) do
90
- my_datastream = MyDatastream.new(about: "http://library.ucsd.edu/ark:/20775/")
91
- my_datastream.content = File.new('spec/fixtures/damsObjectModel.xml').read
92
- my_datastream
93
- end
94
- it "has a subject" do
95
- expect(my_datastream.rdf_subject.to_s).to eq "http://library.ucsd.edu/ark:/20775/"
96
- end
97
- it "has mimeType" do
98
- expect(my_datastream.mime_type).to eq 'text/xml'
99
- end
100
- it "has fields" do
101
- expect(my_datastream.resource_type).to eq ["image"]
102
- expect(my_datastream.title.first.value).to eq ["example title"]
103
- end
104
- end
105
- end
106
- end