ld4l-open_annotation_rdf 0.0.4
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 +7 -0
- data/.gitignore +23 -0
- data/.ruby-gemset +1 -0
- data/.ruby-version +1 -0
- data/Gemfile +11 -0
- data/LICENSE.txt +14 -0
- data/README.md +231 -0
- data/Rakefile +2 -0
- data/ld4l-open_annotation_rdf.gemspec +46 -0
- data/lib/ld4l/open_annotation_rdf.rb +66 -0
- data/lib/ld4l/open_annotation_rdf/annotation.rb +82 -0
- data/lib/ld4l/open_annotation_rdf/comment_annotation.rb +47 -0
- data/lib/ld4l/open_annotation_rdf/comment_body.rb +24 -0
- data/lib/ld4l/open_annotation_rdf/configuration.rb +127 -0
- data/lib/ld4l/open_annotation_rdf/semantic_tag_annotation.rb +66 -0
- data/lib/ld4l/open_annotation_rdf/semantic_tag_body.rb +70 -0
- data/lib/ld4l/open_annotation_rdf/tag_annotation.rb +98 -0
- data/lib/ld4l/open_annotation_rdf/tag_body.rb +83 -0
- data/lib/ld4l/open_annotation_rdf/version.rb +5 -0
- data/lib/ld4l/open_annotation_rdf/vocab/cnt.rb +6 -0
- data/lib/ld4l/open_annotation_rdf/vocab/dctypes.rb +5 -0
- data/lib/ld4l/open_annotation_rdf/vocab/oa.rb +23 -0
- data/spec/ld4l/open_annotation_rdf/annotation_spec.rb +603 -0
- data/spec/ld4l/open_annotation_rdf/comment_annotation_spec.rb +559 -0
- data/spec/ld4l/open_annotation_rdf/comment_body_spec.rb +371 -0
- data/spec/ld4l/open_annotation_rdf/configuration_spec.rb +194 -0
- data/spec/ld4l/open_annotation_rdf/semantic_tag_annotation_spec.rb +619 -0
- data/spec/ld4l/open_annotation_rdf/semantic_tag_body_spec.rb +412 -0
- data/spec/ld4l/open_annotation_rdf/tag_annotation_spec.rb +672 -0
- data/spec/ld4l/open_annotation_rdf/tag_body_spec.rb +430 -0
- data/spec/ld4l/open_annotation_rdf_spec.rb +57 -0
- data/spec/spec_helper.rb +21 -0
- metadata +201 -0
@@ -0,0 +1,371 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
require 'ld4l/open_annotation_rdf/vocab/dctypes'
|
3
|
+
require 'ld4l/open_annotation_rdf/vocab/oa'
|
4
|
+
|
5
|
+
|
6
|
+
describe 'LD4L::OpenAnnotationRDF::CommentBody' do
|
7
|
+
|
8
|
+
subject { LD4L::OpenAnnotationRDF::CommentBody.new }
|
9
|
+
|
10
|
+
describe 'rdf_subject' do
|
11
|
+
it "should be a blank node if we haven't set it" do
|
12
|
+
expect(subject.rdf_subject.node?).to be true
|
13
|
+
end
|
14
|
+
|
15
|
+
it "should be settable when it has not been set yet" do
|
16
|
+
subject.set_subject! RDF::URI('http://example.org/moomin')
|
17
|
+
expect(subject.rdf_subject).to eq RDF::URI('http://example.org/moomin')
|
18
|
+
end
|
19
|
+
|
20
|
+
it "should append to base URI when setting to non-URI subject" do
|
21
|
+
subject.set_subject! '123'
|
22
|
+
expect(subject.rdf_subject).to eq RDF::URI("#{LD4L::OpenAnnotationRDF::CommentBody.base_uri}123")
|
23
|
+
end
|
24
|
+
|
25
|
+
describe 'when changing subject' do
|
26
|
+
before do
|
27
|
+
subject << RDF::Statement.new(subject.rdf_subject, RDF::DC.title, RDF::Literal('Comet in Moominland'))
|
28
|
+
subject << RDF::Statement.new(RDF::URI('http://example.org/moomin_comics'), RDF::DC.isPartOf, subject.rdf_subject)
|
29
|
+
subject << RDF::Statement.new(RDF::URI('http://example.org/moomin_comics'), RDF::DC.relation, 'http://example.org/moomin_land')
|
30
|
+
subject.set_subject! RDF::URI('http://example.org/moomin')
|
31
|
+
end
|
32
|
+
|
33
|
+
it 'should update graph subjects' do
|
34
|
+
expect(subject.has_statement?(RDF::Statement.new(subject.rdf_subject, RDF::DC.title, RDF::Literal('Comet in Moominland')))).to be true
|
35
|
+
end
|
36
|
+
|
37
|
+
it 'should update graph objects' do
|
38
|
+
expect(subject.has_statement?(RDF::Statement.new(RDF::URI('http://example.org/moomin_comics'), RDF::DC.isPartOf, subject.rdf_subject))).to be true
|
39
|
+
end
|
40
|
+
|
41
|
+
it 'should leave other uris alone' do
|
42
|
+
expect(subject.has_statement?(RDF::Statement.new(RDF::URI('http://example.org/moomin_comics'), RDF::DC.relation, 'http://example.org/moomin_land'))).to be true
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
46
|
+
describe 'created with URI subject' do
|
47
|
+
before do
|
48
|
+
subject.set_subject! RDF::URI('http://example.org/moomin')
|
49
|
+
end
|
50
|
+
|
51
|
+
it 'should not be settable' do
|
52
|
+
expect{ subject.set_subject! RDF::URI('http://example.org/moomin2') }.to raise_error
|
53
|
+
end
|
54
|
+
end
|
55
|
+
end
|
56
|
+
|
57
|
+
|
58
|
+
# -------------------------------------------------
|
59
|
+
# START -- Test attributes specific to this model
|
60
|
+
# -------------------------------------------------
|
61
|
+
|
62
|
+
describe 'type' do
|
63
|
+
it "should be set to text and ContentAsText from new" do
|
64
|
+
expect(subject.type.size).to eq 2
|
65
|
+
expect(subject.type).to include RDFVocabularies::DCTYPES.Text
|
66
|
+
expect(subject.type).to include RDFVocabularies::CNT.ContentAsText
|
67
|
+
end
|
68
|
+
|
69
|
+
it "should be settable" do
|
70
|
+
subject.type = RDFVocabularies::DCTYPES.Text
|
71
|
+
expect(subject.type.size).to eq 1
|
72
|
+
expect(subject.type.first).to eq RDFVocabularies::DCTYPES.Text
|
73
|
+
end
|
74
|
+
|
75
|
+
it "should be settable to multiple values" do
|
76
|
+
t = [RDFVocabularies::DCTYPES.Text, RDFVocabularies::CNT.ContentAsText]
|
77
|
+
subject.set_value(:type,t)
|
78
|
+
expect(subject.type.size).to eq 2
|
79
|
+
expect(subject.type).to include RDFVocabularies::DCTYPES.Text
|
80
|
+
expect(subject.type).to include RDFVocabularies::CNT.ContentAsText
|
81
|
+
end
|
82
|
+
|
83
|
+
it "should be changeable" do
|
84
|
+
subject.type = RDFVocabularies::DCTYPES.Text
|
85
|
+
subject.type = RDFVocabularies::CNT.ContentAsText
|
86
|
+
expect(subject.type.size).to eq 1
|
87
|
+
expect(subject.type.first).to eq RDFVocabularies::CNT.ContentAsText
|
88
|
+
end
|
89
|
+
|
90
|
+
it "should be changeable for multiple values" do
|
91
|
+
t = [RDFVocabularies::DCTYPES.Text, RDFVocabularies::CNT.ContentAsText]
|
92
|
+
subject.set_value(:type,t)
|
93
|
+
expect(subject.type.size).to eq 2
|
94
|
+
expect(subject.type).to include RDFVocabularies::DCTYPES.Text
|
95
|
+
expect(subject.type).to include RDFVocabularies::CNT.ContentAsText
|
96
|
+
t = subject.get_values(:type)
|
97
|
+
t[0] = RDFVocabularies::OA.Tag # dummy type for testing
|
98
|
+
t[1] = RDFVocabularies::OA.SemanticTag # dummy type for testing
|
99
|
+
subject.set_value(:type,t)
|
100
|
+
expect(subject.type.size).to eq 2
|
101
|
+
expect(subject.type).to include RDFVocabularies::OA.Tag
|
102
|
+
expect(subject.type).to include RDFVocabularies::OA.SemanticTag
|
103
|
+
end
|
104
|
+
end
|
105
|
+
|
106
|
+
describe 'content' do
|
107
|
+
it "should be empty array if we haven't set it" do
|
108
|
+
expect(subject.content).to match_array([])
|
109
|
+
end
|
110
|
+
|
111
|
+
it "should be settable" do
|
112
|
+
subject.content = "bla"
|
113
|
+
expect(subject.content).to eq ["bla"]
|
114
|
+
end
|
115
|
+
|
116
|
+
it "should be changeable" do
|
117
|
+
subject.content = "bla"
|
118
|
+
subject.content = "new bla"
|
119
|
+
expect(subject.content).to eq ["new bla"]
|
120
|
+
end
|
121
|
+
end
|
122
|
+
|
123
|
+
describe 'format' do
|
124
|
+
it "should be empty array if we haven't set it" do
|
125
|
+
expect(subject.format).to match_array([])
|
126
|
+
end
|
127
|
+
|
128
|
+
it "should be settable" do
|
129
|
+
a_format = "text/rtf"
|
130
|
+
subject.format = a_format
|
131
|
+
expect(subject.format.first).to eq "text/rtf"
|
132
|
+
end
|
133
|
+
|
134
|
+
it "should be changeable" do
|
135
|
+
orig_format = "text/plain"
|
136
|
+
new_format = "text/xml"
|
137
|
+
subject.format = orig_format
|
138
|
+
subject.format = new_format
|
139
|
+
expect(subject.format.first).to eq new_format
|
140
|
+
end
|
141
|
+
end
|
142
|
+
|
143
|
+
describe '#localname_prefix' do
|
144
|
+
it "should return default prefix" do
|
145
|
+
prefix = LD4L::OpenAnnotationRDF::CommentBody.localname_prefix
|
146
|
+
expect(prefix).to eq "cb"
|
147
|
+
end
|
148
|
+
end
|
149
|
+
|
150
|
+
# -----------------------------------------------
|
151
|
+
# END -- Test attributes specific to this model
|
152
|
+
# -----------------------------------------------
|
153
|
+
|
154
|
+
|
155
|
+
describe "#persisted?" do
|
156
|
+
context 'with a repository' do
|
157
|
+
before do
|
158
|
+
# Create inmemory repository
|
159
|
+
repository = RDF::Repository.new
|
160
|
+
allow(subject).to receive(:repository).and_return(repository)
|
161
|
+
end
|
162
|
+
|
163
|
+
context "when the object is new" do
|
164
|
+
it "should return false" do
|
165
|
+
expect(subject).not_to be_persisted
|
166
|
+
end
|
167
|
+
end
|
168
|
+
|
169
|
+
context "when it is saved" do
|
170
|
+
before do
|
171
|
+
subject.content = "bla"
|
172
|
+
subject.persist!
|
173
|
+
end
|
174
|
+
|
175
|
+
it "should return true" do
|
176
|
+
expect(subject).to be_persisted
|
177
|
+
end
|
178
|
+
|
179
|
+
context "and then modified" do
|
180
|
+
before do
|
181
|
+
subject.content = "newbla"
|
182
|
+
end
|
183
|
+
|
184
|
+
it "should return true" do
|
185
|
+
expect(subject).to be_persisted
|
186
|
+
end
|
187
|
+
end
|
188
|
+
context "and then reloaded" do
|
189
|
+
before do
|
190
|
+
subject.reload
|
191
|
+
end
|
192
|
+
|
193
|
+
it "should reset the content" do
|
194
|
+
expect(subject.content).to eq ["bla"]
|
195
|
+
end
|
196
|
+
|
197
|
+
it "should be persisted" do
|
198
|
+
expect(subject).to be_persisted
|
199
|
+
end
|
200
|
+
end
|
201
|
+
end
|
202
|
+
end
|
203
|
+
end
|
204
|
+
|
205
|
+
describe "#persist!" do
|
206
|
+
context "when the repository is set" do
|
207
|
+
context "and the item is not a blank node" do
|
208
|
+
|
209
|
+
subject {LD4L::OpenAnnotationRDF::CommentBody.new("123")}
|
210
|
+
|
211
|
+
before do
|
212
|
+
# Create inmemory repository
|
213
|
+
@repo = RDF::Repository.new
|
214
|
+
allow(subject.class).to receive(:repository).and_return(nil)
|
215
|
+
allow(subject).to receive(:repository).and_return(@repo)
|
216
|
+
subject.content = "bla"
|
217
|
+
subject.persist!
|
218
|
+
end
|
219
|
+
|
220
|
+
it "should persist to the repository" do
|
221
|
+
expect(@repo.statements.first).to eq subject.statements.first
|
222
|
+
end
|
223
|
+
|
224
|
+
it "should delete from the repository" do
|
225
|
+
subject.reload
|
226
|
+
expect(subject.content).to eq ["bla"]
|
227
|
+
subject.content = []
|
228
|
+
expect(subject.content).to eq []
|
229
|
+
subject.persist!
|
230
|
+
subject.reload
|
231
|
+
expect(subject.content).to eq []
|
232
|
+
expect(@repo.statements.to_a.length).to eq 2 # Only the 2 type statements
|
233
|
+
end
|
234
|
+
end
|
235
|
+
end
|
236
|
+
end
|
237
|
+
|
238
|
+
describe '#destroy!' do
|
239
|
+
before do
|
240
|
+
subject << RDF::Statement(RDF::DC.LicenseDocument, RDF::DC.title, 'LICENSE')
|
241
|
+
end
|
242
|
+
|
243
|
+
subject { LD4L::OpenAnnotationRDF::CommentBody.new('456')}
|
244
|
+
|
245
|
+
it 'should return true' do
|
246
|
+
expect(subject.destroy!).to be true
|
247
|
+
expect(subject.destroy).to be true
|
248
|
+
end
|
249
|
+
|
250
|
+
it 'should delete the graph' do
|
251
|
+
subject.destroy
|
252
|
+
expect(subject).to be_empty
|
253
|
+
end
|
254
|
+
end
|
255
|
+
|
256
|
+
describe '#rdf_label' do
|
257
|
+
subject {LD4L::OpenAnnotationRDF::CommentBody.new("123")}
|
258
|
+
|
259
|
+
it 'should return an array of label values' do
|
260
|
+
expect(subject.rdf_label).to be_kind_of Array
|
261
|
+
end
|
262
|
+
|
263
|
+
it 'should return the default label as URI when no title property exists' do
|
264
|
+
expect(subject.rdf_label).to eq [RDF::URI("#{LD4L::OpenAnnotationRDF::CommentBody.base_uri}123")]
|
265
|
+
end
|
266
|
+
|
267
|
+
it 'should prioritize configured label values' do
|
268
|
+
custom_label = RDF::URI('http://example.org/custom_label')
|
269
|
+
subject.class.configure :rdf_label => custom_label
|
270
|
+
subject << RDF::Statement(subject.rdf_subject, custom_label, RDF::Literal('New Label'))
|
271
|
+
expect(subject.rdf_label).to eq ['New Label']
|
272
|
+
end
|
273
|
+
end
|
274
|
+
|
275
|
+
describe '#solrize' do
|
276
|
+
it 'should return a label for bnodes' do
|
277
|
+
expect(subject.solrize).to eq subject.rdf_label
|
278
|
+
end
|
279
|
+
|
280
|
+
it 'should return a string of the resource uri' do
|
281
|
+
subject.set_subject! 'http://example.org/moomin'
|
282
|
+
expect(subject.solrize).to eq 'http://example.org/moomin'
|
283
|
+
end
|
284
|
+
end
|
285
|
+
|
286
|
+
describe 'editing the graph' do
|
287
|
+
it 'should write properties when statements are added' do
|
288
|
+
subject << RDF::Statement.new(subject.rdf_subject, RDFVocabularies::CNT.chars, 'Great book!')
|
289
|
+
expect(subject.content).to include 'Great book!'
|
290
|
+
end
|
291
|
+
|
292
|
+
it 'should delete properties when statements are removed' do
|
293
|
+
subject << RDF::Statement.new(subject.rdf_subject, RDFVocabularies::CNT.chars, 'Great book!')
|
294
|
+
subject.delete RDF::Statement.new(subject.rdf_subject, RDFVocabularies::CNT.chars, 'Great book!')
|
295
|
+
expect(subject.content).to eq []
|
296
|
+
end
|
297
|
+
end
|
298
|
+
|
299
|
+
describe 'big complex graphs' do
|
300
|
+
before do
|
301
|
+
class DummyPerson < ActiveTriples::Resource
|
302
|
+
configure :type => RDF::URI('http://example.org/Person')
|
303
|
+
property :foafname, :predicate => RDF::FOAF.name
|
304
|
+
property :publications, :predicate => RDF::FOAF.publications, :class_name => 'DummyDocument'
|
305
|
+
property :knows, :predicate => RDF::FOAF.knows, :class_name => DummyPerson
|
306
|
+
end
|
307
|
+
|
308
|
+
class DummyDocument < ActiveTriples::Resource
|
309
|
+
configure :type => RDF::URI('http://example.org/Document')
|
310
|
+
property :title, :predicate => RDF::DC.title
|
311
|
+
property :creator, :predicate => RDF::DC.creator, :class_name => 'DummyPerson'
|
312
|
+
end
|
313
|
+
|
314
|
+
LD4L::OpenAnnotationRDF::CommentBody.property :item, :predicate => RDF::DC.relation, :class_name => DummyDocument
|
315
|
+
end
|
316
|
+
|
317
|
+
subject { LD4L::OpenAnnotationRDF::CommentBody.new }
|
318
|
+
|
319
|
+
let (:document1) do
|
320
|
+
d = DummyDocument.new
|
321
|
+
d.title = 'Document One'
|
322
|
+
d
|
323
|
+
end
|
324
|
+
|
325
|
+
let (:document2) do
|
326
|
+
d = DummyDocument.new
|
327
|
+
d.title = 'Document Two'
|
328
|
+
d
|
329
|
+
end
|
330
|
+
|
331
|
+
let (:person1) do
|
332
|
+
p = DummyPerson.new
|
333
|
+
p.foafname = 'Alice'
|
334
|
+
p
|
335
|
+
end
|
336
|
+
|
337
|
+
let (:person2) do
|
338
|
+
p = DummyPerson.new
|
339
|
+
p.foafname = 'Bob'
|
340
|
+
p
|
341
|
+
end
|
342
|
+
|
343
|
+
let (:data) { <<END
|
344
|
+
_:1 <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://example.org/SomeClass> .
|
345
|
+
_:1 <http://purl.org/dc/terms/relation> _:2 .
|
346
|
+
_:2 <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://example.org/Document> .
|
347
|
+
_:2 <http://purl.org/dc/terms/title> "Document One" .
|
348
|
+
_:2 <http://purl.org/dc/terms/creator> _:3 .
|
349
|
+
_:2 <http://purl.org/dc/terms/creator> _:4 .
|
350
|
+
_:4 <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://example.org/Person> .
|
351
|
+
_:4 <http://xmlns.com/foaf/0.1/name> "Bob" .
|
352
|
+
_:3 <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://example.org/Person> .
|
353
|
+
_:3 <http://xmlns.com/foaf/0.1/name> "Alice" .
|
354
|
+
_:3 <http://xmlns.com/foaf/0.1/knows> _:4 ."
|
355
|
+
END
|
356
|
+
}
|
357
|
+
|
358
|
+
after do
|
359
|
+
Object.send(:remove_const, "DummyDocument")
|
360
|
+
Object.send(:remove_const, "DummyPerson")
|
361
|
+
end
|
362
|
+
|
363
|
+
it 'should allow access to deep nodes' do
|
364
|
+
document1.creator = [person1, person2]
|
365
|
+
document2.creator = person1
|
366
|
+
person1.knows = person2
|
367
|
+
subject.item = [document1]
|
368
|
+
expect(subject.item.first.creator.first.knows.first.foafname).to eq ['Bob']
|
369
|
+
end
|
370
|
+
end
|
371
|
+
end
|
@@ -0,0 +1,194 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe 'LD4L::OpenAnnotationRDF' do
|
4
|
+
|
5
|
+
describe '#configuration' do
|
6
|
+
describe "base_uri" do
|
7
|
+
context "when base_uri is not configured" do
|
8
|
+
before do
|
9
|
+
class DummyAnnotation < LD4L::OpenAnnotationRDF::Annotation
|
10
|
+
configure :type => RDFVocabularies::OA.Annotation, :base_uri => LD4L::OpenAnnotationRDF.configuration.base_uri, :repository => :default
|
11
|
+
end
|
12
|
+
end
|
13
|
+
after do
|
14
|
+
Object.send(:remove_const, "DummyAnnotation") if Object
|
15
|
+
end
|
16
|
+
it "should generate an Annotation URI using the default base_uri" do
|
17
|
+
expect(DummyAnnotation.new('1').rdf_subject.to_s).to eq "http://localhost/1"
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
context "when uri ends with slash" do
|
22
|
+
before do
|
23
|
+
LD4L::OpenAnnotationRDF.configure do |config|
|
24
|
+
config.base_uri = "http://localhost/test_slash/"
|
25
|
+
end
|
26
|
+
class DummyAnnotation < LD4L::OpenAnnotationRDF::Annotation
|
27
|
+
configure :type => RDFVocabularies::OA.Annotation, :base_uri => LD4L::OpenAnnotationRDF.configuration.base_uri, :repository => :default
|
28
|
+
end
|
29
|
+
end
|
30
|
+
after do
|
31
|
+
Object.send(:remove_const, "DummyAnnotation") if Object
|
32
|
+
LD4L::OpenAnnotationRDF.reset
|
33
|
+
end
|
34
|
+
|
35
|
+
it "should generate an Annotation URI using the configured base_uri" do
|
36
|
+
expect(DummyAnnotation.new('1').rdf_subject.to_s).to eq "http://localhost/test_slash/1"
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
context "when uri does not end with slash" do
|
41
|
+
before do
|
42
|
+
LD4L::OpenAnnotationRDF.configure do |config|
|
43
|
+
config.base_uri = "http://localhost/test_no_slash"
|
44
|
+
end
|
45
|
+
class DummyAnnotation < LD4L::OpenAnnotationRDF::Annotation
|
46
|
+
configure :type => RDFVocabularies::OA.Annotation, :base_uri => LD4L::OpenAnnotationRDF.configuration.base_uri, :repository => :default
|
47
|
+
end
|
48
|
+
end
|
49
|
+
after do
|
50
|
+
Object.send(:remove_const, "DummyAnnotation") if Object
|
51
|
+
LD4L::OpenAnnotationRDF.reset
|
52
|
+
end
|
53
|
+
|
54
|
+
it "should generate an Annotation URI using the configured base_uri" do
|
55
|
+
expect(DummyAnnotation.new('1').rdf_subject.to_s).to eq "http://localhost/test_no_slash/1"
|
56
|
+
end
|
57
|
+
end
|
58
|
+
|
59
|
+
it "should return value of configured base_uri" do
|
60
|
+
LD4L::OpenAnnotationRDF.configure do |config|
|
61
|
+
config.base_uri = "http://localhost/test_config/"
|
62
|
+
end
|
63
|
+
expect(LD4L::OpenAnnotationRDF.configuration.base_uri).to eq "http://localhost/test_config/"
|
64
|
+
end
|
65
|
+
|
66
|
+
it "should return default base_uri when base_uri is reset" do
|
67
|
+
LD4L::OpenAnnotationRDF.configure do |config|
|
68
|
+
config.base_uri = "http://localhost/test_config/"
|
69
|
+
end
|
70
|
+
expect(LD4L::OpenAnnotationRDF.configuration.base_uri).to eq "http://localhost/test_config/"
|
71
|
+
LD4L::OpenAnnotationRDF.configuration.reset_base_uri
|
72
|
+
expect(LD4L::OpenAnnotationRDF.configuration.base_uri).to eq "http://localhost/"
|
73
|
+
end
|
74
|
+
|
75
|
+
it "should return default base_uri when all configs are reset" do
|
76
|
+
LD4L::OpenAnnotationRDF.configure do |config|
|
77
|
+
config.base_uri = "http://localhost/test_config/"
|
78
|
+
end
|
79
|
+
expect(LD4L::OpenAnnotationRDF.configuration.base_uri).to eq "http://localhost/test_config/"
|
80
|
+
LD4L::OpenAnnotationRDF.reset
|
81
|
+
expect(LD4L::OpenAnnotationRDF.configuration.base_uri).to eq "http://localhost/"
|
82
|
+
end
|
83
|
+
end
|
84
|
+
|
85
|
+
describe "localname_minter" do
|
86
|
+
context "when minter is nil" do
|
87
|
+
before do
|
88
|
+
class DummyAnnotation < LD4L::OpenAnnotationRDF::Annotation
|
89
|
+
configure :type => RDFVocabularies::OA.Annotation, :base_uri => LD4L::OpenAnnotationRDF.configuration.base_uri, :repository => :default
|
90
|
+
end
|
91
|
+
end
|
92
|
+
after do
|
93
|
+
Object.send(:remove_const, "DummyAnnotation") if Object
|
94
|
+
end
|
95
|
+
it "should use default minter in minter gem" do
|
96
|
+
localname = ActiveTriples::LocalName::Minter.generate_local_name(
|
97
|
+
LD4L::OpenAnnotationRDF::Annotation, 10, {:prefix=>'default_'},
|
98
|
+
LD4L::OpenAnnotationRDF.configuration.localname_minter )
|
99
|
+
expect(localname).to be_kind_of String
|
100
|
+
expect(localname.size).to eq 44
|
101
|
+
expect(localname).to match /default_[a-zA-Z0-9]{8}-[a-zA-Z0-9]{4}-[a-zA-Z0-9]{4}-[a-zA-Z0-9]{4}-[a-zA-Z0-9]{12}/
|
102
|
+
end
|
103
|
+
end
|
104
|
+
|
105
|
+
context "when minter is configured" do
|
106
|
+
before do
|
107
|
+
LD4L::OpenAnnotationRDF.configure do |config|
|
108
|
+
config.localname_minter = lambda { |prefix=""| prefix+'_configured_'+SecureRandom.uuid }
|
109
|
+
end
|
110
|
+
class DummyAnnotation < LD4L::OpenAnnotationRDF::Annotation
|
111
|
+
configure :type => RDFVocabularies::OA.Annotation, :base_uri => LD4L::OpenAnnotationRDF.configuration.base_uri, :repository => :default
|
112
|
+
end
|
113
|
+
end
|
114
|
+
after do
|
115
|
+
Object.send(:remove_const, "DummyAnnotation") if Object
|
116
|
+
LD4L::OpenAnnotationRDF.reset
|
117
|
+
end
|
118
|
+
|
119
|
+
it "should generate an Annotation URI using the configured localname_minter" do
|
120
|
+
localname = ActiveTriples::LocalName::Minter.generate_local_name(
|
121
|
+
LD4L::OpenAnnotationRDF::Annotation, 10,
|
122
|
+
LD4L::OpenAnnotationRDF::Annotation.localname_prefix,
|
123
|
+
&LD4L::OpenAnnotationRDF.configuration.localname_minter )
|
124
|
+
expect(localname).to be_kind_of String
|
125
|
+
expect(localname.size).to eq 50
|
126
|
+
expect(localname).to match /oa_configured_[a-zA-Z0-9]{8}-[a-zA-Z0-9]{4}-[a-zA-Z0-9]{4}-[a-zA-Z0-9]{4}-[a-zA-Z0-9]{12}/
|
127
|
+
end
|
128
|
+
end
|
129
|
+
end
|
130
|
+
end
|
131
|
+
|
132
|
+
|
133
|
+
describe "LD4L::OpenAnnotationRDF::Configuration" do
|
134
|
+
describe "#base_uri" do
|
135
|
+
it "should default to localhost" do
|
136
|
+
expect(LD4L::OpenAnnotationRDF::Configuration.new.base_uri).to eq "http://localhost/"
|
137
|
+
end
|
138
|
+
|
139
|
+
it "should be settable" do
|
140
|
+
config = LD4L::OpenAnnotationRDF::Configuration.new
|
141
|
+
config.base_uri = "http://localhost/test"
|
142
|
+
expect(config.base_uri).to eq "http://localhost/test"
|
143
|
+
end
|
144
|
+
|
145
|
+
it "should be re-settable" do
|
146
|
+
config = LD4L::OpenAnnotationRDF::Configuration.new
|
147
|
+
config.base_uri = "http://localhost/test/again"
|
148
|
+
expect(config.base_uri).to eq "http://localhost/test/again"
|
149
|
+
config.reset_base_uri
|
150
|
+
expect(config.base_uri).to eq "http://localhost/"
|
151
|
+
end
|
152
|
+
end
|
153
|
+
|
154
|
+
describe "#localname_minter" do
|
155
|
+
it "should default to nil" do
|
156
|
+
expect(LD4L::OpenAnnotationRDF::Configuration.new.localname_minter).to eq nil
|
157
|
+
end
|
158
|
+
|
159
|
+
it "should be settable" do
|
160
|
+
config = LD4L::OpenAnnotationRDF::Configuration.new
|
161
|
+
config.localname_minter = lambda { |prefix=""| prefix+'_configured_'+SecureRandom.uuid }
|
162
|
+
expect(config.localname_minter).to be_kind_of Proc
|
163
|
+
end
|
164
|
+
|
165
|
+
it "should be re-settable" do
|
166
|
+
config = LD4L::OpenAnnotationRDF::Configuration.new
|
167
|
+
config.localname_minter = lambda { |prefix=""| prefix+'_configured_'+SecureRandom.uuid }
|
168
|
+
expect(config.localname_minter).to be_kind_of Proc
|
169
|
+
config.reset_localname_minter
|
170
|
+
expect(config.localname_minter).to eq nil
|
171
|
+
end
|
172
|
+
end
|
173
|
+
|
174
|
+
describe "#unique_tags" do
|
175
|
+
it "should default to true" do
|
176
|
+
expect(LD4L::OpenAnnotationRDF::Configuration.new.unique_tags).to be true
|
177
|
+
end
|
178
|
+
|
179
|
+
it "should be settable" do
|
180
|
+
config = LD4L::OpenAnnotationRDF::Configuration.new
|
181
|
+
config.unique_tags = false
|
182
|
+
expect(config.unique_tags).to be false
|
183
|
+
end
|
184
|
+
|
185
|
+
it "should be re-settable" do
|
186
|
+
config = LD4L::OpenAnnotationRDF::Configuration.new
|
187
|
+
config.unique_tags = false
|
188
|
+
expect(config.unique_tags).to be false
|
189
|
+
config.reset_unique_tags
|
190
|
+
expect(config.unique_tags).to be true
|
191
|
+
end
|
192
|
+
end
|
193
|
+
end
|
194
|
+
end
|