rdf-spec 0.1.0 → 0.1.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.
- data/README +1 -1
- data/VERSION +1 -1
- data/lib/rdf/spec/durable.rb +50 -0
- data/lib/rdf/spec/matchers.rb +7 -0
- data/lib/rdf/spec/mutable.rb +132 -0
- data/lib/rdf/spec/queryable.rb +80 -0
- data/lib/rdf/spec/repository.rb +24 -45
- data/lib/rdf/spec/version.rb +3 -3
- data/spec/queryable_spec.rb +13 -0
- metadata +9 -5
data/README
CHANGED
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.1.
|
1
|
+
0.1.4
|
@@ -0,0 +1,50 @@
|
|
1
|
+
require 'rdf/spec'
|
2
|
+
require 'spec'
|
3
|
+
|
4
|
+
# To use RDF::Durable to check that a repository maintains information between
|
5
|
+
# instantiations, add a Proc that creates a repository before each item, and
|
6
|
+
# clean that up after every run. Example:
|
7
|
+
#describe RDF::DataObjects::Repository do
|
8
|
+
# context "The SQLite adapter" do
|
9
|
+
# before :each do
|
10
|
+
# @repository = RDF::DataObjects::Repository.new "sqlite3://:memory:"
|
11
|
+
# @load_durable = lambda { RDF::DataObjects::Repository.new "sqlite3:test.db" }
|
12
|
+
# end
|
13
|
+
#
|
14
|
+
# after :each do
|
15
|
+
# File.delete('test.db') if File.exists?('test.db')
|
16
|
+
# end
|
17
|
+
#
|
18
|
+
# it_should_behave_like RDF_Repository
|
19
|
+
# end
|
20
|
+
#end
|
21
|
+
share_as :RDF_Durable do
|
22
|
+
include RDF::Spec::Matchers
|
23
|
+
|
24
|
+
before :each do
|
25
|
+
raise '+@load_durable+ must be defined in a before(:each) block' unless instance_variable_get('@load_durable')
|
26
|
+
# RDF::Queryable cares about the contents of this file too much to let someone set it
|
27
|
+
@filename = File.expand_path(File.join(File.dirname(__FILE__), '..', '..', '..', 'etc', 'doap.nt'))
|
28
|
+
end
|
29
|
+
|
30
|
+
|
31
|
+
it "should support #durable?" do
|
32
|
+
@load_durable.call.should respond_to(:durable?)
|
33
|
+
[true,false].member?(@load_durable.call.durable?).should be_true
|
34
|
+
end
|
35
|
+
|
36
|
+
it "should support #nondurable?" do
|
37
|
+
@load_durable.call.should respond_to(:nondurable?)
|
38
|
+
[true,false].member?(@load_durable.call.nondurable?).should be_true
|
39
|
+
end
|
40
|
+
|
41
|
+
it "should not be both durable and nondurable" do
|
42
|
+
@load_durable.call.nondurable?.should_not == @load_durable.call.durable?
|
43
|
+
end
|
44
|
+
|
45
|
+
it "should save contents between instantiations" do
|
46
|
+
@load_durable.call.load(@filename)
|
47
|
+
@load_durable.call.count.should == File.readlines(@filename).size
|
48
|
+
end
|
49
|
+
end
|
50
|
+
|
data/lib/rdf/spec/matchers.rb
CHANGED
@@ -0,0 +1,132 @@
|
|
1
|
+
require 'rdf'
|
2
|
+
require 'rdf/spec'
|
3
|
+
require 'rdf/ntriples'
|
4
|
+
|
5
|
+
share_as :RDF_Mutable do
|
6
|
+
|
7
|
+
include RDF::Spec::Matchers
|
8
|
+
|
9
|
+
before :each do
|
10
|
+
raise '+@filename+ must be defined in a before(:each) block' unless instance_variable_get('@filename')
|
11
|
+
raise '+@repository+ must be defined in a before(:each) block' unless instance_variable_get('@repository')
|
12
|
+
raise '+@subject+ must be defined in a before(:each) block' unless instance_variable_get('@subject')
|
13
|
+
raise '+@context+ must be defined in a before(:each) block' unless instance_variable_get('@context')
|
14
|
+
end
|
15
|
+
|
16
|
+
it "should be empty initially" do
|
17
|
+
@repository.empty?.should be_true
|
18
|
+
@repository.count.should be_zero
|
19
|
+
end
|
20
|
+
|
21
|
+
it "should be readable" do
|
22
|
+
@repository.readable?.should be_true
|
23
|
+
end
|
24
|
+
|
25
|
+
it "should be writable" do
|
26
|
+
@repository.writable?.should be_true
|
27
|
+
end
|
28
|
+
|
29
|
+
it "should be mutable" do
|
30
|
+
@repository.immutable?.should be_false
|
31
|
+
@repository.mutable?.should be_true
|
32
|
+
end
|
33
|
+
|
34
|
+
it "should support #load" do
|
35
|
+
@repository.respond_to?(:load).should be_true
|
36
|
+
end
|
37
|
+
|
38
|
+
context "#load" do
|
39
|
+
it "should require an argument" do
|
40
|
+
lambda { @repository.load }.should raise_error(ArgumentError)
|
41
|
+
end
|
42
|
+
|
43
|
+
it "should accept a string filename argument" do
|
44
|
+
lambda { @repository.load(@filename) }.should_not raise_error(ArgumentError)
|
45
|
+
end
|
46
|
+
|
47
|
+
it "should accept an optional hash argument" do
|
48
|
+
lambda { @repository.load(@filename,{}) }.should_not raise_error(ArgumentError)
|
49
|
+
end
|
50
|
+
|
51
|
+
it "should load statements" do
|
52
|
+
@repository.load @filename
|
53
|
+
@repository.size.should == File.readlines(@filename).size
|
54
|
+
@repository.should have_subject @subject
|
55
|
+
end
|
56
|
+
|
57
|
+
it "should load statements with a context override" do
|
58
|
+
@repository.load @filename, :context => @context
|
59
|
+
@repository.should have_context @context
|
60
|
+
@repository.query(:context => @context).size.should == @repository.size
|
61
|
+
end
|
62
|
+
|
63
|
+
end
|
64
|
+
|
65
|
+
context "when inserting statements" do
|
66
|
+
|
67
|
+
before :each do
|
68
|
+
@statements = RDF::NTriples::Reader.new(File.open(@filename)).to_a
|
69
|
+
end
|
70
|
+
|
71
|
+
it "should support #insert" do
|
72
|
+
@repository.should respond_to(:insert)
|
73
|
+
end
|
74
|
+
|
75
|
+
it "should not raise errors" do
|
76
|
+
lambda { @repository.insert(@statements.first) }.should_not raise_error
|
77
|
+
end
|
78
|
+
|
79
|
+
it "should support inserting one statement at a time" do
|
80
|
+
@repository.insert(@statements.first)
|
81
|
+
@repository.should have_statement(@statements.first)
|
82
|
+
end
|
83
|
+
|
84
|
+
it "should support inserting multiple statements at a time" do
|
85
|
+
@repository.insert(*@statements)
|
86
|
+
end
|
87
|
+
|
88
|
+
it "should insert statements successfully" do
|
89
|
+
@repository.insert(*@statements)
|
90
|
+
@repository.count.should == @statements.size
|
91
|
+
end
|
92
|
+
|
93
|
+
it "should not insert a statement twice" do
|
94
|
+
@repository.insert(@statements.first)
|
95
|
+
@repository.insert(@statements.first)
|
96
|
+
@repository.count.should == 1
|
97
|
+
end
|
98
|
+
end
|
99
|
+
|
100
|
+
context "when deleting statements" do
|
101
|
+
|
102
|
+
before :each do
|
103
|
+
@statements = RDF::NTriples::Reader.new(File.open(@filename)).to_a
|
104
|
+
@repository.insert(*@statements)
|
105
|
+
end
|
106
|
+
|
107
|
+
it "should support #delete" do
|
108
|
+
@repository.should respond_to(:delete)
|
109
|
+
end
|
110
|
+
|
111
|
+
it "should not raise errors" do
|
112
|
+
lambda { @repository.delete(@statements.first) }.should_not raise_error
|
113
|
+
end
|
114
|
+
|
115
|
+
it "should support deleting one statement at a time" do
|
116
|
+
@repository.delete(@statements.first)
|
117
|
+
@repository.should_not have_statement(@statements.first)
|
118
|
+
end
|
119
|
+
|
120
|
+
it "should support deleting multiple statements at a time" do
|
121
|
+
@repository.delete(*@statements)
|
122
|
+
@statements.find { |s| @repository.has_statement?(s) }.should be_false
|
123
|
+
end
|
124
|
+
|
125
|
+
end
|
126
|
+
|
127
|
+
context "when clearing all statements" do
|
128
|
+
it "should support #clear" do
|
129
|
+
@repository.should respond_to(:clear)
|
130
|
+
end
|
131
|
+
end
|
132
|
+
end
|
@@ -0,0 +1,80 @@
|
|
1
|
+
require 'rdf/spec'
|
2
|
+
require 'spec'
|
3
|
+
|
4
|
+
share_as :RDF_Queryable do
|
5
|
+
include RDF::Spec::Matchers
|
6
|
+
|
7
|
+
before :each do
|
8
|
+
# RDF::Queryable cares about the contents of this file too much to let someone set it
|
9
|
+
@filename = File.expand_path(File.join(File.dirname(__FILE__), '..', '..', '..', 'etc', 'doap.nt'))
|
10
|
+
raise '+@queryable+ must be defined in a before(:each) block' unless instance_variable_get('@queryable')
|
11
|
+
raise '+@subject+ must be defined in a before(:each) block' unless instance_variable_get('@subject')
|
12
|
+
if @queryable.empty?
|
13
|
+
if @queryable.respond_to?(:insert)
|
14
|
+
@queryable.insert(*(RDF::NTriples::Reader.new(File.open(@filename)).to_a))
|
15
|
+
else
|
16
|
+
raise "@queryable must be mutable or pre-populated with the statements in #{@filename} in a before(:each)"
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
it "should support #query" do
|
22
|
+
@queryable.respond_to?(:query).should be_true
|
23
|
+
end
|
24
|
+
|
25
|
+
context "#query" do
|
26
|
+
it "should require an argument" do
|
27
|
+
lambda { @queryable.query }.should raise_error(ArgumentError)
|
28
|
+
end
|
29
|
+
|
30
|
+
it "should accept a triple argument" do
|
31
|
+
lambda { @queryable.query([nil, nil, nil]) }.should_not raise_error(ArgumentError)
|
32
|
+
end
|
33
|
+
|
34
|
+
it "should accept a hash argument" do
|
35
|
+
lambda { @queryable.query({}) }.should_not raise_error(ArgumentError)
|
36
|
+
end
|
37
|
+
|
38
|
+
it "should accept a statement argument" do
|
39
|
+
lambda { @queryable.query(RDF::Statement.new(nil, nil, nil)) }.should_not raise_error(ArgumentError)
|
40
|
+
end
|
41
|
+
|
42
|
+
it "should accept a pattern argument" do
|
43
|
+
lambda { @queryable.query(RDF::Query::Pattern.new(nil, nil, nil)) }.should_not raise_error(ArgumentError)
|
44
|
+
lambda { @queryable.query(RDF::Query::Pattern.new(:s, :p, :o)) }.should_not raise_error(ArgumentError)
|
45
|
+
end
|
46
|
+
|
47
|
+
it "should reject other arguments" do
|
48
|
+
lambda { @queryable.query(nil) }.should raise_error(ArgumentError)
|
49
|
+
end
|
50
|
+
|
51
|
+
it "should return RDF statements" do
|
52
|
+
@queryable.query([nil, nil, nil]).each do |statement|
|
53
|
+
statement.should be_a_statement
|
54
|
+
end
|
55
|
+
end
|
56
|
+
|
57
|
+
it "should return the correct number of results for array queries" do
|
58
|
+
@queryable.query([nil, nil, nil]).size.should == File.readlines(@filename).size
|
59
|
+
@queryable.query([@subject, nil, nil]).size.should == File.readlines(@filename).grep(/^<http:\/\/rubygems\.org\/gems\/rdf>/).size
|
60
|
+
@queryable.query([@subject, RDF::DOAP.name, nil]).size.should == 1
|
61
|
+
@queryable.query([@subject, RDF::DOAP.developer, nil]).size.should == @queryable.query([nil, nil, RDF::FOAF.Person]).size
|
62
|
+
@queryable.query([nil, nil, RDF::DOAP.Project]).size.should == 1
|
63
|
+
end
|
64
|
+
|
65
|
+
it "should return the correct number of results for hash queries" do
|
66
|
+
@queryable.query({}).size.should == File.readlines(@filename).size
|
67
|
+
@queryable.query(:subject => @subject) .size.should == File.readlines(@filename).grep(/^<http:\/\/rubygems\.org\/gems\/rdf>/).size
|
68
|
+
@queryable.query(:subject => @subject, :predicate => RDF::DOAP.name).size.should == 1
|
69
|
+
@queryable.query(:subject => @subject, :predicate => RDF::DOAP.developer).size.should == @queryable.query(:object => RDF::FOAF.Person).size
|
70
|
+
@queryable.query(:object => RDF::DOAP.Project).size.should == 1
|
71
|
+
end
|
72
|
+
|
73
|
+
it "should not alter a given hash argument" do
|
74
|
+
query = { :subject => @subject, :predicate => RDF::DOAP.name, :object => RDF::FOAF.Person }
|
75
|
+
original_query = query.dup
|
76
|
+
result = @queryable.query(query)
|
77
|
+
query.should == original_query
|
78
|
+
end
|
79
|
+
end
|
80
|
+
end
|
data/lib/rdf/spec/repository.rb
CHANGED
@@ -11,52 +11,16 @@ share_as :RDF_Repository do
|
|
11
11
|
@enumerable = @repository
|
12
12
|
end
|
13
13
|
|
14
|
-
|
15
|
-
|
16
|
-
@repository.count.should be_zero
|
17
|
-
end
|
18
|
-
|
19
|
-
it "should be readable" do
|
20
|
-
@repository.readable?.should be_true
|
21
|
-
end
|
22
|
-
|
23
|
-
it "should be mutable" do
|
24
|
-
@repository.immutable?.should be_false
|
25
|
-
@repository.mutable?.should be_true
|
26
|
-
end
|
27
|
-
|
28
|
-
context "when inserting statements" do
|
29
|
-
it "should support #insert" do
|
30
|
-
@repository.should respond_to(:insert)
|
31
|
-
end
|
32
|
-
|
33
|
-
it "should not raise errors" do
|
34
|
-
lambda { @repository.insert(@statements.first) }.should_not raise_error
|
35
|
-
end
|
36
|
-
|
37
|
-
it "should support inserting one statement at a time" do
|
38
|
-
@repository.insert(@statements.first)
|
39
|
-
end
|
40
|
-
|
41
|
-
it "should support inserting multiple statements at a time" do
|
42
|
-
@repository.insert(*@statements)
|
43
|
-
end
|
14
|
+
context "when updating" do
|
15
|
+
require 'rdf/spec/mutable'
|
44
16
|
|
45
|
-
|
46
|
-
@
|
47
|
-
@
|
17
|
+
before :each do
|
18
|
+
@subject = RDF::URI.new("http://rubygems.org/gems/rdf")
|
19
|
+
@context = RDF::URI.new("http://example.org/context")
|
48
20
|
end
|
49
|
-
end
|
50
21
|
|
51
|
-
|
52
|
-
it "should support #delete" do
|
53
|
-
@repository.should respond_to(:delete)
|
54
|
-
end
|
22
|
+
it_should_behave_like RDF_Mutable
|
55
23
|
|
56
|
-
it "should not raise errors"
|
57
|
-
it "should support deleting one statement at a time"
|
58
|
-
it "should support deleting multiple statements at a time"
|
59
|
-
it "should delete statements successfully"
|
60
24
|
end
|
61
25
|
|
62
26
|
context "when enumerating statements" do
|
@@ -70,9 +34,24 @@ share_as :RDF_Repository do
|
|
70
34
|
it_should_behave_like RDF_Enumerable
|
71
35
|
end
|
72
36
|
|
73
|
-
context "when
|
74
|
-
|
75
|
-
|
37
|
+
context "when querying statements, " do
|
38
|
+
require 'rdf/spec/queryable'
|
39
|
+
|
40
|
+
before :each do
|
41
|
+
@subject = RDF::URI.new("http://rubygems.org/gems/rdf")
|
42
|
+
@queryable = @repository
|
76
43
|
end
|
44
|
+
|
45
|
+
it_should_behave_like RDF_Queryable
|
46
|
+
end
|
47
|
+
|
48
|
+
context "as a durable repository, " do
|
49
|
+
require 'rdf/spec/durable'
|
50
|
+
|
51
|
+
before :each do
|
52
|
+
@load_durable ||= lambda { @repository }
|
53
|
+
end
|
54
|
+
|
55
|
+
it_should_behave_like RDF_Durable
|
77
56
|
end
|
78
57
|
end
|
data/lib/rdf/spec/version.rb
CHANGED
@@ -2,15 +2,15 @@ module RDF; module Spec
|
|
2
2
|
module VERSION
|
3
3
|
MAJOR = 0
|
4
4
|
MINOR = 1
|
5
|
-
TINY =
|
5
|
+
TINY = 4
|
6
6
|
EXTRA = nil
|
7
7
|
|
8
8
|
STRING = [MAJOR, MINOR, TINY].join('.')
|
9
|
-
STRING << "
|
9
|
+
STRING << ".#{EXTRA}" if EXTRA
|
10
10
|
|
11
11
|
##
|
12
12
|
# @return [String]
|
13
|
-
def self.to_s()
|
13
|
+
def self.to_s() STRING end
|
14
14
|
|
15
15
|
##
|
16
16
|
# @return [String]
|
@@ -0,0 +1,13 @@
|
|
1
|
+
require File.join(File.dirname(__FILE__), 'spec_helper')
|
2
|
+
require 'rdf/spec/queryable'
|
3
|
+
|
4
|
+
describe RDF::Queryable do
|
5
|
+
before :each do
|
6
|
+
@file = "etc/doap.nt"
|
7
|
+
@statements = RDF::NTriples::Reader.new(File.open(@file)).to_a
|
8
|
+
@queryable = @statements.extend(RDF::Queryable)
|
9
|
+
@subject = RDF::URI.new("http://rubygems.org/gems/rdf")
|
10
|
+
end
|
11
|
+
|
12
|
+
it_should_behave_like RDF_Queryable
|
13
|
+
end
|
metadata
CHANGED
@@ -5,8 +5,8 @@ version: !ruby/object:Gem::Version
|
|
5
5
|
segments:
|
6
6
|
- 0
|
7
7
|
- 1
|
8
|
-
-
|
9
|
-
version: 0.1.
|
8
|
+
- 4
|
9
|
+
version: 0.1.4
|
10
10
|
platform: ruby
|
11
11
|
authors:
|
12
12
|
- Arto Bendiken
|
@@ -15,7 +15,7 @@ autorequire:
|
|
15
15
|
bindir: bin
|
16
16
|
cert_chain: []
|
17
17
|
|
18
|
-
date: 2010-03
|
18
|
+
date: 2010-04-03 00:00:00 +02:00
|
19
19
|
default_executable:
|
20
20
|
dependencies:
|
21
21
|
- !ruby/object:Gem::Dependency
|
@@ -28,8 +28,8 @@ dependencies:
|
|
28
28
|
segments:
|
29
29
|
- 0
|
30
30
|
- 1
|
31
|
-
-
|
32
|
-
version: 0.1.
|
31
|
+
- 4
|
32
|
+
version: 0.1.4
|
33
33
|
type: :development
|
34
34
|
version_requirements: *id001
|
35
35
|
- !ruby/object:Gem::Dependency
|
@@ -88,12 +88,16 @@ files:
|
|
88
88
|
- UNLICENSE
|
89
89
|
- VERSION
|
90
90
|
- etc/doap.nt
|
91
|
+
- lib/rdf/spec/durable.rb
|
91
92
|
- lib/rdf/spec/enumerable.rb
|
92
93
|
- lib/rdf/spec/matchers.rb
|
94
|
+
- lib/rdf/spec/mutable.rb
|
95
|
+
- lib/rdf/spec/queryable.rb
|
93
96
|
- lib/rdf/spec/repository.rb
|
94
97
|
- lib/rdf/spec/version.rb
|
95
98
|
- lib/rdf/spec.rb
|
96
99
|
- spec/enumerable_spec.rb
|
100
|
+
- spec/queryable_spec.rb
|
97
101
|
- spec/repository_spec.rb
|
98
102
|
- spec/spec_helper.rb
|
99
103
|
has_rdoc: false
|