active-triples 0.8.1 → 0.8.2
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 +4 -4
- data/.travis.yml +8 -9
- data/CHANGES.md +69 -0
- data/Gemfile +0 -2
- data/Guardfile +1 -2
- data/active-triples.gemspec +3 -3
- data/lib/active/triples.rb +1 -0
- data/lib/active_triples.rb +4 -0
- data/lib/active_triples/configurable.rb +3 -1
- data/lib/active_triples/configuration.rb +1 -0
- data/lib/active_triples/configuration/item.rb +1 -0
- data/lib/active_triples/configuration/item_factory.rb +1 -0
- data/lib/active_triples/configuration/merge_item.rb +5 -2
- data/lib/active_triples/extension_strategy.rb +1 -0
- data/lib/active_triples/identifiable.rb +1 -0
- data/lib/active_triples/list.rb +2 -0
- data/lib/active_triples/nested_attributes.rb +1 -1
- data/lib/active_triples/node_config.rb +5 -3
- data/lib/active_triples/persistable.rb +1 -0
- data/lib/active_triples/persistence_strategies/parent_strategy.rb +104 -29
- data/lib/active_triples/persistence_strategies/persistence_strategy.rb +15 -7
- data/lib/active_triples/persistence_strategies/repository_strategy.rb +26 -22
- data/lib/active_triples/properties.rb +84 -6
- data/lib/active_triples/property.rb +35 -4
- data/lib/active_triples/property_builder.rb +38 -4
- data/lib/active_triples/rdf_source.rb +225 -75
- data/lib/active_triples/reflection.rb +42 -3
- data/lib/active_triples/relation.rb +330 -73
- data/lib/active_triples/repositories.rb +4 -2
- data/lib/active_triples/resource.rb +1 -0
- data/lib/active_triples/schema.rb +1 -0
- data/lib/active_triples/undefined_property_error.rb +27 -0
- data/lib/active_triples/version.rb +2 -1
- data/spec/active_triples/configurable_spec.rb +3 -2
- data/spec/active_triples/configuration_spec.rb +2 -1
- data/spec/active_triples/extension_strategy_spec.rb +2 -1
- data/spec/active_triples/identifiable_spec.rb +7 -11
- data/spec/active_triples/list_spec.rb +1 -4
- data/spec/active_triples/nested_attributes_spec.rb +4 -3
- data/spec/active_triples/persistable_spec.rb +4 -1
- data/spec/active_triples/persistence_strategies/parent_strategy_spec.rb +141 -11
- data/spec/active_triples/persistence_strategies/persistence_strategy_spec.rb +1 -0
- data/spec/active_triples/persistence_strategies/repository_strategy_spec.rb +32 -17
- data/spec/active_triples/properties_spec.rb +68 -33
- data/spec/active_triples/property_builder_spec.rb +36 -0
- data/spec/active_triples/property_spec.rb +15 -1
- data/spec/active_triples/rdf_source_spec.rb +544 -6
- data/spec/active_triples/reflection_spec.rb +78 -0
- data/spec/active_triples/relation_spec.rb +505 -3
- data/spec/active_triples/repositories_spec.rb +3 -1
- data/spec/active_triples/resource_spec.rb +90 -147
- data/spec/active_triples/schema_spec.rb +3 -2
- data/spec/active_triples_spec.rb +1 -0
- data/spec/integration/dummies/dummy_resource_a.rb +6 -0
- data/spec/integration/dummies/dummy_resource_b.rb +6 -0
- data/spec/integration/parent_persistence_spec.rb +18 -0
- data/spec/integration/reciprocal_properties_spec.rb +69 -0
- data/spec/pragmatic_context_spec.rb +10 -8
- data/spec/spec_helper.rb +5 -0
- data/spec/support/active_model_lint.rb +4 -6
- data/spec/support/dummies/basic_persistable.rb +2 -11
- data/spec/support/matchers.rb +11 -0
- data/spec/support/shared_examples/persistence_strategy.rb +3 -16
- metadata +20 -13
@@ -1,3 +1,4 @@
|
|
1
|
+
# frozen_string_literal: true
|
1
2
|
require "spec_helper"
|
2
3
|
describe ActiveTriples::Repositories do
|
3
4
|
subject { ActiveTriples::Repositories }
|
@@ -15,7 +16,8 @@ describe ActiveTriples::Repositories do
|
|
15
16
|
end
|
16
17
|
|
17
18
|
it 'should throw an error if passed something that is not a repository' do
|
18
|
-
expect{subject.add_repository :name, :not_a_repo}
|
19
|
+
expect{subject.add_repository :name, :not_a_repo}
|
20
|
+
.to raise_error ArgumentError
|
19
21
|
end
|
20
22
|
end
|
21
23
|
|
@@ -1,16 +1,20 @@
|
|
1
|
+
# frozen_string_literal: true
|
1
2
|
require 'spec_helper'
|
2
3
|
|
3
4
|
describe ActiveTriples::Resource do
|
4
|
-
it_behaves_like 'an ActiveModel'
|
5
|
+
it_behaves_like 'an ActiveModel' do
|
6
|
+
let(:am_lint_class) { described_class }
|
7
|
+
end
|
8
|
+
|
5
9
|
before do
|
6
10
|
class DummyLicense < ActiveTriples::Resource
|
7
|
-
property :title, :predicate => RDF::DC.title
|
11
|
+
property :title, :predicate => RDF::Vocab::DC.title
|
8
12
|
end
|
9
13
|
|
10
14
|
class DummyResource < ActiveTriples::Resource
|
11
15
|
configure :type => RDF::URI('http://example.org/SomeClass')
|
12
|
-
property :license, :predicate => RDF::DC.license, :class_name => DummyLicense
|
13
|
-
property :title, :predicate => RDF::DC.title
|
16
|
+
property :license, :predicate => RDF::Vocab::DC.license, :class_name => DummyLicense
|
17
|
+
property :title, :predicate => RDF::Vocab::DC.title
|
14
18
|
end
|
15
19
|
end
|
16
20
|
after do
|
@@ -22,7 +26,29 @@ describe ActiveTriples::Resource do
|
|
22
26
|
|
23
27
|
describe '#property' do
|
24
28
|
it 'raises error when set directly on Resource' do
|
25
|
-
expect { ActiveTriples::Resource.property :
|
29
|
+
expect { ActiveTriples::Resource.property :p, predicate: RDF::Vocab::DC.title }
|
30
|
+
.to raise_error 'Properties not definable directly on ' \
|
31
|
+
'ActiveTriples::Resource, use a subclass'
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
describe 'setting properties' do
|
36
|
+
before do
|
37
|
+
class DummyWithClass < ActiveTriples::Resource
|
38
|
+
configure :type => RDF::URI('http://example.org/DummyClass')
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
after { Object.send(:remove_const, "DummyWithClass") }
|
43
|
+
|
44
|
+
it 'should replace property value when Resource class has a rdf type' do
|
45
|
+
dl1 = DummyWithClass.new('http://example.org/dl1')
|
46
|
+
dl2 = DummyWithClass.new('http://example.org/dl2')
|
47
|
+
|
48
|
+
subject.title = dl1
|
49
|
+
expect( subject.title ).to eq [dl1]
|
50
|
+
subject.title = dl2
|
51
|
+
expect( subject.title ).to eq [dl2]
|
26
52
|
end
|
27
53
|
end
|
28
54
|
|
@@ -42,22 +68,22 @@ describe ActiveTriples::Resource do
|
|
42
68
|
|
43
69
|
describe 'when changing subject' do
|
44
70
|
before do
|
45
|
-
subject << RDF::Statement.new(subject.rdf_subject, RDF::DC.title, RDF::Literal('Comet in Moominland'))
|
46
|
-
subject << RDF::Statement.new(RDF::URI('http://example.org/moomin_comics'), RDF::DC.isPartOf, subject.rdf_subject)
|
47
|
-
subject << RDF::Statement.new(RDF::URI('http://example.org/moomin_comics'), RDF::DC.relation, 'http://example.org/moomin_land')
|
71
|
+
subject << RDF::Statement.new(subject.rdf_subject, RDF::Vocab::DC.title, RDF::Literal('Comet in Moominland'))
|
72
|
+
subject << RDF::Statement.new(RDF::URI('http://example.org/moomin_comics'), RDF::Vocab::DC.isPartOf, subject.rdf_subject)
|
73
|
+
subject << RDF::Statement.new(RDF::URI('http://example.org/moomin_comics'), RDF::Vocab::DC.relation, 'http://example.org/moomin_land')
|
48
74
|
subject.set_subject! RDF::URI('http://example.org/moomin')
|
49
75
|
end
|
50
76
|
|
51
77
|
it 'should update graph subjects' do
|
52
|
-
expect(subject.has_statement?(RDF::Statement.new(subject.rdf_subject, RDF::DC.title, RDF::Literal('Comet in Moominland')))).to be true
|
78
|
+
expect(subject.has_statement?(RDF::Statement.new(subject.rdf_subject, RDF::Vocab::DC.title, RDF::Literal('Comet in Moominland')))).to be true
|
53
79
|
end
|
54
80
|
|
55
81
|
it 'should update graph objects' do
|
56
|
-
expect(subject.has_statement?(RDF::Statement.new(RDF::URI('http://example.org/moomin_comics'), RDF::DC.isPartOf, subject.rdf_subject))).to be true
|
82
|
+
expect(subject.has_statement?(RDF::Statement.new(RDF::URI('http://example.org/moomin_comics'), RDF::Vocab::DC.isPartOf, subject.rdf_subject))).to be true
|
57
83
|
end
|
58
84
|
|
59
85
|
it 'should leave other uris alone' do
|
60
|
-
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
|
86
|
+
expect(subject.has_statement?(RDF::Statement.new(RDF::URI('http://example.org/moomin_comics'), RDF::Vocab::DC.relation, 'http://example.org/moomin_land'))).to be true
|
61
87
|
end
|
62
88
|
end
|
63
89
|
|
@@ -67,7 +93,8 @@ describe ActiveTriples::Resource do
|
|
67
93
|
end
|
68
94
|
|
69
95
|
it 'should not be settable' do
|
70
|
-
expect{ subject.set_subject! RDF::URI('http://example.org/moomin2') }
|
96
|
+
expect{ subject.set_subject! RDF::URI('http://example.org/moomin2') }
|
97
|
+
.to raise_error 'Refusing update URI when one is already assigned!'
|
71
98
|
end
|
72
99
|
end
|
73
100
|
|
@@ -292,14 +319,14 @@ describe ActiveTriples::Resource do
|
|
292
319
|
|
293
320
|
it "should warn when the repo doesn't exist" do
|
294
321
|
allow(DummyLicense).to receive(:repository).and_return('repo2')
|
295
|
-
expect { subject }.to raise_error ActiveTriples::RepositoryNotFoundError
|
322
|
+
expect { subject }.to raise_error ActiveTriples::RepositoryNotFoundError
|
296
323
|
end
|
297
324
|
end
|
298
325
|
|
299
326
|
describe '#destroy!' do
|
300
327
|
before do
|
301
328
|
subject.title = 'Creative Commons'
|
302
|
-
subject << RDF::Statement(RDF::DC.LicenseDocument, RDF::DC.title, 'LICENSE')
|
329
|
+
subject << RDF::Statement(RDF::Vocab::DC.LicenseDocument, RDF::Vocab::DC.title, 'LICENSE')
|
303
330
|
end
|
304
331
|
|
305
332
|
subject { DummyLicense.new('http://example.org/cc')}
|
@@ -315,33 +342,30 @@ describe ActiveTriples::Resource do
|
|
315
342
|
end
|
316
343
|
|
317
344
|
context 'with a parent' do
|
318
|
-
before
|
319
|
-
parent.license = subject
|
320
|
-
end
|
345
|
+
before { parent.license = subject }
|
321
346
|
|
322
347
|
let(:parent) do
|
323
348
|
DummyResource.new('http://example.org/moomi')
|
324
349
|
end
|
325
350
|
|
326
|
-
it '
|
327
|
-
|
328
|
-
|
351
|
+
it 'empties the graph and removes it from the parent' do
|
352
|
+
expect { parent.license.first.destroy! }
|
353
|
+
.to change { parent.license.empty? }.to true
|
329
354
|
end
|
330
355
|
|
331
|
-
it '
|
332
|
-
subject.
|
333
|
-
|
334
|
-
|
335
|
-
end
|
356
|
+
it 'removes its whole graph from the parent' do
|
357
|
+
statements = subject.statements.to_a
|
358
|
+
parent.license.first.destroy
|
359
|
+
statements.each { |s| expect(parent.statements).not_to include s }
|
336
360
|
end
|
337
361
|
end
|
338
362
|
end
|
339
363
|
|
340
364
|
describe 'class_name' do
|
341
365
|
it 'should raise an error when not a class or string' do
|
342
|
-
DummyResource.property :relation, :predicate => RDF::DC.relation, :class_name => RDF::URI('http://example.org')
|
366
|
+
DummyResource.property :relation, :predicate => RDF::Vocab::DC.relation, :class_name => RDF::URI('http://example.org')
|
343
367
|
d = DummyResource.new
|
344
|
-
d.relation = RDF::DC.type
|
368
|
+
d.relation = RDF::Vocab::DC.type
|
345
369
|
expect { d.relation.first }.to raise_error "class_name for relation is a RDF::URI; must be a class"
|
346
370
|
end
|
347
371
|
|
@@ -391,29 +415,29 @@ describe ActiveTriples::Resource do
|
|
391
415
|
|
392
416
|
context 'with unmodeled data' do
|
393
417
|
before do
|
394
|
-
subject << RDF::Statement(subject.rdf_subject, RDF::DC.contributor, 'Tove Jansson')
|
395
|
-
subject << RDF::Statement(subject.rdf_subject, RDF::DC.relation, RDF::URI('http://example.org/moomi'))
|
418
|
+
subject << RDF::Statement(subject.rdf_subject, RDF::Vocab::DC.contributor, 'Tove Jansson')
|
419
|
+
subject << RDF::Statement(subject.rdf_subject, RDF::Vocab::DC.relation, RDF::URI('http://example.org/moomi'))
|
396
420
|
node = RDF::Node.new
|
397
|
-
subject << RDF::Statement(RDF::URI('http://example.org/moomi'), RDF::DC.relation, node)
|
398
|
-
subject << RDF::Statement(node, RDF::DC.title, 'bnode')
|
421
|
+
subject << RDF::Statement(RDF::URI('http://example.org/moomi'), RDF::Vocab::DC.relation, node)
|
422
|
+
subject << RDF::Statement(node, RDF::Vocab::DC.title, 'bnode')
|
399
423
|
end
|
400
424
|
|
401
425
|
it 'should include data with URIs as attribute names' do
|
402
|
-
expect(subject.attributes[RDF::DC.contributor.to_s]).to eq ['Tove Jansson']
|
426
|
+
expect(subject.attributes[RDF::Vocab::DC.contributor.to_s]).to eq ['Tove Jansson']
|
403
427
|
end
|
404
428
|
|
405
429
|
it 'should return generic Resources' do
|
406
|
-
expect(subject.attributes[RDF::DC.relation.to_s].first).to be_a ActiveTriples::Resource
|
430
|
+
expect(subject.attributes[RDF::Vocab::DC.relation.to_s].first).to be_a ActiveTriples::Resource
|
407
431
|
end
|
408
432
|
|
409
433
|
it 'should build deep data for Resources' do
|
410
|
-
expect(subject.attributes[RDF::DC.relation.to_s].first.get_values(RDF::DC.relation).
|
411
|
-
first.get_values(RDF::DC.title)).to eq ['bnode']
|
434
|
+
expect(subject.attributes[RDF::Vocab::DC.relation.to_s].first.get_values(RDF::Vocab::DC.relation).
|
435
|
+
first.get_values(RDF::Vocab::DC.title)).to eq ['bnode']
|
412
436
|
end
|
413
437
|
|
414
438
|
it 'should include deep data in serializable_hash' do
|
415
|
-
expect(subject.serializable_hash[RDF::DC.relation.to_s].first.get_values(RDF::DC.relation).
|
416
|
-
first.get_values(RDF::DC.title)).to eq ['bnode']
|
439
|
+
expect(subject.serializable_hash[RDF::Vocab::DC.relation.to_s].first.get_values(RDF::Vocab::DC.relation).
|
440
|
+
first.get_values(RDF::Vocab::DC.title)).to eq ['bnode']
|
417
441
|
end
|
418
442
|
end
|
419
443
|
|
@@ -434,69 +458,6 @@ describe ActiveTriples::Resource do
|
|
434
458
|
end
|
435
459
|
end
|
436
460
|
|
437
|
-
describe 'array setters' do
|
438
|
-
before do
|
439
|
-
DummyResource.property :aggregates, :predicate => RDF::DC.relation
|
440
|
-
end
|
441
|
-
|
442
|
-
it "should be empty array if we haven't set it" do
|
443
|
-
expect(subject.aggregates).to match_array([])
|
444
|
-
end
|
445
|
-
|
446
|
-
context "when set to a URI" do
|
447
|
-
let(:aggregates_uri) { RDF::URI("http://example.org/b1") }
|
448
|
-
before do
|
449
|
-
subject.aggregates = aggregates_uri
|
450
|
-
end
|
451
|
-
it "produce an ActiveTriple::Resource" do
|
452
|
-
expect(subject.aggregates.first).to be_a ActiveTriples::Resource
|
453
|
-
end
|
454
|
-
it "should have an ID accessor" do
|
455
|
-
expect(subject.aggregates_ids).to eq [aggregates_uri]
|
456
|
-
end
|
457
|
-
end
|
458
|
-
|
459
|
-
it "should be settable" do
|
460
|
-
subject.aggregates = RDF::URI("http://example.org/b1")
|
461
|
-
expect(subject.aggregates.first.rdf_subject).to eq RDF::URI("http://example.org/b1")
|
462
|
-
['id']
|
463
|
-
end
|
464
|
-
|
465
|
-
context 'with values' do
|
466
|
-
let(:bib1) { RDF::URI("http://example.org/b1") }
|
467
|
-
let(:bib2) { RDF::URI("http://example.org/b2") }
|
468
|
-
let(:bib3) { RDF::URI("http://example.org/b3") }
|
469
|
-
|
470
|
-
before do
|
471
|
-
subject.aggregates = bib1
|
472
|
-
subject.aggregates << bib2
|
473
|
-
subject.aggregates << bib3
|
474
|
-
end
|
475
|
-
|
476
|
-
it 'raises error when trying to set nil value' do
|
477
|
-
expect { subject.aggregates[1] = nil }.to raise_error /value must be an RDF URI, Node, Literal, or a valid datatype/
|
478
|
-
end
|
479
|
-
|
480
|
-
it "should be changeable for multiple values" do
|
481
|
-
new_bib1 = RDF::URI("http://example.org/b1_NEW")
|
482
|
-
new_bib3 = RDF::URI("http://example.org/b3_NEW")
|
483
|
-
|
484
|
-
aggregates = subject.aggregates.dup
|
485
|
-
aggregates[0] = new_bib1
|
486
|
-
aggregates[2] = new_bib3
|
487
|
-
subject.aggregates = aggregates
|
488
|
-
|
489
|
-
expect(subject.aggregates[0].rdf_subject).to eq new_bib1
|
490
|
-
expect(subject.aggregates[1].rdf_subject).to eq bib2
|
491
|
-
expect(subject.aggregates[2].rdf_subject).to eq new_bib3
|
492
|
-
end
|
493
|
-
|
494
|
-
it "raises an error for out of bounds index" do
|
495
|
-
expect { subject.aggregates[4] = 'blah' }.to raise_error IndexError
|
496
|
-
end
|
497
|
-
end
|
498
|
-
end
|
499
|
-
|
500
461
|
describe 'child nodes' do
|
501
462
|
it 'should return an object of the correct class when the value is a URI' do
|
502
463
|
subject.license = DummyLicense.new('http://example.org/license')
|
@@ -516,22 +477,22 @@ describe ActiveTriples::Resource do
|
|
516
477
|
|
517
478
|
describe '#set_value' do
|
518
479
|
it 'should set a value in the graph' do
|
519
|
-
subject.set_value(RDF::DC.title, 'Comet in Moominland')
|
520
|
-
subject.query(:subject => subject.rdf_subject, :predicate => RDF::DC.title).each_statement do |s|
|
480
|
+
subject.set_value(RDF::Vocab::DC.title, 'Comet in Moominland')
|
481
|
+
subject.query(:subject => subject.rdf_subject, :predicate => RDF::Vocab::DC.title).each_statement do |s|
|
521
482
|
expect(s.object.to_s).to eq 'Comet in Moominland'
|
522
483
|
end
|
523
484
|
end
|
524
485
|
|
525
486
|
context "when given a URI" do
|
526
487
|
before do
|
527
|
-
subject.set_value(RDF::DC.title, RDF::URI("http://opaquenamespace.org/jokes/1"))
|
488
|
+
subject.set_value(RDF::Vocab::DC.title, RDF::URI("http://opaquenamespace.org/jokes/1"))
|
528
489
|
end
|
529
490
|
it "should return a resource" do
|
530
491
|
expect(subject.title.first).to be_kind_of(ActiveTriples::RDFSource)
|
531
492
|
end
|
532
493
|
context "and it's configured to not cast" do
|
533
494
|
before do
|
534
|
-
subject.class.property :title, predicate: RDF::DC.title, cast: false
|
495
|
+
subject.class.property :title, predicate: RDF::Vocab::DC.title, cast: false
|
535
496
|
end
|
536
497
|
it "should return a URI" do
|
537
498
|
expect(subject.title.first).to be_kind_of(RDF::URI)
|
@@ -559,20 +520,21 @@ describe ActiveTriples::Resource do
|
|
559
520
|
expect(subject.title).to eq ['Comet in Moominland']
|
560
521
|
end
|
561
522
|
|
562
|
-
it "raise an error if the value is not a
|
563
|
-
expect{subject.set_value(RDF::DC.title, Object.new)}
|
523
|
+
it "raise an error if the value is not a Term" do
|
524
|
+
expect{ subject.set_value(RDF::Vocab::DC.title, Object.new) }
|
525
|
+
.to raise_error ActiveTriples::Relation::ValueError
|
564
526
|
end
|
565
527
|
|
566
528
|
it "should be able to accept a subject" do
|
567
|
-
expect{subject.set_value(RDF::URI("http://opaquenamespace.org/jokes"), RDF::DC.title, 'Comet in Moominland')}.not_to raise_error
|
568
|
-
expect(subject.query(:subject => RDF::URI("http://opaquenamespace.org/jokes"), :predicate => RDF::DC.title).statements.to_a.length).to eq 1
|
529
|
+
expect{subject.set_value(RDF::URI("http://opaquenamespace.org/jokes"), RDF::Vocab::DC.title, 'Comet in Moominland')}.not_to raise_error
|
530
|
+
expect(subject.query(:subject => RDF::URI("http://opaquenamespace.org/jokes"), :predicate => RDF::Vocab::DC.title).statements.to_a.length).to eq 1
|
569
531
|
end
|
570
532
|
end
|
571
533
|
|
572
534
|
describe '#[]=' do
|
573
535
|
it 'should set a value in the graph' do
|
574
|
-
subject[RDF::DC.title] = 'Comet in Moominland'
|
575
|
-
subject.query(:subject => subject.rdf_subject, :predicate => RDF::DC.title).each_statement do |s|
|
536
|
+
subject[RDF::Vocab::DC.title] = 'Comet in Moominland'
|
537
|
+
subject.query(:subject => subject.rdf_subject, :predicate => RDF::Vocab::DC.title).each_statement do |s|
|
576
538
|
expect(s.object.to_s).to eq 'Comet in Moominland'
|
577
539
|
end
|
578
540
|
end
|
@@ -583,7 +545,8 @@ describe ActiveTriples::Resource do
|
|
583
545
|
end
|
584
546
|
|
585
547
|
it "raise an error if the value is not a URI, Node, Literal, RdfResource, or string" do
|
586
|
-
expect { subject[RDF::DC.title] = Object.new }
|
548
|
+
expect { subject[RDF::Vocab::DC.title] = Object.new }
|
549
|
+
.to raise_error ActiveTriples::Relation::ValueError
|
587
550
|
end
|
588
551
|
end
|
589
552
|
|
@@ -593,7 +556,7 @@ describe ActiveTriples::Resource do
|
|
593
556
|
end
|
594
557
|
|
595
558
|
it 'should return values for a predicate uri' do
|
596
|
-
expect(subject.get_values(RDF::DC.title)).to eq ['Comet in Moominland', 'Finn Family Moomintroll']
|
559
|
+
expect(subject.get_values(RDF::Vocab::DC.title)).to eq ['Comet in Moominland', 'Finn Family Moomintroll']
|
597
560
|
end
|
598
561
|
|
599
562
|
it 'should return values for a registered predicate symbol' do
|
@@ -602,7 +565,7 @@ describe ActiveTriples::Resource do
|
|
602
565
|
|
603
566
|
it "should return values for other subjects if asked" do
|
604
567
|
expect(subject.get_values(RDF::URI("http://opaquenamespace.org/jokes"),:title)).to eq []
|
605
|
-
subject.set_value(RDF::URI("http://opaquenamespace.org/jokes"), RDF::DC.title, 'Comet in Moominland')
|
568
|
+
subject.set_value(RDF::URI("http://opaquenamespace.org/jokes"), RDF::Vocab::DC.title, 'Comet in Moominland')
|
606
569
|
expect(subject.get_values(RDF::URI("http://opaquenamespace.org/jokes"),:title)).to eq ["Comet in Moominland"]
|
607
570
|
end
|
608
571
|
|
@@ -610,21 +573,20 @@ describe ActiveTriples::Resource do
|
|
610
573
|
let(:literal1) { RDF::Literal.new("test", :language => :en) }
|
611
574
|
let(:literal2) { RDF::Literal.new("test", :language => :fr) }
|
612
575
|
before do
|
613
|
-
subject.set_value(RDF::DC.title, [literal1, literal2])
|
576
|
+
subject.set_value(RDF::Vocab::DC.title, [literal1, literal2])
|
614
577
|
end
|
615
578
|
context "and literals are not requested" do
|
616
579
|
it "should return a string" do
|
617
580
|
# Should this de-duplicate?
|
618
|
-
expect(subject.get_values(RDF::DC.title)).to eq ["test", "test"]
|
581
|
+
expect(subject.get_values(RDF::Vocab::DC.title)).to eq ["test", "test"]
|
619
582
|
end
|
620
583
|
end
|
621
584
|
context "and literals are requested" do
|
622
585
|
it "should return literals" do
|
623
|
-
expect(subject.get_values(RDF::DC.title, :literal => true)).to eq [literal1, literal2]
|
586
|
+
expect(subject.get_values(RDF::Vocab::DC.title, :literal => true)).to eq [literal1, literal2]
|
624
587
|
end
|
625
588
|
end
|
626
589
|
end
|
627
|
-
|
628
590
|
end
|
629
591
|
|
630
592
|
describe '#[]' do
|
@@ -633,7 +595,7 @@ describe ActiveTriples::Resource do
|
|
633
595
|
end
|
634
596
|
|
635
597
|
it 'should return values for a predicate uri' do
|
636
|
-
expect(subject[RDF::DC.title]).to eq ['Comet in Moominland', 'Finn Family Moomintroll']
|
598
|
+
expect(subject[RDF::Vocab::DC.title]).to eq ['Comet in Moominland', 'Finn Family Moomintroll']
|
637
599
|
end
|
638
600
|
|
639
601
|
it 'should return values for a registered predicate symbol' do
|
@@ -642,7 +604,7 @@ describe ActiveTriples::Resource do
|
|
642
604
|
|
643
605
|
it "should return values for other subjects if asked" do
|
644
606
|
expect(subject.get_values(RDF::URI("http://opaquenamespace.org/jokes"),:title)).to eq []
|
645
|
-
subject.set_value(RDF::URI("http://opaquenamespace.org/jokes"), RDF::DC.title, 'Comet in Moominland')
|
607
|
+
subject.set_value(RDF::URI("http://opaquenamespace.org/jokes"), RDF::Vocab::DC.title, 'Comet in Moominland')
|
646
608
|
expect(subject.get_values(RDF::URI("http://opaquenamespace.org/jokes"),:title)).to eq ["Comet in Moominland"]
|
647
609
|
end
|
648
610
|
end
|
@@ -664,34 +626,15 @@ describe ActiveTriples::Resource do
|
|
664
626
|
end
|
665
627
|
end
|
666
628
|
|
667
|
-
describe '#rdf_label' do
|
668
|
-
it 'should return an array of label values' do
|
669
|
-
expect(subject.rdf_label).to be_kind_of Array
|
670
|
-
end
|
671
|
-
|
672
|
-
it 'should return the default label values' do
|
673
|
-
subject.title = 'Comet in Moominland'
|
674
|
-
expect(subject.rdf_label).to eq ['Comet in Moominland']
|
675
|
-
end
|
676
|
-
|
677
|
-
it 'should prioritize configured label values' do
|
678
|
-
custom_label = RDF::URI('http://example.org/custom_label')
|
679
|
-
subject.class.configure :rdf_label => custom_label
|
680
|
-
subject << RDF::Statement(subject.rdf_subject, custom_label, RDF::Literal('New Label'))
|
681
|
-
subject.title = 'Comet in Moominland'
|
682
|
-
expect(subject.rdf_label).to eq ['New Label']
|
683
|
-
end
|
684
|
-
end
|
685
|
-
|
686
629
|
describe 'editing the graph' do
|
687
630
|
it 'should write properties when statements are added' do
|
688
|
-
subject << RDF::Statement.new(subject.rdf_subject, RDF::DC.title, 'Comet in Moominland')
|
631
|
+
subject << RDF::Statement.new(subject.rdf_subject, RDF::Vocab::DC.title, 'Comet in Moominland')
|
689
632
|
expect(subject.title).to include 'Comet in Moominland'
|
690
633
|
end
|
691
634
|
|
692
635
|
it 'should delete properties when statements are removed' do
|
693
|
-
subject << RDF::Statement.new(subject.rdf_subject, RDF::DC.title, 'Comet in Moominland')
|
694
|
-
subject.delete RDF::Statement.new(subject.rdf_subject, RDF::DC.title, 'Comet in Moominland')
|
636
|
+
subject << RDF::Statement.new(subject.rdf_subject, RDF::Vocab::DC.title, 'Comet in Moominland')
|
637
|
+
subject.delete RDF::Statement.new(subject.rdf_subject, RDF::Vocab::DC.title, 'Comet in Moominland')
|
695
638
|
expect(subject.title).to eq []
|
696
639
|
end
|
697
640
|
end
|
@@ -701,19 +644,19 @@ describe ActiveTriples::Resource do
|
|
701
644
|
class DummyPerson
|
702
645
|
include ActiveTriples::RDFSource
|
703
646
|
configure :type => RDF::URI('http://example.org/Person')
|
704
|
-
property :foaf_name, :predicate => RDF::FOAF.name
|
705
|
-
property :publications, :predicate => RDF::FOAF.publications, :class_name => 'DummyDocument'
|
706
|
-
property :knows, :predicate => RDF::FOAF.knows, :class_name => DummyPerson
|
647
|
+
property :foaf_name, :predicate => RDF::Vocab::FOAF.name
|
648
|
+
property :publications, :predicate => RDF::Vocab::FOAF.publications, :class_name => 'DummyDocument'
|
649
|
+
property :knows, :predicate => RDF::Vocab::FOAF.knows, :class_name => DummyPerson
|
707
650
|
end
|
708
651
|
|
709
652
|
class DummyDocument
|
710
653
|
include ActiveTriples::RDFSource
|
711
654
|
configure :type => RDF::URI('http://example.org/Document')
|
712
|
-
property :title, :predicate => RDF::DC.title
|
713
|
-
property :creator, :predicate => RDF::DC.creator, :class_name => 'DummyPerson'
|
655
|
+
property :title, :predicate => RDF::Vocab::DC.title
|
656
|
+
property :creator, :predicate => RDF::Vocab::DC.creator, :class_name => 'DummyPerson'
|
714
657
|
end
|
715
658
|
|
716
|
-
DummyResource.property :item, :predicate => RDF::DC.relation, :class_name => DummyDocument
|
659
|
+
DummyResource.property :item, :predicate => RDF::Vocab::DC.relation, :class_name => DummyDocument
|
717
660
|
end
|
718
661
|
|
719
662
|
subject { DummyResource.new }
|