rdf-spec 1.99.0 → 2.0.0.beta1
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/{README → README.md} +2 -0
- data/VERSION +1 -1
- data/lib/rdf/spec.rb +18 -0
- data/lib/rdf/spec/countable.rb +5 -28
- data/lib/rdf/spec/dataset.rb +47 -0
- data/lib/rdf/spec/durable.rb +8 -23
- data/lib/rdf/spec/enumerable.rb +118 -102
- data/lib/rdf/spec/format.rb +4 -26
- data/lib/rdf/spec/http_adapter.rb +1 -23
- data/lib/rdf/spec/indexable.rb +1 -23
- data/lib/rdf/spec/inferable.rb +0 -16
- data/lib/rdf/spec/inspects.rb +4 -5
- data/lib/rdf/spec/matchers.rb +95 -4
- data/lib/rdf/spec/mutable.rb +227 -81
- data/lib/rdf/spec/queryable.rb +122 -165
- data/lib/rdf/spec/readable.rb +0 -22
- data/lib/rdf/spec/reader.rb +21 -29
- data/lib/rdf/spec/repository.rb +80 -40
- data/lib/rdf/spec/transactable.rb +43 -0
- data/lib/rdf/spec/transaction.rb +294 -71
- data/lib/rdf/spec/version.rb +2 -2
- data/lib/rdf/spec/writable.rb +78 -100
- data/lib/rdf/spec/writer.rb +51 -28
- data/spec/countable_spec.rb +11 -0
- data/spec/dataset_spec.rb +14 -0
- data/spec/durable_spec.rb +12 -0
- data/spec/enumerable_spec.rb +11 -0
- data/spec/format_spec.rb +12 -0
- data/spec/http_adapter_spec.rb +15 -0
- data/spec/indexable.rb +15 -0
- data/spec/literal_spec.rb +75 -0
- data/spec/mutable_spec.rb +11 -0
- data/spec/queryable_spec.rb +13 -0
- data/spec/readable.rb +11 -0
- data/spec/reader_spec.rb +17 -0
- data/spec/repository_spec.rb +11 -0
- data/spec/spec_helper.rb +13 -0
- data/spec/transaction_spec.rb +7 -0
- data/spec/version_spec.rb +2 -0
- data/spec/writable_spec.rb +13 -0
- data/spec/writer_spec.rb +11 -0
- metadata +56 -12
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: d6c4e07996e14e39f5680298b067deb592c89412
|
4
|
+
data.tar.gz: 3b418d1e0af6691520024e00c6742993d8f55cff
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 95437e8b1f673a0ba04145c6e2dfcc749d454d66d92e93de3486ca7e508f2908fe8a25080200b339cc77adfdba09443acb962f03fa6b8dadbe8ce6b385bdddcc
|
7
|
+
data.tar.gz: dd579471099ff0b7f84ede5a437167c94c444395e0e58a06b7ce7a6624b667d13707fc2afb3d26f9ce92f9a06d3831902128f5e97b2bdcc81770bd8638739dc6
|
data/{README → README.md}
RENAMED
@@ -6,6 +6,8 @@ and shared examples for Ruby projects that use RDF.rb and RSpec.
|
|
6
6
|
* <http://github.com/ruby-rdf/rdf-spec>
|
7
7
|
|
8
8
|
[](http://badge.fury.io/rb/rdf-spec)
|
9
|
+
[](http://travis-ci.org/ruby-rdf/rdf-spec)
|
10
|
+
[](https://coveralls.io/r/ruby-rdf/rdf-spec)
|
9
11
|
|
10
12
|
## Documentation
|
11
13
|
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
|
1
|
+
2.0.0.beta1
|
data/lib/rdf/spec.rb
CHANGED
@@ -1,4 +1,5 @@
|
|
1
1
|
require 'rdf' # @see http://rubygems.org/gems/rdf
|
2
|
+
require 'rdf/isomorphic' # @see http://rubygems.org/gems/rdf-isomorphic
|
2
3
|
require 'rspec' # @see http://rubygems.org/gems/rspec
|
3
4
|
require 'rdf/spec/inspects'
|
4
5
|
require 'rspec/its'
|
@@ -68,5 +69,22 @@ module RDF
|
|
68
69
|
require 'rdf/ntriples'
|
69
70
|
(@triples ||= RDF::NTriples::Reader.new(File.open(TRIPLES_FILE)).to_a).dup
|
70
71
|
end
|
72
|
+
|
73
|
+
# Logger used for Specs; allows clearing and converting to string
|
74
|
+
require 'logger'
|
75
|
+
def self.logger
|
76
|
+
logger = Logger.new(StringIO.new)
|
77
|
+
def logger.clear
|
78
|
+
@logdev.instance_variable_set(:@dev, StringIO.new)
|
79
|
+
end
|
80
|
+
def logger.to_s
|
81
|
+
dev = @logdev.instance_variable_get(:@dev)
|
82
|
+
dev.rewind
|
83
|
+
dev.read
|
84
|
+
end
|
85
|
+
logger.level = Logger::DEBUG
|
86
|
+
logger.formatter = lambda {|severity, datetime, progname, msg| "#{severity} #{msg}\n"}
|
87
|
+
logger
|
88
|
+
end
|
71
89
|
end # Spec
|
72
90
|
end # RDF
|
data/lib/rdf/spec/countable.rb
CHANGED
@@ -3,17 +3,16 @@ require 'rdf/spec'
|
|
3
3
|
RSpec.shared_examples 'an RDF::Countable' do
|
4
4
|
include RDF::Spec::Matchers
|
5
5
|
|
6
|
+
let(:statements) {RDF::Spec.quads}
|
6
7
|
before do
|
7
8
|
raise 'countable must be set with `let(:countable)' unless
|
8
9
|
defined? countable
|
9
10
|
|
10
|
-
@statements = RDF::Spec.quads
|
11
|
-
|
12
11
|
if countable.empty?
|
13
12
|
if (countable.writable? rescue false)
|
14
|
-
countable.send(:insert_statements,
|
13
|
+
countable.send(:insert_statements, statements)
|
15
14
|
elsif countable.respond_to?(:<<)
|
16
|
-
|
15
|
+
statements.each { |statement| countable << statement }
|
17
16
|
else
|
18
17
|
raise "+countable+ must respond to #<< or be pre-populated with the" \
|
19
18
|
"statements in #{RDF::Spec::TRIPLES_FILE} in a before block"
|
@@ -27,9 +26,9 @@ RSpec.shared_examples 'an RDF::Countable' do
|
|
27
26
|
it {is_expected.to respond_to(:empty?)}
|
28
27
|
it {is_expected.to_not be_empty}
|
29
28
|
it {is_expected.to respond_to(:count)}
|
30
|
-
its(:count) {is_expected.to eq
|
29
|
+
its(:count) {is_expected.to eq statements.size}
|
31
30
|
it {is_expected.to respond_to(:size)}
|
32
|
-
its(:size) {is_expected.to eq
|
31
|
+
its(:size) {is_expected.to eq statements.size}
|
33
32
|
|
34
33
|
context "when empty" do
|
35
34
|
subject {[].extend(RDF::Countable)}
|
@@ -45,25 +44,3 @@ RSpec.shared_examples 'an RDF::Countable' do
|
|
45
44
|
end
|
46
45
|
end
|
47
46
|
end
|
48
|
-
|
49
|
-
##
|
50
|
-
# @deprecated use `it_behaves_like "an RDF::Countable"` instead
|
51
|
-
module RDF_Countable
|
52
|
-
extend RSpec::SharedContext
|
53
|
-
include RDF::Spec::Matchers
|
54
|
-
|
55
|
-
def self.included(mod)
|
56
|
-
warn "[DEPRECATION] `RDF_Countable` is deprecated. "\
|
57
|
-
"Please use `it_behaves_like 'an RDF::Countable'`"
|
58
|
-
end
|
59
|
-
|
60
|
-
describe 'examples for' do
|
61
|
-
include_examples 'an RDF::Countable' do
|
62
|
-
let(:countable) { @countable }
|
63
|
-
|
64
|
-
before do
|
65
|
-
raise '@countable must be defined' unless defined?(countable)
|
66
|
-
end
|
67
|
-
end
|
68
|
-
end
|
69
|
-
end
|
@@ -0,0 +1,47 @@
|
|
1
|
+
require 'rdf/spec'
|
2
|
+
|
3
|
+
RSpec.shared_examples 'an RDF::Dataset' do
|
4
|
+
include RDF::Spec::Matchers
|
5
|
+
|
6
|
+
before :each do
|
7
|
+
raise 'dataset must be set with `let(:dataset)' unless
|
8
|
+
defined? dataset
|
9
|
+
|
10
|
+
if dataset.empty?
|
11
|
+
raise "+dataset+ must respond be pre-populated with the statements in #{RDF::Spec::TRIPLES_FILE} in a before block"
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
let(:countable) { dataset }
|
16
|
+
let(:enumerable) { dataset }
|
17
|
+
let(:queryable) { dataset }
|
18
|
+
|
19
|
+
context "when counting statements" do
|
20
|
+
require 'rdf/spec/countable'
|
21
|
+
it_behaves_like 'an RDF::Countable'
|
22
|
+
end
|
23
|
+
|
24
|
+
context "when enumerating statements" do
|
25
|
+
require 'rdf/spec/enumerable'
|
26
|
+
it_behaves_like 'an RDF::Enumerable'
|
27
|
+
end
|
28
|
+
|
29
|
+
context "as durable" do
|
30
|
+
require 'rdf/spec/durable'
|
31
|
+
before { @load_durable ||= lambda { dataset } }
|
32
|
+
|
33
|
+
it_behaves_like 'an RDF::Durable'
|
34
|
+
end
|
35
|
+
|
36
|
+
context "when querying statements" do
|
37
|
+
require 'rdf/spec/queryable'
|
38
|
+
it_behaves_like 'an RDF::Queryable'
|
39
|
+
end
|
40
|
+
|
41
|
+
describe '#isolation_level' do
|
42
|
+
it 'is an allowable isolation level' do
|
43
|
+
expect(described_class::ISOLATION_LEVELS)
|
44
|
+
.to include(dataset.isolation_level)
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
data/lib/rdf/spec/durable.rb
CHANGED
@@ -6,8 +6,7 @@ require 'rdf/spec'
|
|
6
6
|
#describe RDF::DataObjects::Repository do
|
7
7
|
# context "The SQLite adapter" do
|
8
8
|
# before :each do
|
9
|
-
# @
|
10
|
-
# @load_durable = lambda { RDF::DataObjects::Repository.new "sqlite3:test.db" }
|
9
|
+
# @load_durable = lambda { RDF::DataObjects::Repository.new uri: "sqlite3:test.db" }
|
11
10
|
# end
|
12
11
|
#
|
13
12
|
# after :each do
|
@@ -29,38 +28,24 @@ RSpec.shared_examples 'an RDF::Durable' do
|
|
29
28
|
|
30
29
|
it { is_expected.to respond_to(:durable?) }
|
31
30
|
|
32
|
-
it "
|
31
|
+
it "supports #durable?" do
|
33
32
|
expect([true,false]).to be_member(subject.durable?)
|
34
33
|
end
|
35
34
|
|
36
35
|
it {is_expected.to respond_to(:nondurable?)}
|
37
36
|
|
38
|
-
it "
|
37
|
+
it "supports #nondurable?" do
|
39
38
|
expect([true,false]).to be_member(@load_durable.call.nondurable?)
|
40
39
|
end
|
41
40
|
|
42
41
|
its(:nondurable?) {is_expected.to_not eq subject.durable?}
|
43
42
|
|
44
|
-
it "
|
43
|
+
it "saves contents between instantiations" do
|
45
44
|
if subject.durable?
|
46
|
-
subject.
|
47
|
-
|
45
|
+
subject.insert RDF::Statement(RDF::RDFS.Resource, RDF.value, "string") if subject.empty?
|
46
|
+
subject.close if subject.respond_to?(:close)
|
47
|
+
new_instance = @load_durable.call
|
48
|
+
expect(new_instance).not_to be_empty
|
48
49
|
end
|
49
50
|
end
|
50
51
|
end
|
51
|
-
|
52
|
-
##
|
53
|
-
# @deprecated use `it_behaves_like "an RDF::Durable"` instead
|
54
|
-
module RDF_Durable
|
55
|
-
extend RSpec::SharedContext
|
56
|
-
include RDF::Spec::Matchers
|
57
|
-
|
58
|
-
def self.included(mod)
|
59
|
-
warn "[DEPRECATION] `RDF_Durable` is deprecated. "\
|
60
|
-
"Please use `it_behaves_like 'an RDF::Durable'`"
|
61
|
-
end
|
62
|
-
|
63
|
-
describe 'examples for' do
|
64
|
-
include_examples 'an RDF::Durable'
|
65
|
-
end
|
66
|
-
end
|
data/lib/rdf/spec/enumerable.rb
CHANGED
@@ -24,7 +24,8 @@ RSpec.shared_examples 'an RDF::Enumerable' do
|
|
24
24
|
|
25
25
|
let(:subject_count) {@statements.map(&:subject).uniq.length}
|
26
26
|
let(:bnode_subject_count) {@statements.map(&:subject).uniq.select(&:node?).length}
|
27
|
-
let(:non_bnode_statements) {@statements.reject
|
27
|
+
let(:non_bnode_statements) {@statements.reject(&:node?)}
|
28
|
+
let(:non_bnode_terms) {@statements.map(&:to_quad).flatten.compact.reject(&:node?).uniq}
|
28
29
|
|
29
30
|
subject { enumerable }
|
30
31
|
it {is_expected.to respond_to(:supports?)}
|
@@ -70,10 +71,10 @@ RSpec.shared_examples 'an RDF::Enumerable' do
|
|
70
71
|
|
71
72
|
context "when enumerating statements" do
|
72
73
|
it {is_expected.to respond_to(:statements)}
|
73
|
-
|
74
|
+
its(:statements) {is_expected.to be_a(Array)}
|
74
75
|
|
75
76
|
context "#statements" do
|
76
|
-
specify {expect(subject.statements.
|
77
|
+
specify {expect(subject.statements.size).to eq @statements.size}
|
77
78
|
specify {expect(subject.statements).to all(be_a_statement)}
|
78
79
|
end
|
79
80
|
|
@@ -129,9 +130,9 @@ RSpec.shared_examples 'an RDF::Enumerable' do
|
|
129
130
|
it {is_expected.to respond_to(:each_triple)}
|
130
131
|
it {is_expected.to respond_to(:enum_triple)}
|
131
132
|
|
132
|
-
|
133
|
+
its(:triples) {is_expected.to be_a(Array)}
|
133
134
|
context "#triples" do
|
134
|
-
specify {expect(subject.triples.
|
135
|
+
specify {expect(subject.triples.size).to eq @statements.size}
|
135
136
|
specify {expect(subject.triples).to all(be_a_triple)}
|
136
137
|
end
|
137
138
|
|
@@ -173,9 +174,9 @@ RSpec.shared_examples 'an RDF::Enumerable' do
|
|
173
174
|
it {is_expected.to respond_to(:each_quad)}
|
174
175
|
it {is_expected.to respond_to(:enum_quad)}
|
175
176
|
|
176
|
-
|
177
|
+
its(:quads) {is_expected.to be_a(Array)}
|
177
178
|
context "#quads" do
|
178
|
-
specify {expect(subject.quads.
|
179
|
+
specify {expect(subject.quads.size).to eq @statements.size}
|
179
180
|
specify {expect(subject.quads).to all(be_a_quad)}
|
180
181
|
end
|
181
182
|
|
@@ -220,14 +221,13 @@ RSpec.shared_examples 'an RDF::Enumerable' do
|
|
220
221
|
it {is_expected.to respond_to(:each_subject)}
|
221
222
|
it {is_expected.to respond_to(:enum_subject)}
|
222
223
|
|
223
|
-
#its(:subjects) {is_expected.to be_an_enumerator}
|
224
224
|
context "#subjects" do
|
225
225
|
subject { enumerable.subjects }
|
226
|
-
specify {is_expected.to
|
226
|
+
specify {is_expected.to be_a(Array)}
|
227
227
|
specify {is_expected.to all(be_a_resource)}
|
228
228
|
context "unique: false" do
|
229
229
|
subject { enumerable.subjects(unique: false) }
|
230
|
-
specify {is_expected.to
|
230
|
+
specify {is_expected.to be_a(Array)}
|
231
231
|
specify {is_expected.to all(be_a_resource)}
|
232
232
|
end
|
233
233
|
end
|
@@ -271,14 +271,13 @@ RSpec.shared_examples 'an RDF::Enumerable' do
|
|
271
271
|
it {is_expected.to respond_to(:each_predicate)}
|
272
272
|
it {is_expected.to respond_to(:enum_predicate)}
|
273
273
|
|
274
|
-
#its(:predicates) {is_expected.to be_an_enumerator}
|
275
274
|
context "#predicates" do
|
276
275
|
subject { enumerable.predicates }
|
277
|
-
specify {is_expected.to
|
276
|
+
specify {is_expected.to be_a(Array)}
|
278
277
|
specify {is_expected.to all(be_a_uri)}
|
279
278
|
context "unique: false" do
|
280
279
|
subject { enumerable.predicates(unique: false) }
|
281
|
-
specify {is_expected.to
|
280
|
+
specify {is_expected.to be_a(Array)}
|
282
281
|
specify {is_expected.to all(be_a_uri)}
|
283
282
|
end
|
284
283
|
end
|
@@ -318,14 +317,13 @@ RSpec.shared_examples 'an RDF::Enumerable' do
|
|
318
317
|
it {is_expected.to respond_to(:each_object)}
|
319
318
|
it {is_expected.to respond_to(:enum_object)}
|
320
319
|
|
321
|
-
#its(:objects) {is_expected.to be_an_enumerator}
|
322
320
|
context "#objects" do
|
323
321
|
subject { enumerable.objects }
|
324
|
-
specify {is_expected.to
|
322
|
+
specify {is_expected.to be_a(Array)}
|
325
323
|
specify {is_expected.to all(be_a_term)}
|
326
324
|
context "unique: false" do
|
327
325
|
subject { enumerable.objects(unique: false) }
|
328
|
-
specify {is_expected.to
|
326
|
+
specify {is_expected.to be_a(Array)}
|
329
327
|
specify {is_expected.to all(be_a_term)}
|
330
328
|
end
|
331
329
|
end
|
@@ -361,89 +359,64 @@ RSpec.shared_examples 'an RDF::Enumerable' do
|
|
361
359
|
end
|
362
360
|
end
|
363
361
|
|
364
|
-
context "when enumerating
|
365
|
-
|
366
|
-
it {is_expected.to respond_to(:
|
367
|
-
it {is_expected.to respond_to(:
|
368
|
-
it {is_expected.to respond_to(:
|
362
|
+
context "when enumerating terms" do
|
363
|
+
let(:terms) {subject.map(&:to_quad).flatten.compact.reject(&:node?).uniq}
|
364
|
+
it {is_expected.to respond_to(:terms)}
|
365
|
+
it {is_expected.to respond_to(:has_term?)}
|
366
|
+
it {is_expected.to respond_to(:each_term)}
|
367
|
+
it {is_expected.to respond_to(:enum_term)}
|
369
368
|
|
370
|
-
|
371
|
-
|
372
|
-
|
373
|
-
specify {is_expected.to
|
374
|
-
specify {is_expected.to all(be_a_resource)}
|
369
|
+
context "#terms" do
|
370
|
+
subject { enumerable.terms }
|
371
|
+
specify {is_expected.to be_a(Array)}
|
372
|
+
specify {is_expected.to all(be_a_term)}
|
375
373
|
context "unique: false" do
|
376
|
-
subject { enumerable.
|
377
|
-
specify {is_expected.to
|
378
|
-
specify {is_expected.to all(
|
374
|
+
subject { enumerable.terms(unique: false) }
|
375
|
+
specify {is_expected.to be_a(Array)}
|
376
|
+
specify {is_expected.to all(be_a_term)}
|
379
377
|
end
|
380
378
|
end
|
381
379
|
|
382
|
-
|
383
|
-
|
384
|
-
|
385
|
-
|
386
|
-
|
387
|
-
|
380
|
+
context "#has_term?" do
|
381
|
+
specify do
|
382
|
+
checked = {}
|
383
|
+
non_bnode_terms.each do |term|
|
384
|
+
expect(enumerable).to have_term(term) unless checked.has_key?(term.hash)
|
385
|
+
checked[term.hash] = true
|
388
386
|
end
|
389
387
|
uri = RDF::URI.new('http://example.org/does/not/have/this/uri')
|
390
|
-
expect(enumerable).not_to
|
388
|
+
expect(enumerable).not_to have_term(uri)
|
391
389
|
end
|
392
390
|
end
|
393
391
|
|
394
|
-
its(:
|
395
|
-
context "#
|
396
|
-
|
397
|
-
|
398
|
-
|
399
|
-
|
400
|
-
|
401
|
-
end
|
402
|
-
specify {expect(subject.each_context).to all(be_a_resource)}
|
403
|
-
it "is_expected.to have all contexts" do
|
404
|
-
subject.each_context {|value| expect(contexts).to include(value)}
|
405
|
-
end
|
392
|
+
its(:each_term) {is_expected.to be_an_enumerator}
|
393
|
+
context "#each_term" do
|
394
|
+
specify {
|
395
|
+
expect(subject.each_term.reject(&:node?).size).to eq non_bnode_terms.length
|
396
|
+
}
|
397
|
+
specify {expect(subject.each_term).to all(be_a_term)}
|
398
|
+
specify {subject.each_term {|value| expect(non_bnode_terms).to include(value) unless value.node?}}
|
406
399
|
end
|
407
400
|
|
408
|
-
its(:
|
409
|
-
its(:
|
410
|
-
context "#
|
411
|
-
it "should enumerate all
|
412
|
-
|
401
|
+
its(:enum_term) {is_expected.to be_an_enumerator}
|
402
|
+
its(:enum_term) {is_expected.to be_countable}
|
403
|
+
context "#enum_term" do
|
404
|
+
it "should enumerate all terms" do
|
405
|
+
subject.enum_term.each do |o|
|
406
|
+
expect(o).to be_a_term
|
407
|
+
expect(non_bnode_terms.to_a).to include(o) unless o.node?
|
408
|
+
end
|
413
409
|
end
|
414
410
|
end
|
415
411
|
end
|
416
412
|
|
417
413
|
context "when enumerating graphs" do
|
418
|
-
it {is_expected.to respond_to(:each_graph)}
|
419
|
-
it {is_expected.to respond_to(:enum_graph)}
|
420
|
-
|
421
|
-
describe "#each_graph" do
|
422
|
-
subject { enumerable.each_graph }
|
423
|
-
it {is_expected.to be_an_enumerator}
|
424
|
-
specify {is_expected.to all(be_a_graph)} if @supports_named_graphs
|
425
|
-
specify {expect(subject.each_graph).to all(be_a_graph)}
|
426
|
-
|
427
|
-
it "has appropriate number of graphs" do
|
428
|
-
graph_names = @statements.map { |s| s.graph_name }.uniq.compact
|
429
|
-
expect(subject.each_graph.to_a.size).to eq (graph_names.size + 1)
|
430
|
-
end if @supports_named_graphs
|
431
|
-
end
|
432
|
-
|
433
|
-
describe "#enum_graph" do
|
434
|
-
subject { enumerable.enum_graph }
|
435
|
-
it {is_expected.to be_an_enumerator}
|
436
|
-
it {is_expected.to be_countable}
|
437
|
-
it "enumerates the same as #each_graph" do
|
438
|
-
expect(subject.to_a).to include(*enumerable.each_graph.to_a) if @supports_named_graphs # expect with match problematic
|
439
|
-
end
|
440
|
-
end
|
441
|
-
end
|
442
|
-
|
443
|
-
context "when enumerating graphs", if: RDF::VERSION.to_s >= "1.99" do
|
444
414
|
it {is_expected.to respond_to(:graph_names)}
|
445
415
|
it {is_expected.to respond_to(:has_graph?)}
|
416
|
+
it {is_expected.to respond_to(:each_graph)}
|
417
|
+
it {is_expected.to respond_to(:enum_graph)}
|
446
418
|
|
419
|
+
its(:graph_names) {is_expected.to be_a(Array)}
|
447
420
|
describe "#graph_names" do
|
448
421
|
subject { enumerable.graph_names }
|
449
422
|
specify {is_expected.to be_a(Array)}
|
@@ -455,7 +428,7 @@ RSpec.shared_examples 'an RDF::Enumerable' do
|
|
455
428
|
end
|
456
429
|
end
|
457
430
|
|
458
|
-
|
431
|
+
it "should implement #has_graph?" do
|
459
432
|
if @supports_named_graphs
|
460
433
|
@statements.each do |statement|
|
461
434
|
if statement.has_graph?
|
@@ -466,8 +439,73 @@ RSpec.shared_examples 'an RDF::Enumerable' do
|
|
466
439
|
expect(enumerable).not_to have_graph(uri)
|
467
440
|
end
|
468
441
|
end
|
442
|
+
|
443
|
+
describe "#project_graph" do
|
444
|
+
it {is_expected.to respond_to(:project_graph)}
|
445
|
+
|
446
|
+
context "default graph" do
|
447
|
+
let(:graph_name) {nil}
|
448
|
+
specify {expect(subject.project_graph(graph_name)).to all(be_a_statement)}
|
449
|
+
|
450
|
+
it "should return default triples" do
|
451
|
+
expect(subject.project_graph(graph_name).count).to eql(subject.reject(&:graph_name).count)
|
452
|
+
end
|
453
|
+
|
454
|
+
it "should iterate over default triples" do
|
455
|
+
subject.project_graph(graph_name) do |statement|
|
456
|
+
expect(statement.graph_name).to be_nil
|
457
|
+
end
|
458
|
+
end
|
459
|
+
end
|
460
|
+
|
461
|
+
context "named graph" do
|
462
|
+
let(:graph_name) {enumerable.graph_names.first}
|
463
|
+
specify {expect(subject.project_graph(graph_name)).to all(be_a_statement)}
|
464
|
+
|
465
|
+
it "should return named triples" do
|
466
|
+
expect(subject.project_graph(graph_name).count).to eql(subject.select {|s| s.graph_name == graph_name}.count)
|
467
|
+
end
|
468
|
+
|
469
|
+
it "should iterate over named triples" do
|
470
|
+
subject.project_graph(graph_name) do |statement|
|
471
|
+
expect(statement.graph_name).to eql graph_name
|
472
|
+
end
|
473
|
+
end
|
474
|
+
end
|
475
|
+
|
476
|
+
context "non-existing graph" do
|
477
|
+
let(:graph_name) {RDF::URI.new('http://example.org/does/not/have/this/uri')}
|
478
|
+
specify {expect(subject.project_graph(graph_name)).to be_empty if @supports_named_graphs}
|
479
|
+
end
|
480
|
+
end
|
481
|
+
|
482
|
+
its(:each_graph) {is_expected.to be_an_enumerator}
|
483
|
+
|
484
|
+
describe "#each_graph" do
|
485
|
+
let(:graph_names) {@statements.map { |s| s.graph_name }.uniq.compact}
|
486
|
+
subject { enumerable.each_graph }
|
487
|
+
it {is_expected.to be_an_enumerator}
|
488
|
+
specify {is_expected.to all(be_a_graph) if @supports_named_graphs}
|
489
|
+
|
490
|
+
it "has appropriate number of graphs" do
|
491
|
+
if @supports_named_graphs
|
492
|
+
graph_names = @statements.map { |s| s.graph_name }.uniq.compact
|
493
|
+
expect(subject.to_a.size).to eq (graph_names.size + 1)
|
494
|
+
end
|
495
|
+
end
|
496
|
+
end
|
497
|
+
|
498
|
+
describe "#enum_graph" do
|
499
|
+
subject { enumerable.enum_graph }
|
500
|
+
it {is_expected.to be_an_enumerator}
|
501
|
+
it {is_expected.to be_countable}
|
502
|
+
it "enumerates the same as #each_graph" do
|
503
|
+
expect(subject.to_a).to include(*enumerable.each_graph.to_a) if @supports_named_graphs # expect with match problematic
|
504
|
+
end
|
505
|
+
end
|
469
506
|
end
|
470
507
|
|
508
|
+
|
471
509
|
context "when converting" do
|
472
510
|
it {is_expected.to respond_to(:to_hash)}
|
473
511
|
its(:to_hash) {is_expected.to be_instance_of(Hash)}
|
@@ -490,25 +528,3 @@ RSpec.shared_examples 'an RDF::Enumerable' do
|
|
490
528
|
end
|
491
529
|
end
|
492
530
|
end
|
493
|
-
|
494
|
-
##
|
495
|
-
# @deprecated use `it_behaves_like "an RDF::Enumerable"` instead
|
496
|
-
module RDF_Enumerable
|
497
|
-
extend RSpec::SharedContext
|
498
|
-
include RDF::Spec::Matchers
|
499
|
-
|
500
|
-
def self.included(mod)
|
501
|
-
warn "[DEPRECATION] `RDF_Enumerable` is deprecated. "\
|
502
|
-
"Please use `it_behaves_like 'an RDF::Enumerable'`"
|
503
|
-
end
|
504
|
-
|
505
|
-
describe 'examples for' do
|
506
|
-
include_examples 'an RDF::Enumerable' do
|
507
|
-
let(:enumerable) { @enumerable }
|
508
|
-
|
509
|
-
before do
|
510
|
-
raise '@enumerable must be defined' unless defined?(enumerable)
|
511
|
-
end
|
512
|
-
end
|
513
|
-
end
|
514
|
-
end
|