active-fedora 8.0.0.rc2 → 8.0.0.rc3
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.
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 0a1de80932b343143d4dafbcb2255cb2b0c4d171
|
4
|
+
data.tar.gz: 6fc87f6d95515b4fd6756733d3f8393242b64466
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: d1376858b32294906301a9a32250970100391dfd007b8b77b7e472ee7cc1fdd5c11eb45347ae24d6929cd4b0511d6e3b4c67958e46abb74e8dde0f169c2e62ac
|
7
|
+
data.tar.gz: b481db866def8a92febf742fa95ea7a6256ab30c9cf4f0eff39dae2b67352fdab8d6cdd5ca2931002987f5634beb20b6fb4a49afc0d0415ed80b00cab06c1023
|
@@ -83,11 +83,13 @@ module ActiveFedora
|
|
83
83
|
end
|
84
84
|
raise UnknownAttributeError, "#{self.class} does not have an attribute `#{field}'" unless self.class.defined_attributes.key?(field)
|
85
85
|
if self.class.multiple?(field)
|
86
|
-
unless args.nil? || args.respond_to?(:each)
|
87
|
-
raise ArgumentError, "Cannot set the multi-valued attribute `#{field}' to a
|
86
|
+
unless args.nil? || ( args.respond_to?(:each) && !args.kind_of?(ActiveTriples::Resource) )
|
87
|
+
raise ArgumentError, "Cannot set the multi-valued attribute `#{field}' to a single value."
|
88
88
|
end
|
89
89
|
elsif args.respond_to?(:each) # unique
|
90
|
-
|
90
|
+
unless args.kind_of?(ActiveTriples::Resource)
|
91
|
+
raise ArgumentError, "Cannot set the single-valued attribute `#{field}' to multiple values."
|
92
|
+
end
|
91
93
|
end
|
92
94
|
self.class.defined_attributes[field].writer(self, args)
|
93
95
|
end
|
@@ -134,6 +134,11 @@ module ActiveFedora
|
|
134
134
|
end
|
135
135
|
|
136
136
|
|
137
|
+
# Creates a datastream to be added to the object
|
138
|
+
# @param type [Class] the class of the datastream object to be created (or a String that can eval to a class)
|
139
|
+
# @param dsid [String] the dsid of the datastream to be created, or a generated value if false
|
140
|
+
# @param opts [Hash] the ds options to be assigned to the created object, cf. Rubydora::Datastream.DS_ATTRIBUTES
|
141
|
+
# @return [ActiveFedora::Datastream] a datastream object of the type indicated in the parameters
|
137
142
|
def create_datastream(type, dsid, opts={})
|
138
143
|
klass = type.kind_of?(Class) ? type : type.constantize
|
139
144
|
raise ArgumentError, "Argument dsid must be of type string" if dsid && !dsid.kind_of?(String)
|
@@ -1,7 +1,7 @@
|
|
1
1
|
APP_ROOT = File.expand_path("#{File.dirname(__FILE__)}/../../")
|
2
2
|
|
3
3
|
require 'jettywrapper'
|
4
|
-
JETTY_ZIP_BASENAME = '
|
4
|
+
JETTY_ZIP_BASENAME = '7.x-stable'
|
5
5
|
Jettywrapper.url = "https://github.com/projecthydra/hydra-jetty/archive/#{JETTY_ZIP_BASENAME}.zip"
|
6
6
|
|
7
7
|
namespace :active_fedora do
|
@@ -7,8 +7,8 @@ describe ActiveFedora::Datastreams do
|
|
7
7
|
describe "serializing datastreams" do
|
8
8
|
before :all do
|
9
9
|
class TestingMetadataSerializing < ActiveFedora::Base
|
10
|
-
has_metadata :
|
11
|
-
has_metadata :
|
10
|
+
has_metadata name: "nokogiri_autocreate_on", autocreate: true, type: ActiveFedora::OmDatastream
|
11
|
+
has_metadata name: "nokogiri_autocreate_off", autocreate: false, type: ActiveFedora::OmDatastream
|
12
12
|
end
|
13
13
|
end
|
14
14
|
|
@@ -19,7 +19,7 @@ describe ActiveFedora::Datastreams do
|
|
19
19
|
subject { TestingMetadataSerializing.new }
|
20
20
|
|
21
21
|
it "should work" do
|
22
|
-
subject.save(:
|
22
|
+
subject.save(validate: false)
|
23
23
|
subject.nokogiri_autocreate_on.should_not be_new
|
24
24
|
subject.nokogiri_autocreate_off.should be_new
|
25
25
|
end
|
@@ -29,43 +29,43 @@ describe ActiveFedora::Datastreams do
|
|
29
29
|
describe "#has_metadata" do
|
30
30
|
before :all do
|
31
31
|
class HasMetadata < ActiveFedora::Base
|
32
|
-
has_metadata :
|
33
|
-
has_metadata :
|
32
|
+
has_metadata name: "with_versions", autocreate: true, label: "Versioned DS", type: ActiveFedora::SimpleDatastream
|
33
|
+
has_metadata name: "without_versions", autocreate: true, versionable: false, type: ActiveFedora::SimpleDatastream
|
34
34
|
end
|
35
35
|
end
|
36
36
|
after :all do
|
37
37
|
Object.send(:remove_const, :HasMetadata)
|
38
38
|
end
|
39
|
-
before
|
40
|
-
@base = ActiveFedora::Base.new(:
|
41
|
-
@base.add_datastream(@base.create_datastream(ActiveFedora::Datastream, "testDS", :
|
39
|
+
before do
|
40
|
+
@base = ActiveFedora::Base.new(pid:"test:has_metadata_base")
|
41
|
+
@base.add_datastream(@base.create_datastream(ActiveFedora::Datastream, "testDS", dsLabel: "Test DS"))
|
42
42
|
@base.datastreams["testDS"].content = "blah blah blah"
|
43
43
|
@base.save
|
44
|
-
@test = HasMetadata.new(:
|
44
|
+
@test = HasMetadata.new(pid:"test:has_metadata_model")
|
45
45
|
@test.save
|
46
46
|
end
|
47
47
|
|
48
|
-
after
|
48
|
+
after do
|
49
49
|
@base.delete
|
50
50
|
@test.delete
|
51
51
|
end
|
52
52
|
|
53
53
|
it "should create datastreams from the spec on new objects" do
|
54
|
-
@test.without_versions.versionable.
|
55
|
-
@test.with_versions.versionable.
|
56
|
-
@test.with_versions.dsLabel.
|
54
|
+
expect(@test.without_versions.versionable).to be_false
|
55
|
+
expect(@test.with_versions.versionable).to be_true
|
56
|
+
expect(@test.with_versions.dsLabel).to eql "Versioned DS"
|
57
57
|
@test.without_versions.content= "blah blah blah"
|
58
58
|
@test.save
|
59
|
-
HasMetadata.find(@test.pid).without_versions.versionable.
|
59
|
+
expect(HasMetadata.find(@test.pid).without_versions.versionable).to be_false
|
60
60
|
end
|
61
61
|
|
62
62
|
it "should use ds_specs and preserve existing datastreams on migrated objects" do
|
63
63
|
test_obj = HasMetadata.find(@base.pid)
|
64
|
-
test_obj.datastreams["testDS"].dsLabel.
|
65
|
-
test_obj.datastreams["testDS"].new
|
66
|
-
test_obj.with_versions.dsLabel.
|
67
|
-
test_obj.without_versions.versionable.
|
68
|
-
test_obj.with_versions.new
|
64
|
+
expect(test_obj.datastreams["testDS"].dsLabel).to eql "Test DS"
|
65
|
+
expect(test_obj.datastreams["testDS"].new?).to be_false
|
66
|
+
expect(test_obj.with_versions.dsLabel).to eql "Versioned DS"
|
67
|
+
expect(test_obj.without_versions.versionable).to be_false
|
68
|
+
expect(test_obj.with_versions.new?).to be_true
|
69
69
|
end
|
70
70
|
|
71
71
|
end
|
@@ -73,60 +73,101 @@ describe ActiveFedora::Datastreams do
|
|
73
73
|
describe "#has_file_datastream" do
|
74
74
|
before :all do
|
75
75
|
class HasFile < ActiveFedora::Base
|
76
|
-
has_file_datastream :
|
77
|
-
has_file_datastream :
|
76
|
+
has_file_datastream name: "file_ds", versionable: false
|
77
|
+
has_file_datastream name: "file_ds2", versionable: false, autocreate: false
|
78
78
|
end
|
79
79
|
end
|
80
80
|
after :all do
|
81
81
|
Object.send(:remove_const, :HasFile)
|
82
82
|
end
|
83
|
-
before
|
84
|
-
@base = ActiveFedora::Base.new(:
|
83
|
+
before do
|
84
|
+
@base = ActiveFedora::Base.new(pid:"test:ds_versionable_base")
|
85
85
|
@base.save
|
86
|
-
@base2 = ActiveFedora::Base.new(:
|
87
|
-
@base2.add_datastream(@base2.create_datastream(ActiveFedora::Datastream,"file_ds", :
|
86
|
+
@base2 = ActiveFedora::Base.new(pid:"test:ds_versionable_base2")
|
87
|
+
@base2.add_datastream(@base2.create_datastream(ActiveFedora::Datastream,"file_ds", versionable:true,dsLabel:"Pre-existing DS"))
|
88
88
|
@base2.datastreams["file_ds"].content = "blah blah blah"
|
89
89
|
@base2.save
|
90
|
-
@has_file = HasFile.new(:
|
90
|
+
@has_file = HasFile.new(pid:"test:ds_versionable_has_file")
|
91
91
|
@has_file.save
|
92
92
|
end
|
93
93
|
|
94
|
-
after
|
94
|
+
after do
|
95
95
|
@base.delete
|
96
96
|
@base2.delete
|
97
97
|
@has_file.delete
|
98
98
|
end
|
99
99
|
|
100
100
|
it "should create datastreams from the spec on new objects" do
|
101
|
-
@has_file.file_ds.versionable.
|
101
|
+
expect(@has_file.file_ds.versionable).to be_false
|
102
102
|
@has_file.file_ds.content = "blah blah blah"
|
103
|
-
@has_file.file_ds.changed
|
104
|
-
@has_file.file_ds2.changed
|
105
|
-
@has_file.file_ds2.new
|
103
|
+
expect(@has_file.file_ds.changed?).to be_true
|
104
|
+
expect(@has_file.file_ds2.changed?).to be_false # no autocreate
|
105
|
+
expect(@has_file.file_ds2.new?).to be_true
|
106
106
|
@has_file.save
|
107
|
-
@has_file.file_ds.versionable.
|
107
|
+
expect(@has_file.file_ds.versionable).to be_false
|
108
108
|
test_obj = HasFile.find(@has_file.pid)
|
109
|
-
test_obj.file_ds.versionable.
|
110
|
-
test_obj.rels_ext.changed
|
111
|
-
test_obj.file_ds.changed
|
112
|
-
test_obj.file_ds2.changed
|
113
|
-
test_obj.file_ds2.new
|
109
|
+
expect(test_obj.file_ds.versionable).to be_false
|
110
|
+
expect(test_obj.rels_ext.changed?).to be_false
|
111
|
+
expect(test_obj.file_ds.changed?).to be_false
|
112
|
+
expect(test_obj.file_ds2.changed?).to be_false
|
113
|
+
expect(test_obj.file_ds2.new?).to be_true
|
114
114
|
end
|
115
115
|
|
116
116
|
it "should use ds_specs on migrated objects" do
|
117
117
|
test_obj = HasFile.find(@base.pid)
|
118
|
-
test_obj.file_ds.versionable.
|
119
|
-
test_obj.file_ds.new
|
118
|
+
expect(test_obj.file_ds.versionable).to be_false
|
119
|
+
expect(test_obj.file_ds.new?).to be_true
|
120
120
|
test_obj.file_ds.content = "blah blah blah"
|
121
121
|
test_obj.save
|
122
|
-
test_obj.file_ds.versionable.
|
122
|
+
expect(test_obj.file_ds.versionable).to be_false
|
123
123
|
# look it up again to check datastream profile
|
124
124
|
test_obj = HasFile.find(@base.pid)
|
125
|
-
test_obj.file_ds.versionable.
|
126
|
-
test_obj.file_ds.dsLabel.
|
125
|
+
expect(test_obj.file_ds.versionable).to be_false
|
126
|
+
expect(test_obj.file_ds.dsLabel).to eql "File Datastream"
|
127
127
|
test_obj = HasFile.find(@base2.pid)
|
128
|
-
test_obj.file_ds.versionable.
|
129
|
-
test_obj.file_ds.dsLabel.
|
128
|
+
expect(test_obj.file_ds.versionable).to be_true
|
129
|
+
expect(test_obj.file_ds.dsLabel).to eql "Pre-existing DS"
|
130
130
|
end
|
131
131
|
end
|
132
|
-
|
132
|
+
|
133
|
+
describe "#create_datastream" do
|
134
|
+
before do
|
135
|
+
@base = ActiveFedora::Base.new(pid:"test:create_datastream")
|
136
|
+
@base.save
|
137
|
+
@ds_location = ActiveFedora.solr_config[:url] + "/admin/file/?file=schema.xml"
|
138
|
+
open(@ds_location) do |f|
|
139
|
+
@ds_content = f.read
|
140
|
+
end
|
141
|
+
end
|
142
|
+
|
143
|
+
after do
|
144
|
+
@base.delete
|
145
|
+
end
|
146
|
+
# external file datastreams require changes to XACML policies, but http URIs should work
|
147
|
+
it "should create external datastreams" do
|
148
|
+
# we should be albe to reliably download the solr schema
|
149
|
+
ds_opts = {mimeType:'text/xml',controlGroup:'E',dsLabel:'Some metadata',
|
150
|
+
dsLocation:@ds_location}
|
151
|
+
ds = @base.create_datastream('ActiveFedora::Datastream', 'someMetadata', ds_opts)
|
152
|
+
@base.add_datastream(ds)
|
153
|
+
@base.save
|
154
|
+
expect(@base.datastreams.keys.include?('someMetadata')).to be_true
|
155
|
+
test_obj = ActiveFedora::Base.find(@base.pid)
|
156
|
+
expect(test_obj.datastreams['someMetadata'].content).to eql @ds_content
|
157
|
+
expect(test_obj.datastreams['someMetadata'].controlGroup).to eql 'E'
|
158
|
+
end
|
159
|
+
|
160
|
+
# file:// URIs require changes to XACML policies, but http URIs should work
|
161
|
+
it "should create managed datastreams from a given URL" do
|
162
|
+
ds_opts = {mimeType:'text/xml',controlGroup:'M',dsLabel:'Some metadata',
|
163
|
+
dsLocation:@ds_location}
|
164
|
+
ds = @base.create_datastream('ActiveFedora::Datastream', 'someMetadata', ds_opts)
|
165
|
+
@base.add_datastream(ds)
|
166
|
+
@base.save
|
167
|
+
expect(@base.datastreams.keys.include?('someMetadata')).to be_true
|
168
|
+
test_obj = ActiveFedora::Base.find(@base.pid)
|
169
|
+
expect(test_obj.datastreams['someMetadata'].content).to eql @ds_content
|
170
|
+
expect(test_obj.datastreams['someMetadata'].controlGroup).to eql 'M'
|
171
|
+
end
|
172
|
+
end
|
173
|
+
end
|
@@ -220,17 +220,27 @@ describe ActiveFedora::Base do
|
|
220
220
|
before :all do
|
221
221
|
class BarRdfDatastream < ActiveFedora::NtriplesRDFDatastream
|
222
222
|
property :title, :predicate => RDF::DC.title
|
223
|
-
property :description, :predicate => RDF::DC.description
|
223
|
+
property :description, :predicate => RDF::DC.description
|
224
|
+
property :author, :predicate => RDF::FOAF.Person
|
225
|
+
property :editor, :predicate => RDF::FOAF.Person
|
224
226
|
end
|
225
227
|
class BarHistory4 < ActiveFedora::Base
|
226
228
|
has_metadata 'rdfish', :type=>BarRdfDatastream
|
227
|
-
has_attributes :title,
|
229
|
+
has_attributes :title, datastream: 'rdfish', multiple: true
|
230
|
+
has_attributes :description, datastream: 'rdfish', multiple: false
|
231
|
+
has_attributes :author, datastream: 'rdfish', multiple: false
|
232
|
+
has_attributes :editor, datastream: 'rdfish', multiple: true
|
233
|
+
end
|
234
|
+
class PersonResource < ActiveTriples::Resource
|
235
|
+
configure type: RDF::FOAF.Person
|
236
|
+
property :person_name, predicate: RDF::FOAF.name
|
228
237
|
end
|
229
238
|
end
|
230
239
|
|
231
240
|
after :all do
|
232
241
|
Object.send(:remove_const, :BarHistory4)
|
233
242
|
Object.send(:remove_const, :BarRdfDatastream)
|
243
|
+
Object.send(:remove_const, :PersonResource)
|
234
244
|
end
|
235
245
|
|
236
246
|
subject { BarHistory4.new }
|
@@ -241,13 +251,27 @@ describe ActiveFedora::Base do
|
|
241
251
|
subject.title = ["Title1", "Title2"]
|
242
252
|
subject.title_changed?.should be true
|
243
253
|
end
|
254
|
+
it "should not accept a single literal value" do
|
255
|
+
expect { subject.title = "Title1" }.to raise_error
|
256
|
+
end
|
257
|
+
it "should not accept a single ActiveTriples::Resource" do
|
258
|
+
editor = PersonResource.new.tap { |p| p.person_name = "Sally" }
|
259
|
+
expect { subject.editor = editor }.to raise_error
|
260
|
+
end
|
244
261
|
end
|
245
262
|
describe "with a single-valued field" do
|
246
263
|
it "should be able to track change status" do
|
247
264
|
subject.description_changed?.should be false
|
248
|
-
subject.description =
|
265
|
+
subject.description = "A brief description"
|
249
266
|
subject.description_changed?.should be true
|
250
267
|
end
|
268
|
+
it "should not accept an array of literal values" do
|
269
|
+
expect { subject.description = ["A brief description", "A longer description"] }.to raise_error
|
270
|
+
end
|
271
|
+
it "should accept an ActiveTriples::Resource" do
|
272
|
+
author = PersonResource.new.tap { |p| p.person_name = "Bob" }
|
273
|
+
expect { subject.author = author }.not_to raise_error
|
274
|
+
end
|
251
275
|
end
|
252
276
|
end
|
253
277
|
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: active-fedora
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 8.0.0.
|
4
|
+
version: 8.0.0.rc3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Matt Zumwalt
|
@@ -10,7 +10,7 @@ authors:
|
|
10
10
|
autorequire:
|
11
11
|
bindir: bin
|
12
12
|
cert_chain: []
|
13
|
-
date:
|
13
|
+
date: 2015-01-07 00:00:00.000000000 Z
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: rsolr
|