Skip to content

Commit eda1ea7

Browse files
committed
Finish 1.1.0
2 parents b8c435b + c6b5b26 commit eda1ea7

File tree

9 files changed

+214
-96
lines changed

9 files changed

+214
-96
lines changed

.gemspec

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ Gem::Specification.new do |gem|
66
gem.date = File.mtime('VERSION').strftime('%Y-%m-%d')
77

88
gem.name = 'rdf-spec'
9-
gem.homepage = 'http://github.com/ruby-rdf/rdf-spec/'
9+
gem.homepage = 'http://ruby-rdf.github.com/rdf-spec/'
1010
gem.license = 'Public Domain' if gem.respond_to?(:license=)
1111
gem.summary = 'RSpec extensions for RDF.rb.'
1212
gem.description = 'RDF.rb plugin that provides RSpec matchers and shared examples for RDF objects.'
@@ -25,9 +25,9 @@ Gem::Specification.new do |gem|
2525
gem.test_files = %w()
2626
gem.has_rdoc = false
2727

28-
gem.required_ruby_version = '>= 1.8.7'
28+
gem.required_ruby_version = '>= 1.9.2'
2929
gem.requirements = []
30-
gem.add_development_dependency 'rdf', '~> 1.0'
30+
gem.add_development_dependency 'rdf', '~> 1.1'
3131
gem.add_runtime_dependency 'rspec', '>= 2.14'
3232
gem.add_development_dependency 'yard' , '>= 0.8'
3333
gem.post_install_message = nil

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,3 +5,4 @@ pkg
55
tmp
66
/*.gem
77
/*.lock
8+
/doc/

Gemfile

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ source "http://rubygems.org"
22

33
gemspec :name => ""
44

5-
gem "rdf", :git => "git://github.com/ruby-rdf/rdf.git"
5+
gem "rdf", :git => "git://github.com/ruby-rdf/rdf.git", :branch => "develop"
66

77
group :development do
88
gem "wirble"

README.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,8 @@ and shared examples for Ruby projects that use RDF.rb and RSpec.
55

66
* <http://github.com/ruby-rdf/rdf-spec>
77

8+
[![Gem Version](https://badge.fury.io/rb/rdf-spec.png)](http://badge.fury.io/rb/rdf-spec)
9+
810
## Documentation
911

1012
* {RDF::Spec}

VERSION

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
1.0.9
1+
1.1.0

lib/rdf/spec/enumerable.rb

Lines changed: 56 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -29,14 +29,24 @@ module RDF_Enumerable
2929
it {should respond_to(:supports?)}
3030

3131
describe "valid?" do
32-
it {should be_valid}
32+
it "reports validity" do
33+
if subject.supports?(:validity)
34+
should be_valid
35+
else
36+
expect {subject.valid?}.to raise_error(NotImplementedError)
37+
end
38+
end
3339

3440
it "returns false if any statement is invalid" do
3541
if subject.respond_to?(:<<) && (subject.writable? rescue true)
3642
s = RDF::Statement.from([nil, nil, nil])
37-
expect(s).not_to be_valid
38-
subject << s
39-
expect(subject).not_to be_valid
43+
if subject.supports?(:validity)
44+
expect(s).not_to be_valid
45+
subject << s
46+
expect(subject).not_to be_valid
47+
else
48+
expect {subject.valid?}.to raise_error(NotImplementedError)
49+
end
4050
else
4151
pending("can't add statement to immutable enumerable")
4252
end
@@ -107,7 +117,11 @@ module RDF_Enumerable
107117
its(:enum_statement) {should be_queryable}
108118
context "#enum_statement" do
109119
it "should enumerate all statements" do
110-
expect(subject.enum_statement.to_a).to include(*@enumerable.each_statement.to_a)
120+
expect(subject.enum_statement.count).to eq @enumerable.each_statement.count
121+
subject.enum_statement.each do |s|
122+
expect(s).to be_a_statement
123+
expect(@enumerable.each_statement.to_a).to include(s) unless s.has_blank_nodes?
124+
end
111125
end
112126
end
113127
end
@@ -135,13 +149,23 @@ module RDF_Enumerable
135149
its(:each_triple) {should be_an_enumerator}
136150
context "#each_triple" do
137151
specify {subject.each_triple { |*triple| expect(triple).to be_a_triple }}
152+
it "should iterate over all triples" do
153+
subject.each_triple do |*triple|
154+
triple.each {|r| expect(r).to be_a_term}
155+
expect(@enumerable).to have_triple(triple) unless triple.any?(&:node?)
156+
end
157+
end
138158
end
139159

140160
its(:enum_triple) {should be_an_enumerator}
141161
its(:enum_triple) {should be_countable}
142162
context "#enum_triple" do
143163
it "should enumerate all triples" do
144-
expect(subject.enum_triple.to_a).to include(*@enumerable.each_triple.to_a)
164+
expect(subject.enum_triple.count).to eq @enumerable.each_triple.count
165+
subject.enum_triple.each do |s, p, o|
166+
[s, p, o].each {|r| expect(r).to be_a_term}
167+
expect(@enumerable).to have_triple([s, p, o]) unless [s, p, o].any?(&:node?)
168+
end
145169
end
146170
end
147171
end
@@ -171,13 +195,23 @@ module RDF_Enumerable
171195
its(:each_quad) {should be_an_enumerator}
172196
context "#each_quad" do
173197
specify {subject.each_quad {|*quad| expect(quad).to be_a_quad }}
198+
it "should iterate over all quads" do
199+
subject.each_quad do |*quad|
200+
quad.compact.each {|r| expect(r).to be_a_term}
201+
expect(@enumerable).to have_quad(quad) unless quad.compact.any?(&:node?)
202+
end
203+
end
174204
end
175205

176206
its(:enum_quad) {should be_an_enumerator}
177207
its(:enum_quad) {should be_countable}
178208
context "#enum_quad" do
179209
it "should enumerate all quads" do
180-
expect(subject.enum_quad.to_a).to include(*@enumerable.each_quad.to_a)
210+
expect(subject.enum_quad.count).to eq @enumerable.each_quad.count
211+
subject.enum_quad.each do |s, p, o, c|
212+
[s, p, o, c].compact.each {|r| expect(r).to be_a_term}
213+
expect(@enumerable).to have_quad([s, p, o, c]) unless [s, p, o].any?(&:node?)
214+
end
181215
end
182216
end
183217
end
@@ -215,16 +249,20 @@ module RDF_Enumerable
215249

216250
its(:each_subject) {should be_an_enumerator}
217251
context "#each_subject" do
218-
specify {expect(subject.each_subject.reject(&:node?).size).to eq subjects.size}
252+
specify {expect(subject.each_subject.reject(&:node?).size).to eq subjects.reject(&:node?).size}
219253
specify {subject.each_subject {|value| expect(value).to be_a_resource}}
220254
specify {subject.each_subject {|value| expect(subjects).to include(value) unless value.node?}}
221255
end
222256

223257
its(:enum_subject) {should be_an_enumerator}
224258
its(:enum_subject) {should be_countable}
225259
context "#enum_subject" do
260+
specify {expect(subject.enum_subject.to_a.reject(&:node?).size).to eq subjects.reject(&:node?).size}
226261
it "should enumerate all subjects" do
227-
expect(subject.enum_subject.reject(&:node?)).to include(*subjects)
262+
subject.enum_subject.each do |s|
263+
expect(s).to be_a_resource
264+
expect(subjects.to_a).to include(s) unless s.node?
265+
end
228266
end
229267
end
230268
end
@@ -318,7 +356,10 @@ module RDF_Enumerable
318356
its(:enum_object) {should be_countable}
319357
context "#enum_object" do
320358
it "should enumerate all objects" do
321-
expect(subject.enum_object.reject(&:node?)).to include(*objects)
359+
subject.enum_object.each do |o|
360+
expect(o).to be_a_term
361+
expect(objects.to_a).to include(o) unless o.node?
362+
end
322363
end
323364
end
324365
end
@@ -389,15 +430,17 @@ module RDF_Enumerable
389430
describe "#each_graph" do
390431
subject {@enumerable.each_graph}
391432
it {should be_an_enumerator}
392-
specify {subject.each { |value| expect(value).to be_a_graph }}
433+
it "are all graphs" do
434+
subject.each { |value| expect(value).to be_a_graph } if @supports_context
435+
end
393436
end
394437

395438
describe "#enum_graph" do
396439
subject {@enumerable.enum_graph}
397440
it {should be_an_enumerator}
398441
it {should be_countable}
399-
it "enumerates the same as #each_graph" do
400-
subject.to_a.should =~ @enumerable.each_graph.to_a # expect with match problematic
442+
it "enumerates the same as #each_graph", :pending => "graph inclusion issue" do
443+
expect(subject.to_a).to include(*@enumerable.each_graph.to_a) if @supports_context # expect with match problematic
401444
end
402445
end
403446
end

lib/rdf/spec/matchers.rb

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ module Matchers
2222

2323
RSpec::Matchers.define :be_an_enumerator do
2424
match do |enumerator|
25-
expect(enumerator).to be_a_kind_of(RDF::Enumerator)
25+
expect(enumerator).to be_a_kind_of(Enumerator)
2626
true
2727
end
2828
end
@@ -74,6 +74,13 @@ module Matchers
7474
end
7575
end
7676

77+
RSpec::Matchers.define :be_a_term do
78+
match do |value|
79+
expect(value).to be_a_kind_of(RDF::Term)
80+
true
81+
end
82+
end
83+
7784
RSpec::Matchers.define :be_a_resource do
7885
match do |value|
7986
expect(value).to be_a_kind_of(RDF::Resource)

lib/rdf/spec/queryable.rb

Lines changed: 52 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -18,11 +18,11 @@ module RDF_Queryable
1818
end
1919
end
2020
end
21-
let(:resource) {RDF::URI('http://rubygems.org/gems/rdf')}
22-
let(:literal) {RDF::Literal.new('J. Random Hacker')}
2321

2422
describe RDF::Queryable do
2523
subject {@queryable}
24+
let(:resource) {RDF::URI('http://rubygems.org/gems/rdf')}
25+
let(:literal) {RDF::Literal.new('J. Random Hacker')}
2626
let(:query) {RDF::Query.new {pattern [:s, :p, :o]}}
2727

2828
##
@@ -86,6 +86,7 @@ module RDF_Queryable
8686
subject.query([:s, :p, :o]) {}
8787
end
8888
end
89+
8990
context "with a Query argument" do
9091
it "yields statements" do
9192
subject.query(query) do |solution|
@@ -103,49 +104,65 @@ module RDF_Queryable
103104
end
104105

105106
context "without a block" do
106-
it "returns an enumerator" do
107-
expect(subject.query([nil, nil, nil])).to be_an_enumerator
108-
end
107+
context "with a triple argument" do
108+
it "returns an enumerator" do
109+
expect(subject.query([nil, nil, nil])).to be_an_enumerator
110+
end
109111

110-
it "returns an enumerable enumerator" do
111-
expect(subject.query([nil, nil, nil])).to be_enumerable
112-
end
112+
it "returns an enumerable enumerator" do
113+
expect(subject.query([nil, nil, nil])).to be_enumerable
114+
end
113115

114-
it "returns a queryable enumerator" do
115-
expect(subject.query([nil, nil, nil])).to be_queryable
116-
end
116+
it "returns a queryable enumerator" do
117+
expect(subject.query([nil, nil, nil])).to be_queryable
118+
end
117119

118-
it "returns statements given a triple" do
119-
subject.query([nil, nil, nil]).each do |statement|
120-
expect(statement).to be_a_statement
121-
expect(statement).not_to be_a RDF::Query::Solution
120+
it "returns statements given a triple" do
121+
subject.query([nil, nil, nil]).each do |statement|
122+
expect(statement).to be_a_statement
123+
expect(statement).not_to be_a RDF::Query::Solution
124+
end
122125
end
123126
end
124127

125-
it "returns solutions given a query" do
126-
subject.query(query).each do |solution|
127-
expect(solution).not_to be_a_statement
128-
expect(solution).to be_a RDF::Query::Solution
128+
context "with a Query argument" do
129+
it "returns solutions" do
130+
expect(subject.query(query)).to be_a(RDF::Query::Solutions)
129131
end
130-
end
131132

132-
it "returns the correct number of results for array queries" do
133-
expect(subject.query([nil, nil, nil]).size).to eq @statements.size
134-
expect(subject.query([resource, nil, nil]).size).to eq File.readlines(@doap).grep(/^<http:\/\/rubygems\.org\/gems\/rdf>/).size
135-
expect(subject.query([RDF::URI("http://ar.to/#self"), nil, nil]).size).to eq File.readlines(@doap).grep(/^<http:\/\/ar.to\/\#self>/).size
136-
expect(subject.query([resource, RDF::DOAP.name, nil]).size).to eq 1
137-
expect(subject.query([nil, nil, RDF::DOAP.Project]).size).to eq 1
138-
end
133+
it "does not return an enumerable enumerator" do
134+
expect(subject.query(query)).not_to be_enumerable
135+
end
139136

140-
it "returns the correct number of results for hash queries" do
141-
expect(subject.query({}).size).to eq @statements.size
142-
expect(subject.query(:subject => resource).size).to eq File.readlines(@doap).grep(/^<http:\/\/rubygems\.org\/gems\/rdf>/).size
143-
expect(subject.query(:subject => resource, :predicate => RDF::DOAP.name).size).to eq 1
144-
expect(subject.query(:object => RDF::DOAP.Project).size).to eq 1
145-
end
137+
it "does not return a queryable enumerator" do
138+
expect(subject.query(query)).not_to be_queryable
139+
end
146140

147-
it "returns the correct number of results for query queries" do
148-
expect(subject.query(query).size).to eq @statements.size
141+
it "returns solutions given a query" do
142+
subject.query(query).each do |solution|
143+
expect(solution).not_to be_a_statement
144+
expect(solution).to be_a RDF::Query::Solution
145+
end
146+
end
147+
148+
it "returns the correct number of results for array queries" do
149+
expect(subject.query([nil, nil, nil]).size).to eq @statements.size
150+
expect(subject.query([resource, nil, nil]).size).to eq File.readlines(@doap).grep(/^<http:\/\/rubygems\.org\/gems\/rdf>/).size
151+
expect(subject.query([RDF::URI("http://ar.to/#self"), nil, nil]).size).to eq File.readlines(@doap).grep(/^<http:\/\/ar.to\/\#self>/).size
152+
expect(subject.query([resource, RDF::DOAP.name, nil]).size).to eq 1
153+
expect(subject.query([nil, nil, RDF::DOAP.Project]).size).to eq 1
154+
end
155+
156+
it "returns the correct number of results for hash queries" do
157+
expect(subject.query({}).size).to eq @statements.size
158+
expect(subject.query(:subject => resource).size).to eq File.readlines(@doap).grep(/^<http:\/\/rubygems\.org\/gems\/rdf>/).size
159+
expect(subject.query(:subject => resource, :predicate => RDF::DOAP.name).size).to eq 1
160+
expect(subject.query(:object => RDF::DOAP.Project).size).to eq 1
161+
end
162+
163+
it "returns the correct number of results for query queries" do
164+
expect(subject.query(query).size).to eq @statements.size
165+
end
149166
end
150167
end
151168

0 commit comments

Comments
 (0)