active-fedora 11.0.0.rc6 → 11.0.0.rc7

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