tripod 0.3.6 → 0.4.0
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.md +22 -22
- data/lib/tripod/finders.rb +1 -1
- data/lib/tripod/persistence.rb +1 -1
- data/lib/tripod/repository.rb +1 -2
- data/lib/tripod/sparql_client.rb +15 -60
- data/lib/tripod/version.rb +1 -1
- data/spec/app/models/person.rb +9 -9
- data/spec/tripod/attributes_spec.rb +17 -17
- data/spec/tripod/criteria_execution_spec.rb +13 -13
- data/spec/tripod/criteria_spec.rb +3 -3
- data/spec/tripod/eager_loading_spec.rb +12 -12
- data/spec/tripod/fields_spec.rb +1 -1
- data/spec/tripod/finders_spec.rb +9 -9
- data/spec/tripod/persistence_spec.rb +19 -19
- data/spec/tripod/predicates_spec.rb +20 -20
- data/spec/tripod/repository_spec.rb +8 -8
- data/spec/tripod/resource_spec.rb +6 -6
- data/spec/tripod/serialization_spec.rb +2 -2
- data/spec/tripod/sparql_client_spec.rb +7 -7
- data/spec/tripod/state_spec.rb +4 -4
- metadata +21 -21
data/README.md
CHANGED
@@ -29,21 +29,21 @@ ActiveModel-style Ruby ORM for RDF Linked Data. Works with SPARQL 1.1 HTTP endpo
|
|
29
29
|
include Tripod::Resource
|
30
30
|
|
31
31
|
# these are the default rdf-type and graph for resources of this class
|
32
|
-
rdf_type 'http://person'
|
33
|
-
graph_uri 'http://people'
|
34
|
-
|
35
|
-
field :name, 'http://name'
|
36
|
-
field :knows, 'http://knows', :multivalued => true
|
37
|
-
field :aliases, 'http://alias', :multivalued => true
|
38
|
-
field :age, 'http://age', :datatype => RDF::XSD.integer
|
39
|
-
field :important_dates, 'http://importantdates', :datatype => RDF::XSD.date, :multivalued => true
|
32
|
+
rdf_type 'http://example.com/person'
|
33
|
+
graph_uri 'http://example.com/people'
|
34
|
+
|
35
|
+
field :name, 'http://example.com/name'
|
36
|
+
field :knows, 'http://example.com/knows', :multivalued => true
|
37
|
+
field :aliases, 'http://example.com/alias', :multivalued => true
|
38
|
+
field :age, 'http://example.com/age', :datatype => RDF::XSD.integer
|
39
|
+
field :important_dates, 'http://example.com/importantdates', :datatype => RDF::XSD.date, :multivalued => true
|
40
40
|
end
|
41
41
|
|
42
42
|
# Note: Active Model validations are supported
|
43
43
|
|
44
44
|
4. Use it
|
45
45
|
|
46
|
-
uri = 'http://ric'
|
46
|
+
uri = 'http://example.com/ric'
|
47
47
|
p = Person.new(uri)
|
48
48
|
p.name = 'Ric'
|
49
49
|
p.age = 31
|
@@ -53,7 +53,7 @@ ActiveModel-style Ruby ORM for RDF Linked Data. Works with SPARQL 1.1 HTTP endpo
|
|
53
53
|
|
54
54
|
people = Person.all.resources #=> returns all people as an array
|
55
55
|
|
56
|
-
ric = Person.find('http://ric') #=> returns a single Person object.
|
56
|
+
ric = Person.find('http://example.com/ric') #=> returns a single Person object.
|
57
57
|
|
58
58
|
## Note:
|
59
59
|
|
@@ -64,16 +64,16 @@ Tripod doesn't supply a database. You need to install one. I recommend [Fuseki](
|
|
64
64
|
|
65
65
|
## Eager Loading
|
66
66
|
|
67
|
-
asa = Person.find('http://asa')
|
68
|
-
ric = Person.find('http://ric')
|
67
|
+
asa = Person.find('http://example.com/asa')
|
68
|
+
ric = Person.find('http://example.com/ric')
|
69
69
|
ric.knows = asa.uri
|
70
70
|
|
71
71
|
ric.eager_load_predicate_triples! #does a big DESCRIBE statement behind the scenes
|
72
|
-
knows = ric.get_related_resource('http://knows', Resource)
|
72
|
+
knows = ric.get_related_resource('http://example.com/knows', Resource)
|
73
73
|
knows.label # this won't cause another database lookup
|
74
74
|
|
75
75
|
ric.eager_load_object_triples! #does a big DESCRIBE statement behind the scenes
|
76
|
-
asa = ric.get_related_resource('http://asa', Person) # returns a fully hydrated Person object for asa, without an extra lookup
|
76
|
+
asa = ric.get_related_resource('http://example.com/asa', Person) # returns a fully hydrated Person object for asa, without an extra lookup
|
77
77
|
|
78
78
|
## Defining a graph at instantiation-time
|
79
79
|
|
@@ -84,7 +84,7 @@ Tripod doesn't supply a database. You need to install one. I recommend [Fuseki](
|
|
84
84
|
# notice also that you don't need to supply an rdf type or graph here!
|
85
85
|
end
|
86
86
|
|
87
|
-
r = Resource.new('http://foo', 'http://mygraph')
|
87
|
+
r = Resource.new('http://example.com/foo', 'http://example.com/mygraph')
|
88
88
|
r.label = "example"
|
89
89
|
r.save
|
90
90
|
|
@@ -94,8 +94,8 @@ Tripod doesn't supply a database. You need to install one. I recommend [Fuseki](
|
|
94
94
|
|
95
95
|
## Reading and writing arbitrary predicates
|
96
96
|
|
97
|
-
r.write_predicate(RDF.type, 'http://myresource/type')
|
98
|
-
r.read_predicate(RDF.type) #=> [RDF::URI.new("http://myresource/type")]
|
97
|
+
r.write_predicate(RDF.type, 'http://example.com/myresource/type')
|
98
|
+
r.read_predicate(RDF.type) #=> [RDF::URI.new("http://example.com/myresource/type")]
|
99
99
|
|
100
100
|
## Finders and criteria
|
101
101
|
|
@@ -103,7 +103,7 @@ Tripod doesn't supply a database. You need to install one. I recommend [Fuseki](
|
|
103
103
|
# It doesn't actually do anything against the DB until you run resources, first, or count on it.
|
104
104
|
# (from Tripod::CriteriaExecution)
|
105
105
|
|
106
|
-
Person.all #=> returns a Tripod::Criteria object which selects all resources of rdf_type http://person, in the http://people graph
|
106
|
+
Person.all #=> returns a Tripod::Criteria object which selects all resources of rdf_type http://example.com/person, in the http://example.com/people graph
|
107
107
|
|
108
108
|
Resource.all #=> returns a criteria object to return resources in the database (as no rdf_type or graph_uri specified at class level)
|
109
109
|
|
@@ -114,17 +114,17 @@ Tripod doesn't supply a database. You need to install one. I recommend [Fuseki](
|
|
114
114
|
Person.count #=> returns the count of all people (by crafting a count query under the covers that only returns a count)
|
115
115
|
|
116
116
|
# note that you need to use ?uri as the variable for the subject.
|
117
|
-
Person.where("?uri <http://name> 'Joe'") #=> returns a Tripod::Criteria object
|
117
|
+
Person.where("?uri <http://example.com/name> 'Joe'") #=> returns a Tripod::Criteria object
|
118
118
|
|
119
|
-
Resource.graph("http://mygraph") #=> Retruns a criteria object with a graph restriction (note: if graph_uri set on the class, it will default to using this)
|
119
|
+
Resource.graph("http://example.com/mygraph") #=> Retruns a criteria object with a graph restriction (note: if graph_uri set on the class, it will default to using this)
|
120
120
|
|
121
121
|
Resource.find_by_sparql('SELECT ?uri ?graph WHERE { GRAPH ?graph { ?uri ?p ?o } }') #=> allows arbitrary sparql. Again, use ?uri for the variable of the subjects (and ?graph for the graph).
|
122
122
|
|
123
123
|
## Chainable criteria
|
124
124
|
|
125
|
-
Person.all.where("?uri <http://name> 'Ric'").where("?uri <http://knows> <http://asa>).first
|
125
|
+
Person.all.where("?uri <http://example.com/name> 'Ric'").where("?uri <http://example.com/knows> <http://example.com/asa>).first
|
126
126
|
|
127
|
-
Person.where("?uri <http://name> ?name").limit(1).offset(0).order("DESC(?name)")
|
127
|
+
Person.where("?uri <http://example.com/name> ?name").limit(1).offset(0).order("DESC(?name)")
|
128
128
|
|
129
129
|
|
130
130
|
[Full Documentation](http://rubydoc.info/gems/tripod/frames)
|
data/lib/tripod/finders.rb
CHANGED
@@ -95,7 +95,7 @@ module Tripod::Finders
|
|
95
95
|
uris_sparql_str = uris.map{ |u| "<#{u.to_s}>" }.join(" ")
|
96
96
|
|
97
97
|
# Do a big describe statement, and read the results into an in-memory repo
|
98
|
-
triples_string = Tripod::SparqlClient::Query.
|
98
|
+
triples_string = Tripod::SparqlClient::Query.query("DESCRIBE #{uris_sparql_str}", "application/n-triples")
|
99
99
|
|
100
100
|
RDF::Reader.for(:ntriples).new(triples_string) do |reader|
|
101
101
|
reader.each_statement do |statement|
|
data/lib/tripod/persistence.rb
CHANGED
data/lib/tripod/repository.rb
CHANGED
@@ -34,8 +34,7 @@ module Tripod::Repository
|
|
34
34
|
end
|
35
35
|
end
|
36
36
|
else
|
37
|
-
|
38
|
-
triples = Tripod::SparqlClient::Query::describe("DESCRIBE <#{uri}>")
|
37
|
+
triples = Tripod::SparqlClient::Query.query("DESCRIBE <#{uri}>", "application/n-triples")
|
39
38
|
@repository = RDF::Repository.new
|
40
39
|
RDF::Reader.for(:ntriples).new(triples) do |reader|
|
41
40
|
reader.each_statement do |statement|
|
data/lib/tripod/sparql_client.rb
CHANGED
@@ -10,20 +10,25 @@ module Tripod::SparqlClient
|
|
10
10
|
# @example Run a query
|
11
11
|
# Tripod::SparqlClient::Query.query('SELECT * WHERE {?s ?p ?o}')
|
12
12
|
#
|
13
|
+
# @param [ String ] sparql The sparql query.
|
14
|
+
# @param [ String ] accept_header The accept header to send with the request
|
15
|
+
# @param [ Hash ] any extra params to send with the request
|
13
16
|
# @return [ RestClient::Response ]
|
14
|
-
def self.query(sparql,
|
17
|
+
def self.query(sparql, accept_header, extra_params={})
|
15
18
|
|
16
19
|
begin
|
17
|
-
params = {
|
18
|
-
hdrs =
|
20
|
+
params = {:query => sparql}.merge(extra_params)
|
21
|
+
hdrs = {:accept => accept_header, :params => params}
|
19
22
|
|
20
|
-
make_the_call =
|
21
|
-
|
23
|
+
make_the_call = -> {
|
24
|
+
response = RestClient::Request.execute(
|
22
25
|
:method => :get,
|
23
26
|
:url => Tripod.query_endpoint,
|
24
27
|
:headers => hdrs,
|
25
28
|
:timeout => Tripod.timeout_seconds
|
26
|
-
)
|
29
|
+
)
|
30
|
+
response.body
|
31
|
+
}
|
27
32
|
|
28
33
|
if Tripod.cache_store # if a cache store is configured
|
29
34
|
# SHA-2 the key to keep the it within the small limit for many cache stores (e.g. Memcached is 250bytes)
|
@@ -40,69 +45,19 @@ module Tripod::SparqlClient
|
|
40
45
|
end
|
41
46
|
end
|
42
47
|
|
43
|
-
# Runs a SELECT +query+ against the endpoint. Returns a
|
44
|
-
# Specify +raw_format+ if you want the results raw, as returned from the SPARQL endpoint.
|
48
|
+
# Runs a SELECT +query+ against the endpoint. Returns a Hash of the results.
|
45
49
|
#
|
46
50
|
# @param [ String ] query The query to run
|
47
|
-
# @param [ String ] raw_format valid formats are: 'json', 'text', 'csv', 'xml'
|
48
51
|
#
|
49
52
|
# @example Run a SELECT query
|
50
53
|
# Tripod::SparqlClient::Query.select('SELECT * WHERE {?s ?p ?o}')
|
51
54
|
#
|
52
55
|
# @return [ Hash, String ]
|
53
|
-
def self.select(query
|
54
|
-
query_response = self.query(query,
|
55
|
-
|
56
|
-
query_response.body
|
57
|
-
else
|
58
|
-
JSON.parse(query_response.body)["results"]["bindings"]
|
59
|
-
end
|
60
|
-
end
|
61
|
-
|
62
|
-
# Executes a DESCRIBE +query+ against the SPARQL endpoint.
|
63
|
-
# Executes the +query+ and returns ntriples by default
|
64
|
-
#
|
65
|
-
# @example Run a DESCRIBE query
|
66
|
-
# Tripod::SparqlClient::Query.select('DESCRIBE <http://foo>')
|
67
|
-
#
|
68
|
-
# @param [ String ] query The query to run
|
69
|
-
# @param [ String ] accept_header The header to pass to the database.
|
70
|
-
#
|
71
|
-
# @return [ String ] the raw response from the endpoint
|
72
|
-
def self.describe(query, accept_header='application/n-triples')
|
73
|
-
response = self.query(query, nil, {:accept=>accept_header})
|
74
|
-
return response.body
|
75
|
-
end
|
76
|
-
|
77
|
-
# Executes an ASK +query+ against the SPARQL endpoint.
|
78
|
-
# Executes the +query+ and returns text by default
|
79
|
-
#
|
80
|
-
# @example Run a ASK query
|
81
|
-
# Tripod::SparqlClient::Query.select('ASK <http://foo>')
|
82
|
-
#
|
83
|
-
# @param [ String ] query The query to run
|
84
|
-
# @param [ String ] accept_header The format parameter to send to the database. Valud valid formats are text, xml, json
|
85
|
-
#
|
86
|
-
# @return [ String ] the raw response from the endpoint
|
87
|
-
def self.ask(query, format='text')
|
88
|
-
response = self.query(query, format)
|
89
|
-
return response.body
|
56
|
+
def self.select(query)
|
57
|
+
query_response = self.query(query, "application/sparql-results+json")
|
58
|
+
JSON.parse(query_response)["results"]["bindings"]
|
90
59
|
end
|
91
60
|
|
92
|
-
# Executes a CONSTRUCT +query+ against the SPARQL endpoint.
|
93
|
-
# Executes the +query+ and returns ntriples by default
|
94
|
-
#
|
95
|
-
# @example Run a CONSTRUCT query
|
96
|
-
# Tripod::SparqlClient::Query.select('CONSTRUCT <http://foo>')
|
97
|
-
#
|
98
|
-
# @param [ String ] query The query to run
|
99
|
-
# @param [ String ] accept_header The header to pass to the database.
|
100
|
-
#
|
101
|
-
# @return [ String ] the raw response from the endpoint
|
102
|
-
def self.construct(query, accept_header='application/n-triples')
|
103
|
-
response = self.query(query, nil, {:accept=>accept_header})
|
104
|
-
return response.body
|
105
|
-
end
|
106
61
|
end
|
107
62
|
|
108
63
|
module Update
|
data/lib/tripod/version.rb
CHANGED
data/spec/app/models/person.rb
CHANGED
@@ -2,14 +2,14 @@ class Person
|
|
2
2
|
|
3
3
|
include Tripod::Resource
|
4
4
|
|
5
|
-
rdf_type 'http://person'
|
6
|
-
graph_uri 'http://graph'
|
7
|
-
|
8
|
-
field :name, 'http://name'
|
9
|
-
field :father, 'http://father'
|
10
|
-
field :knows, 'http://knows', :multivalued => true
|
11
|
-
field :aliases, 'http://alias', :multivalued => true
|
12
|
-
field :age, 'http://age', :datatype => RDF::XSD.integer
|
13
|
-
field :important_dates, 'http://importantdates', :datatype => RDF::XSD.date, :multivalued => true
|
5
|
+
rdf_type 'http://example.com/person'
|
6
|
+
graph_uri 'http://example.com/graph'
|
7
|
+
|
8
|
+
field :name, 'http://example.com/name'
|
9
|
+
field :father, 'http://example.com/father'
|
10
|
+
field :knows, 'http://example.com/knows', :multivalued => true
|
11
|
+
field :aliases, 'http://exmample.com/alias', :multivalued => true
|
12
|
+
field :age, 'http://example.com/age', :datatype => RDF::XSD.integer
|
13
|
+
field :important_dates, 'http://example.com/importantdates', :datatype => RDF::XSD.date, :multivalued => true
|
14
14
|
|
15
15
|
end
|
@@ -4,13 +4,13 @@ describe Tripod::Attributes do
|
|
4
4
|
describe ".read_attribute" do
|
5
5
|
|
6
6
|
let!(:other_person) do
|
7
|
-
p = Person.new('http://garry')
|
7
|
+
p = Person.new('http://example.com/id/garry')
|
8
8
|
p.save!
|
9
9
|
p
|
10
10
|
end
|
11
11
|
|
12
12
|
let(:person) do
|
13
|
-
p = Person.new('http://barry')
|
13
|
+
p = Person.new('http://example.com/id/barry')
|
14
14
|
p.name = 'Barry'
|
15
15
|
p.father = other_person.uri
|
16
16
|
p
|
@@ -49,13 +49,13 @@ describe Tripod::Attributes do
|
|
49
49
|
end
|
50
50
|
|
51
51
|
context "where field is given and single-valued" do
|
52
|
-
let(:field) { Person.send(:field_for, :hat_type, 'http://hat', {}) }
|
52
|
+
let(:field) { Person.send(:field_for, :hat_type, 'http://example.com/hat', {}) }
|
53
53
|
before do
|
54
|
-
person.stub(:read_predicate).with('http://hat').and_return(['fez'])
|
54
|
+
person.stub(:read_predicate).with('http://example.com/hat').and_return(['fez'])
|
55
55
|
end
|
56
56
|
|
57
57
|
it "should use the predicate name from the given field" do
|
58
|
-
person.should_receive(:read_predicate).with('http://hat').and_return(['fez'])
|
58
|
+
person.should_receive(:read_predicate).with('http://example.com/hat').and_return(['fez'])
|
59
59
|
person.read_attribute(:hat_type, field)
|
60
60
|
end
|
61
61
|
|
@@ -65,9 +65,9 @@ describe Tripod::Attributes do
|
|
65
65
|
end
|
66
66
|
|
67
67
|
context "where field is given and is multi-valued" do
|
68
|
-
let(:field) { Person.send(:field_for, :hat_types, 'http://hat', {multivalued: true}) }
|
68
|
+
let(:field) { Person.send(:field_for, :hat_types, 'http://example.com/hat', {multivalued: true}) }
|
69
69
|
before do
|
70
|
-
person.stub(:read_predicate).with('http://hat').and_return(['fez', 'bowler'])
|
70
|
+
person.stub(:read_predicate).with('http://example.com/hat').and_return(['fez', 'bowler'])
|
71
71
|
end
|
72
72
|
|
73
73
|
it "should return an array of values" do
|
@@ -83,7 +83,7 @@ describe Tripod::Attributes do
|
|
83
83
|
end
|
84
84
|
|
85
85
|
describe ".write_attribute" do
|
86
|
-
let(:person) { Person.new('http://barry') }
|
86
|
+
let(:person) { Person.new('http://example.com/id/barry') }
|
87
87
|
|
88
88
|
it "should write the given attribute" do
|
89
89
|
person[:name] = 'Barry'
|
@@ -92,40 +92,40 @@ describe Tripod::Attributes do
|
|
92
92
|
|
93
93
|
it "should co-erce the value given to the correct datatype" do
|
94
94
|
person[:age] = 34
|
95
|
-
person.read_predicate('http://age').first.datatype.should == RDF::XSD.integer
|
95
|
+
person.read_predicate('http://example.com/age').first.datatype.should == RDF::XSD.integer
|
96
96
|
end
|
97
97
|
|
98
98
|
context "where the attribute is multi-valued" do
|
99
99
|
it "should co-erce all the values to the correct datatype" do
|
100
100
|
person[:important_dates] = [Date.today]
|
101
|
-
person.read_predicate('http://importantdates').first.datatype.should == RDF::XSD.date
|
101
|
+
person.read_predicate('http://example.com/importantdates').first.datatype.should == RDF::XSD.date
|
102
102
|
end
|
103
103
|
end
|
104
104
|
|
105
105
|
context "where field is given" do
|
106
|
-
let(:field) { Person.send(:field_for, :hat_type, 'http://hat', {}) }
|
106
|
+
let(:field) { Person.send(:field_for, :hat_type, 'http://example.com/hat', {}) }
|
107
107
|
|
108
108
|
it "should derive the predicate name from the given field" do
|
109
|
-
person.write_attribute(:hat_type, 'http://bowlerhat', field)
|
110
|
-
person.read_predicate('http://hat').first.to_s.should == 'http://bowlerhat'
|
109
|
+
person.write_attribute(:hat_type, 'http://example.com/bowlerhat', field)
|
110
|
+
person.read_predicate('http://example.com/hat').first.to_s.should == 'http://example.com/bowlerhat'
|
111
111
|
end
|
112
112
|
end
|
113
113
|
|
114
114
|
context "where a field of a particular datatype is given" do
|
115
|
-
let(:field) { Person.send(:field_for, :hat_size, 'http://hatsize', {datatype: RDF::XSD.integer}) }
|
115
|
+
let(:field) { Person.send(:field_for, :hat_size, 'http://example.com/hatsize', {datatype: RDF::XSD.integer}) }
|
116
116
|
|
117
117
|
it "should derive the datatype from the given field" do
|
118
118
|
person.write_attribute(:hat_size, 10, field)
|
119
|
-
person.read_predicate('http://hatsize').first.datatype.should == RDF::XSD.integer
|
119
|
+
person.read_predicate('http://example.com/hatsize').first.datatype.should == RDF::XSD.integer
|
120
120
|
end
|
121
121
|
end
|
122
122
|
|
123
123
|
context "where a multi-valued field of a given datatype is given" do
|
124
|
-
let(:field) { Person.send(:field_for, :hat_heights, 'http://hatheight', {datatype: RDF::XSD.integer, multivalued: true}) }
|
124
|
+
let(:field) { Person.send(:field_for, :hat_heights, 'http://example.com/hatheight', {datatype: RDF::XSD.integer, multivalued: true}) }
|
125
125
|
|
126
126
|
it "should co-erce the values passed" do
|
127
127
|
person.write_attribute(:hat_heights, [5, 10, 15], field)
|
128
|
-
person.read_predicate('http://hatheight').first.datatype.should == RDF::XSD.integer
|
128
|
+
person.read_predicate('http://example.com/hatheight').first.datatype.should == RDF::XSD.integer
|
129
129
|
end
|
130
130
|
end
|
131
131
|
|
@@ -11,14 +11,14 @@ describe Tripod::Criteria do
|
|
11
11
|
end
|
12
12
|
|
13
13
|
let!(:john) do
|
14
|
-
p = Person.new('http://john')
|
14
|
+
p = Person.new('http://example.com/id/john')
|
15
15
|
p.name = "John"
|
16
16
|
p.save!
|
17
17
|
p
|
18
18
|
end
|
19
19
|
|
20
20
|
let!(:barry) do
|
21
|
-
p = Person.new('http://barry')
|
21
|
+
p = Person.new('http://example.com/id/barry')
|
22
22
|
p.name = "Barry"
|
23
23
|
p.save!
|
24
24
|
p
|
@@ -28,22 +28,22 @@ describe Tripod::Criteria do
|
|
28
28
|
|
29
29
|
context "for a class with an rdf_type and graph" do
|
30
30
|
it "should return a SELECT query based with an rdf type restriction" do
|
31
|
-
person_criteria.send(:build_select_query).should == "SELECT DISTINCT ?uri (<http://graph> as ?graph) WHERE { GRAPH <http://graph> { ?uri a <http://person> . ?uri ?p ?o } }"
|
31
|
+
person_criteria.send(:build_select_query).should == "SELECT DISTINCT ?uri (<http://example.com/graph> as ?graph) WHERE { GRAPH <http://example.com/graph> { ?uri a <http://example.com/person> . ?uri ?p ?o } }"
|
32
32
|
end
|
33
33
|
|
34
34
|
context "and extra restrictions" do
|
35
35
|
before { person_criteria.where("[pattern]") }
|
36
36
|
|
37
37
|
it "should return a SELECT query with the extra restriction" do
|
38
|
-
person_criteria.send(:build_select_query).should == "SELECT DISTINCT ?uri (<http://graph> as ?graph) WHERE { GRAPH <http://graph> { ?uri a <http://person> . ?uri ?p ?o . [pattern] } }"
|
38
|
+
person_criteria.send(:build_select_query).should == "SELECT DISTINCT ?uri (<http://example.com/graph> as ?graph) WHERE { GRAPH <http://example.com/graph> { ?uri a <http://example.com/person> . ?uri ?p ?o . [pattern] } }"
|
39
39
|
end
|
40
40
|
end
|
41
41
|
|
42
42
|
context "with an overriden graph" do
|
43
|
-
before { person_criteria.graph("http://anothergraph") }
|
43
|
+
before { person_criteria.graph("http://example.com/anothergraph") }
|
44
44
|
|
45
45
|
it "should override the graph in the query" do
|
46
|
-
person_criteria.send(:build_select_query).should == "SELECT DISTINCT ?uri (<http://anothergraph> as ?graph) WHERE { GRAPH <http://anothergraph> { ?uri a <http://person> . ?uri ?p ?o } }"
|
46
|
+
person_criteria.send(:build_select_query).should == "SELECT DISTINCT ?uri (<http://example.com/anothergraph> as ?graph) WHERE { GRAPH <http://example.com/anothergraph> { ?uri a <http://example.com/person> . ?uri ?p ?o } }"
|
47
47
|
end
|
48
48
|
end
|
49
49
|
end
|
@@ -62,10 +62,10 @@ describe Tripod::Criteria do
|
|
62
62
|
end
|
63
63
|
|
64
64
|
context "with a graph set" do
|
65
|
-
before { resource_criteria.graph("http://graphy") }
|
65
|
+
before { resource_criteria.graph("http://example.com/graphy") }
|
66
66
|
|
67
67
|
it "should override the graph in the query" do
|
68
|
-
resource_criteria.send(:build_select_query).should == "SELECT DISTINCT ?uri (<http://graphy> as ?graph) WHERE { GRAPH <http://graphy> { ?uri ?p ?o } }"
|
68
|
+
resource_criteria.send(:build_select_query).should == "SELECT DISTINCT ?uri (<http://example.com/graphy> as ?graph) WHERE { GRAPH <http://example.com/graphy> { ?uri ?p ?o } }"
|
69
69
|
end
|
70
70
|
end
|
71
71
|
end
|
@@ -92,7 +92,7 @@ describe Tripod::Criteria do
|
|
92
92
|
|
93
93
|
context "with extra restrictions" do
|
94
94
|
|
95
|
-
before { person_criteria.where("?uri <http://name> 'John'") }
|
95
|
+
before { person_criteria.where("?uri <http://example.com/name> 'John'") }
|
96
96
|
|
97
97
|
it "should return a set of hydrated objects for the type and restrictions" do
|
98
98
|
person_criteria.resources.to_a.should == [john]
|
@@ -118,7 +118,7 @@ describe Tripod::Criteria do
|
|
118
118
|
|
119
119
|
it "should return a set of hydrated objects for the criteria" do
|
120
120
|
person_criteria.count.should == 2
|
121
|
-
person_criteria.where("?uri <http://name> 'John'").count.should ==1
|
121
|
+
person_criteria.where("?uri <http://example.com/name> 'John'").count.should ==1
|
122
122
|
end
|
123
123
|
|
124
124
|
it "should call Query.select with the 'count sparql'" do
|
@@ -128,7 +128,7 @@ describe Tripod::Criteria do
|
|
128
128
|
end
|
129
129
|
|
130
130
|
it "should execute the right Sparql" do
|
131
|
-
sparql = "SELECT COUNT(*) { SELECT DISTINCT ?uri (<http://graph> as ?graph) WHERE { GRAPH <http://graph> { ?uri a <http://person> . ?uri ?p ?o } } LIMIT 10 OFFSET 20 }"
|
131
|
+
sparql = "SELECT COUNT(*) { SELECT DISTINCT ?uri (<http://example.com/graph> as ?graph) WHERE { GRAPH <http://example.com/graph> { ?uri a <http://example.com/person> . ?uri ?p ?o } } LIMIT 10 OFFSET 20 }"
|
132
132
|
Tripod::SparqlClient::Query.should_receive(:select).with(sparql).and_call_original
|
133
133
|
Person.all.limit(10).offset(20).count
|
134
134
|
end
|
@@ -137,10 +137,10 @@ describe Tripod::Criteria do
|
|
137
137
|
|
138
138
|
describe "exeuting a chained criteria" do
|
139
139
|
|
140
|
-
let(:chained_criteria) { Person.where("?uri <http://name> ?name").limit(1).offset(0).order("DESC(?name)") }
|
140
|
+
let(:chained_criteria) { Person.where("?uri <http://example.com/name> ?name").limit(1).offset(0).order("DESC(?name)") }
|
141
141
|
|
142
142
|
it "should run the right Sparql" do
|
143
|
-
sparql = "SELECT DISTINCT ?uri (<http://graph> as ?graph) WHERE { GRAPH <http://graph> { ?uri a <http://person> . ?uri <http://name> ?name } } ORDER BY DESC(?name) LIMIT 1 OFFSET 0"
|
143
|
+
sparql = "SELECT DISTINCT ?uri (<http://example.com/graph> as ?graph) WHERE { GRAPH <http://example.com/graph> { ?uri a <http://example.com/person> . ?uri <http://example.com/name> ?name } } ORDER BY DESC(?name) LIMIT 1 OFFSET 0"
|
144
144
|
Tripod::SparqlClient::Query.should_receive(:select).with(sparql).and_call_original
|
145
145
|
chained_criteria.resources
|
146
146
|
end
|
@@ -18,7 +18,7 @@ describe Tripod::Criteria do
|
|
18
18
|
|
19
19
|
context "with rdf_type set on the class" do
|
20
20
|
it "should initialize the where clauses to include a type restriction" do
|
21
|
-
person_criteria.where_clauses.should == ["?uri a <http://person>", "?uri ?p ?o"]
|
21
|
+
person_criteria.where_clauses.should == ["?uri a <http://example.com/person>", "?uri ?p ?o"]
|
22
22
|
end
|
23
23
|
end
|
24
24
|
|
@@ -109,8 +109,8 @@ describe Tripod::Criteria do
|
|
109
109
|
|
110
110
|
describe "#graph" do
|
111
111
|
it "sets the graph_uri for this criteria, as a string" do
|
112
|
-
resource_criteria.graph(RDF::URI("http://foobar"))
|
113
|
-
resource_criteria.graph_uri.should == "http://foobar"
|
112
|
+
resource_criteria.graph(RDF::URI("http://example.com/foobar"))
|
113
|
+
resource_criteria.graph_uri.should == "http://example.com/foobar"
|
114
114
|
end
|
115
115
|
end
|
116
116
|
|
@@ -4,15 +4,15 @@ describe Tripod::EagerLoading do
|
|
4
4
|
|
5
5
|
before do
|
6
6
|
|
7
|
-
@name = Resource.new('http://name', 'http://names')
|
7
|
+
@name = Resource.new('http://example.com/name', 'http://example.com/names')
|
8
8
|
@name.label = "Name"
|
9
9
|
@name.save!
|
10
10
|
|
11
|
-
@peter = Person.new('http://peter')
|
11
|
+
@peter = Person.new('http://example.com/peter')
|
12
12
|
@peter.name = "Peter"
|
13
13
|
@peter.save!
|
14
14
|
|
15
|
-
@john = Person.new('http://john')
|
15
|
+
@john = Person.new('http://example.com/john')
|
16
16
|
@john.name = "john"
|
17
17
|
@john.knows = @peter.uri
|
18
18
|
@john.save!
|
@@ -25,7 +25,7 @@ describe Tripod::EagerLoading do
|
|
25
25
|
end
|
26
26
|
|
27
27
|
it "should add triples to the repository for the predicates" do
|
28
|
-
triples = @peter.repository.query([ RDF::URI.new('http://name'), :predicate, :object] )
|
28
|
+
triples = @peter.repository.query([ RDF::URI.new('http://example.com/name'), :predicate, :object] )
|
29
29
|
triples.to_a.length.should_not == 0
|
30
30
|
triples.first.predicate.should == RDF::RDFS.label
|
31
31
|
triples.first.object.to_s.should == "Name"
|
@@ -43,11 +43,11 @@ describe Tripod::EagerLoading do
|
|
43
43
|
triples = @john.repository.query([ @peter.uri, :predicate, :object] )
|
44
44
|
triples.to_a.length.should_not == 0
|
45
45
|
|
46
|
-
triples.
|
47
|
-
triples.
|
46
|
+
triples.to_a[1].predicate.should == RDF.type
|
47
|
+
triples.to_a[1].object.to_s.should == RDF::URI('http://example.com/person')
|
48
48
|
|
49
|
-
triples.to_a[
|
50
|
-
triples.to_a[
|
49
|
+
triples.to_a[0].predicate.should == RDF::URI('http://example.com/name')
|
50
|
+
triples.to_a[0].object.to_s.should == "Peter"
|
51
51
|
end
|
52
52
|
|
53
53
|
end
|
@@ -66,7 +66,7 @@ describe Tripod::EagerLoading do
|
|
66
66
|
context "and related resource doesn't exist" do
|
67
67
|
|
68
68
|
it "should return nil" do
|
69
|
-
res = @john.get_related_resource(RDF::URI.new('http://nonexistent/person'), Person)
|
69
|
+
res = @john.get_related_resource(RDF::URI.new('http://example.com/nonexistent/person'), Person)
|
70
70
|
res.should be_nil
|
71
71
|
end
|
72
72
|
end
|
@@ -95,16 +95,16 @@ describe Tripod::EagerLoading do
|
|
95
95
|
|
96
96
|
it "should not call find" do
|
97
97
|
Person.should_not_receive(:find)
|
98
|
-
@john.get_related_resource(RDF::URI.new('http://name'), Resource)
|
98
|
+
@john.get_related_resource(RDF::URI.new('http://example.com/name'), Resource)
|
99
99
|
end
|
100
100
|
|
101
101
|
it "should get the right instance of the resource class passed in" do
|
102
|
-
res = @john.get_related_resource(RDF::URI.new('http://name'), Resource)
|
102
|
+
res = @john.get_related_resource(RDF::URI.new('http://example.com/name'), Resource)
|
103
103
|
res.should == @name
|
104
104
|
end
|
105
105
|
|
106
106
|
it "should be possible to call methods on the returned object" do
|
107
|
-
@john.get_related_resource(RDF::URI.new('http://name'), Resource).label.should == @name.label
|
107
|
+
@john.get_related_resource(RDF::URI.new('http://example.com/name'), Resource).label.should == @name.label
|
108
108
|
end
|
109
109
|
end
|
110
110
|
|
data/spec/tripod/fields_spec.rb
CHANGED
data/spec/tripod/finders_spec.rb
CHANGED
@@ -3,14 +3,14 @@ require "spec_helper"
|
|
3
3
|
describe Tripod::Finders do
|
4
4
|
|
5
5
|
let(:ric) do
|
6
|
-
r = Person.new('http://example.com/
|
6
|
+
r = Person.new('http://example.com/id/ric')
|
7
7
|
r.name = "ric"
|
8
|
-
r.knows = RDF::URI.new("http://bill")
|
8
|
+
r.knows = RDF::URI.new("http://example.com/id/bill")
|
9
9
|
r
|
10
10
|
end
|
11
11
|
|
12
12
|
let(:bill) do
|
13
|
-
b = Person.new('http://example.com/
|
13
|
+
b = Person.new('http://example.com/id/bill')
|
14
14
|
b.name = "bill"
|
15
15
|
b
|
16
16
|
end
|
@@ -27,12 +27,12 @@ describe Tripod::Finders do
|
|
27
27
|
|
28
28
|
it 'hydrates and return an object' do
|
29
29
|
person.name.should == "ric"
|
30
|
-
person.knows.should == [RDF::URI('http://bill')]
|
30
|
+
person.knows.should == [RDF::URI('http://example.com/id/bill')]
|
31
31
|
end
|
32
32
|
|
33
33
|
it 'sets the graph on the instantiated object' do
|
34
34
|
person.graph_uri.should_not be_nil
|
35
|
-
person.graph_uri.should == RDF::URI("http://graph")
|
35
|
+
person.graph_uri.should == RDF::URI("http://example.com/graph")
|
36
36
|
end
|
37
37
|
|
38
38
|
it "returns a non-new record" do
|
@@ -43,15 +43,15 @@ describe Tripod::Finders do
|
|
43
43
|
|
44
44
|
context 'when record does not exist' do
|
45
45
|
it 'raises not found' do
|
46
|
-
lambda { Person.find('http://nonexistent') }.should raise_error(Tripod::Errors::ResourceNotFound)
|
46
|
+
lambda { Person.find('http://example.com/nonexistent') }.should raise_error(Tripod::Errors::ResourceNotFound)
|
47
47
|
end
|
48
48
|
end
|
49
49
|
|
50
50
|
context 'with graph_uri supplied' do
|
51
51
|
it 'should use that graph to call new' do
|
52
52
|
ric # trigger the lazy load
|
53
|
-
Person.should_receive(:new).with(ric.uri, 'http://graphx').and_call_original
|
54
|
-
Person.find(ric.uri, "http://graphx")
|
53
|
+
Person.should_receive(:new).with(ric.uri, 'http://example.com/graphx').and_call_original
|
54
|
+
Person.find(ric.uri, "http://example.com/graphx")
|
55
55
|
end
|
56
56
|
end
|
57
57
|
|
@@ -135,7 +135,7 @@ describe Tripod::Finders do
|
|
135
135
|
res.last.should == bill
|
136
136
|
|
137
137
|
res.first.name.should == "ric"
|
138
|
-
res.first.knows.should == [RDF::URI.new("http://bill")]
|
138
|
+
res.first.knows.should == [RDF::URI.new("http://example.com/id/bill")]
|
139
139
|
end
|
140
140
|
|
141
141
|
it 'uses the uri and graph variables if supplied' do
|
@@ -3,28 +3,28 @@ require "spec_helper"
|
|
3
3
|
describe Tripod::Persistence do
|
4
4
|
|
5
5
|
let(:unsaved_person) do
|
6
|
-
@unsaved_uri = @uri = 'http://uri'
|
7
|
-
@graph_uri = 'http://graph'
|
6
|
+
@unsaved_uri = @uri = 'http://example.com/uri'
|
7
|
+
@graph_uri = 'http://example.com/graph'
|
8
8
|
@graph1 = RDF::Graph.new(@graph_uri)
|
9
9
|
stmt = RDF::Statement.new
|
10
10
|
stmt.subject = RDF::URI.new(@uri)
|
11
|
-
stmt.predicate = RDF::URI.new('http://pred')
|
12
|
-
stmt.object = RDF::URI.new('http://obj')
|
11
|
+
stmt.predicate = RDF::URI.new('http://example.com/pred')
|
12
|
+
stmt.object = RDF::URI.new('http://example.com/obj')
|
13
13
|
@graph1 << stmt
|
14
|
-
p = Person.new(@uri, 'http://graph')
|
14
|
+
p = Person.new(@uri, 'http://example.com/graph')
|
15
15
|
p.hydrate!(:graph => @graph1)
|
16
16
|
p
|
17
17
|
end
|
18
18
|
|
19
19
|
let(:saved_person) do
|
20
|
-
@saved_uri = @uri2 = 'http://uri2'
|
20
|
+
@saved_uri = @uri2 = 'http://example.com/uri2'
|
21
21
|
@graph2 = RDF::Graph.new
|
22
22
|
stmt = RDF::Statement.new
|
23
23
|
stmt.subject = RDF::URI.new(@uri2)
|
24
|
-
stmt.predicate = RDF::URI.new('http://pred2')
|
25
|
-
stmt.object = RDF::URI.new('http://obj2')
|
24
|
+
stmt.predicate = RDF::URI.new('http://example.com/pred2')
|
25
|
+
stmt.object = RDF::URI.new('http://example.com/obj2')
|
26
26
|
@graph2 << stmt
|
27
|
-
p = Person.new(@uri2, 'http://graph')
|
27
|
+
p = Person.new(@uri2, 'http://example.com/graph')
|
28
28
|
p.hydrate!(:graph => @graph2)
|
29
29
|
p.save
|
30
30
|
p
|
@@ -35,7 +35,7 @@ describe Tripod::Persistence do
|
|
35
35
|
|
36
36
|
context "with no graph_uri set" do
|
37
37
|
it 'should raise a GraphUriNotSet error' do
|
38
|
-
p = Resource.new('http://arbitrary/resource')
|
38
|
+
p = Resource.new('http://example.com/arbitrary/resource')
|
39
39
|
lambda { p.save }.should raise_error(Tripod::Errors::GraphUriNotSet)
|
40
40
|
end
|
41
41
|
end
|
@@ -49,8 +49,8 @@ describe Tripod::Persistence do
|
|
49
49
|
repo_statements = p2.repository.statements
|
50
50
|
repo_statements.count.should == 1
|
51
51
|
repo_statements.first.subject.should == RDF::URI.new(@uri)
|
52
|
-
repo_statements.first.predicate.should == RDF::URI.new('http://pred')
|
53
|
-
repo_statements.first.object.should == RDF::URI.new('http://obj')
|
52
|
+
repo_statements.first.predicate.should == RDF::URI.new('http://example.com/pred')
|
53
|
+
repo_statements.first.object.should == RDF::URI.new('http://example.com/obj')
|
54
54
|
end
|
55
55
|
|
56
56
|
|
@@ -86,7 +86,7 @@ describe Tripod::Persistence do
|
|
86
86
|
end
|
87
87
|
|
88
88
|
describe '.update_attribute' do
|
89
|
-
let (:person) { Person.new('http://newperson') }
|
89
|
+
let (:person) { Person.new('http://example.com/newperson') }
|
90
90
|
before { person.stub(:save) }
|
91
91
|
|
92
92
|
it 'should write the attribute' do
|
@@ -101,7 +101,7 @@ describe Tripod::Persistence do
|
|
101
101
|
end
|
102
102
|
|
103
103
|
describe '.update_attributes' do
|
104
|
-
let (:person) { Person.new('http://newperson') }
|
104
|
+
let (:person) { Person.new('http://example.com/newperson') }
|
105
105
|
before { person.stub(:save) }
|
106
106
|
|
107
107
|
it 'should assign the attributes' do
|
@@ -122,18 +122,18 @@ describe Tripod::Persistence do
|
|
122
122
|
transaction = Tripod::Persistence::Transaction.new
|
123
123
|
|
124
124
|
unsaved_person.save(transaction: transaction)
|
125
|
-
saved_person.write_predicate('http://pred2', 'blah')
|
125
|
+
saved_person.write_predicate('http://example.com/pred2', 'blah')
|
126
126
|
saved_person.save(transaction: transaction)
|
127
127
|
|
128
128
|
# nothing should have changed yet.
|
129
129
|
lambda {Person.find(unsaved_person.uri)}.should raise_error(Tripod::Errors::ResourceNotFound)
|
130
|
-
Person.find(saved_person.uri).read_predicate('http://pred2').first.to_s.should == RDF::URI.new('http://obj2').to_s
|
130
|
+
Person.find(saved_person.uri).read_predicate('http://example.com/pred2').first.to_s.should == RDF::URI.new('http://example.com/obj2').to_s
|
131
131
|
|
132
132
|
transaction.commit
|
133
133
|
|
134
134
|
# things should have changed now.
|
135
135
|
lambda {Person.find(unsaved_person.uri)}.should_not raise_error()
|
136
|
-
Person.find(saved_person.uri).read_predicate('http://pred2').first.should == 'blah'
|
136
|
+
Person.find(saved_person.uri).read_predicate('http://example.com/pred2').first.should == 'blah'
|
137
137
|
|
138
138
|
end
|
139
139
|
|
@@ -143,7 +143,7 @@ describe Tripod::Persistence do
|
|
143
143
|
unsaved_person.stub(:graph_uri).and_return(nil) # force a failure
|
144
144
|
unsaved_person.save(transaction: transaction).should be_false
|
145
145
|
|
146
|
-
saved_person.write_predicate('http://pred2', 'blah')
|
146
|
+
saved_person.write_predicate('http://example.com/pred2', 'blah')
|
147
147
|
saved_person.save(transaction: transaction).should be_true
|
148
148
|
|
149
149
|
transaction.commit
|
@@ -155,7 +155,7 @@ describe Tripod::Persistence do
|
|
155
155
|
lambda {Person.find(unsaved_person.uri)}.should raise_error(Tripod::Errors::ResourceNotFound)
|
156
156
|
|
157
157
|
# saved person SHOULD be updated
|
158
|
-
Person.find(saved_person.uri).read_predicate('http://pred2').first.should == 'blah'
|
158
|
+
Person.find(saved_person.uri).read_predicate('http://example.com/pred2').first.should == 'blah'
|
159
159
|
end
|
160
160
|
|
161
161
|
it "can be aborted" do
|
@@ -3,30 +3,30 @@ require "spec_helper"
|
|
3
3
|
describe Tripod::Predicates do
|
4
4
|
|
5
5
|
before do
|
6
|
-
@uri = 'http://ric'
|
7
|
-
@graph = RDF::Graph.new('http://graph')
|
6
|
+
@uri = 'http://example.com/ric'
|
7
|
+
@graph = RDF::Graph.new('http://example.com/graph')
|
8
8
|
|
9
9
|
stmt = RDF::Statement.new
|
10
10
|
stmt.subject = RDF::URI.new(@uri)
|
11
|
-
stmt.predicate = RDF::URI.new('http://blog')
|
12
|
-
stmt.object = RDF::URI.new('http://blog1')
|
11
|
+
stmt.predicate = RDF::URI.new('http://example.com/blog')
|
12
|
+
stmt.object = RDF::URI.new('http://example.com/blog1')
|
13
13
|
@graph << stmt
|
14
14
|
|
15
15
|
stmt2 = RDF::Statement.new
|
16
16
|
stmt2.subject = RDF::URI.new(@uri)
|
17
|
-
stmt2.predicate = RDF::URI.new('http://blog')
|
18
|
-
stmt2.object = RDF::URI.new('http://blog2')
|
17
|
+
stmt2.predicate = RDF::URI.new('http://example.com/blog')
|
18
|
+
stmt2.object = RDF::URI.new('http://example.com/blog2')
|
19
19
|
@graph << stmt2
|
20
20
|
|
21
21
|
stmt3 = RDF::Statement.new
|
22
22
|
stmt3.subject = RDF::URI.new(@uri)
|
23
|
-
stmt3.predicate = RDF::URI.new('http://name')
|
23
|
+
stmt3.predicate = RDF::URI.new('http://example.com/name')
|
24
24
|
stmt3.object = "ric"
|
25
25
|
@graph << stmt3
|
26
26
|
|
27
27
|
# throw a random other statement (about name) in the mix!
|
28
28
|
stmt4 = RDF::Statement.new
|
29
|
-
stmt4.subject = RDF::URI.new('http://name')
|
29
|
+
stmt4.subject = RDF::URI.new('http://example.com/name')
|
30
30
|
stmt4.predicate = RDF::RDFS.label
|
31
31
|
stmt4.object = "name"
|
32
32
|
@graph << stmt4
|
@@ -40,10 +40,10 @@ describe Tripod::Predicates do
|
|
40
40
|
|
41
41
|
describe "#read_predicate" do
|
42
42
|
it 'returns the values where the predicate matches' do
|
43
|
-
values = person.read_predicate('http://blog')
|
43
|
+
values = person.read_predicate('http://example.com/blog')
|
44
44
|
values.length.should == 2
|
45
|
-
values.first.should == RDF::URI('http://blog1')
|
46
|
-
values[1].should == RDF::URI('http://blog2')
|
45
|
+
values.first.should == RDF::URI('http://example.com/blog1')
|
46
|
+
values[1].should == RDF::URI('http://example.com/blog2')
|
47
47
|
end
|
48
48
|
end
|
49
49
|
|
@@ -51,15 +51,15 @@ describe Tripod::Predicates do
|
|
51
51
|
|
52
52
|
context 'single term passed' do
|
53
53
|
it 'replaces the values where the predicate matches' do
|
54
|
-
person.write_predicate('http://name', 'richard')
|
55
|
-
person.read_predicate('http://name').should == [RDF::Literal.new('richard')]
|
54
|
+
person.write_predicate('http://example.com/name', 'richard')
|
55
|
+
person.read_predicate('http://example.com/name').should == [RDF::Literal.new('richard')]
|
56
56
|
end
|
57
57
|
end
|
58
58
|
|
59
59
|
context 'multiple terms passed' do
|
60
60
|
it 'replaces the values where the predicate matches' do
|
61
|
-
person.write_predicate('http://name', ['richard', 'ric', 'ricardo'])
|
62
|
-
person.read_predicate('http://name').should == [RDF::Literal.new('richard'), RDF::Literal.new('ric'), RDF::Literal.new('ricardo')]
|
61
|
+
person.write_predicate('http://example.com/name', ['richard', 'ric', 'ricardo'])
|
62
|
+
person.read_predicate('http://example.com/name').should == [RDF::Literal.new('richard'), RDF::Literal.new('ric'), RDF::Literal.new('ricardo')]
|
63
63
|
end
|
64
64
|
end
|
65
65
|
|
@@ -67,22 +67,22 @@ describe Tripod::Predicates do
|
|
67
67
|
|
68
68
|
describe '#remove_predicate' do
|
69
69
|
it 'remnoves the values where the predicate matches' do
|
70
|
-
person.remove_predicate('http://blog')
|
71
|
-
person.read_predicate('http://blog').should be_empty
|
70
|
+
person.remove_predicate('http://example.com/blog')
|
71
|
+
person.read_predicate('http://example.com/blog').should be_empty
|
72
72
|
end
|
73
73
|
end
|
74
74
|
|
75
75
|
describe "#append_to_predicate" do
|
76
76
|
it 'appends values to the existing values for the predicate' do
|
77
|
-
person.append_to_predicate('http://name', 'rico')
|
78
|
-
person.read_predicate('http://name').should == [RDF::Literal.new('ric'), RDF::Literal.new('rico')]
|
77
|
+
person.append_to_predicate('http://example.com/name', 'rico')
|
78
|
+
person.read_predicate('http://example.com/name').should == [RDF::Literal.new('ric'), RDF::Literal.new('rico')]
|
79
79
|
end
|
80
80
|
end
|
81
81
|
|
82
82
|
describe "#predicates" do
|
83
83
|
it "returns a list of unique RDF::URIs for the predicates set on this resource" do
|
84
84
|
person.predicates.length.should == 2
|
85
|
-
person.predicates.should == [RDF::URI('http://blog'), RDF::URI('http://name')]
|
85
|
+
person.predicates.should == [RDF::URI('http://example.com/blog'), RDF::URI('http://example.com/name')]
|
86
86
|
end
|
87
87
|
|
88
88
|
|
@@ -7,14 +7,14 @@ describe Tripod::Repository do
|
|
7
7
|
context 'uri set' do
|
8
8
|
|
9
9
|
before do
|
10
|
-
@uri = 'http://foobar'
|
11
|
-
@uri2 = 'http://bazbar'
|
12
|
-
@graph_uri = 'http://graph'
|
10
|
+
@uri = 'http://example.com/foobar'
|
11
|
+
@uri2 = 'http://example.com/bazbar'
|
12
|
+
@graph_uri = 'http://example.com/graph'
|
13
13
|
|
14
14
|
p1 = Person.new(@uri, @graph_uri)
|
15
|
-
p1.write_predicate('http://pred', RDF::URI.new('http://obj'))
|
16
|
-
p1.write_predicate('http://pred2', RDF::URI.new('http://obj2'))
|
17
|
-
p1.write_predicate('http://pred3', 'literal')
|
15
|
+
p1.write_predicate('http://example.com/pred', RDF::URI.new('http://example.com/obj'))
|
16
|
+
p1.write_predicate('http://example.com/pred2', RDF::URI.new('http://example.com/obj2'))
|
17
|
+
p1.write_predicate('http://example.com/pred3', 'literal')
|
18
18
|
p1.save!
|
19
19
|
end
|
20
20
|
|
@@ -27,7 +27,7 @@ describe Tripod::Repository do
|
|
27
27
|
context 'no predicate restrictions passed' do
|
28
28
|
|
29
29
|
it 'populates the repository with a graph of triples from the db' do
|
30
|
-
Tripod::SparqlClient::Query.should_receive(:
|
30
|
+
Tripod::SparqlClient::Query.should_receive(:query).with("DESCRIBE <#{@uri}>", "application/n-triples").and_call_original
|
31
31
|
person.hydrate!
|
32
32
|
person.repository.should_not be_empty
|
33
33
|
end
|
@@ -43,7 +43,7 @@ describe Tripod::Repository do
|
|
43
43
|
@graph << s
|
44
44
|
end
|
45
45
|
|
46
|
-
@graph << RDF::Statement.new( 'http://anotherresource', 'http://pred', 'http://obj')
|
46
|
+
@graph << RDF::Statement.new( 'http://example.com/anotherresource', 'http://example.com/pred', 'http://example.com/obj')
|
47
47
|
@graph.statements.count.should ==2 # there'll already be a statement about type in the person.
|
48
48
|
|
49
49
|
person.hydrate!(:graph => @graph)
|
@@ -10,20 +10,20 @@ describe Tripod::Resource do
|
|
10
10
|
|
11
11
|
context 'with a URI' do
|
12
12
|
let(:person) do
|
13
|
-
Person.new('http://foobar')
|
13
|
+
Person.new('http://example.com/foobar')
|
14
14
|
end
|
15
15
|
|
16
16
|
it 'sets the uri instance variable' do
|
17
|
-
person.uri.should == RDF::URI.new('http://foobar')
|
17
|
+
person.uri.should == RDF::URI.new('http://example.com/foobar')
|
18
18
|
end
|
19
19
|
|
20
20
|
it 'sets the graph_uri instance variable from the class by default' do
|
21
|
-
person.graph_uri.should == RDF::URI.new('http://graph')
|
21
|
+
person.graph_uri.should == RDF::URI.new('http://example.com/graph')
|
22
22
|
end
|
23
23
|
|
24
24
|
context "with rdf_type specified at class level" do
|
25
25
|
it "sets the rdf type from the class" do
|
26
|
-
person.rdf_type.should == ['http://person']
|
26
|
+
person.rdf_type.should == ['http://example.com/person']
|
27
27
|
end
|
28
28
|
end
|
29
29
|
|
@@ -34,11 +34,11 @@ describe Tripod::Resource do
|
|
34
34
|
|
35
35
|
context 'with a URI and a graph URI' do
|
36
36
|
let(:person) do
|
37
|
-
Person.new('http://foobar', 'http://foobar/graph')
|
37
|
+
Person.new('http://example.com/foobar', 'http://example.com/foobar/graph')
|
38
38
|
end
|
39
39
|
|
40
40
|
it "overrides the default graph URI with what's given" do
|
41
|
-
person.graph_uri.should == RDF::URI.new('http://foobar/graph')
|
41
|
+
person.graph_uri.should == RDF::URI.new('http://example.com/foobar/graph')
|
42
42
|
end
|
43
43
|
end
|
44
44
|
end
|
@@ -4,11 +4,11 @@ describe Tripod::Serialization do
|
|
4
4
|
|
5
5
|
let(:person) do
|
6
6
|
|
7
|
-
p2 = Person.new('http://fred')
|
7
|
+
p2 = Person.new('http://example.com/fred')
|
8
8
|
p2.name = "fred"
|
9
9
|
p2.save!
|
10
10
|
|
11
|
-
p = Person.new('http://garry')
|
11
|
+
p = Person.new('http://example.com/garry')
|
12
12
|
p.name = 'Garry'
|
13
13
|
p.age = 30
|
14
14
|
p.knows = p2.uri
|
@@ -6,28 +6,28 @@ describe Tripod::SparqlClient do
|
|
6
6
|
|
7
7
|
describe "Data#append" do
|
8
8
|
it "should add the graph uri to the configured data endpoint" do
|
9
|
-
RestClient::Request.should_receive(:execute).with(hash_including(url: 'http://127.0.0.1:3030/tripod-test/data?graph=http://foo'))
|
10
|
-
Tripod::SparqlClient::Data.append('http://foo', data)
|
9
|
+
RestClient::Request.should_receive(:execute).with(hash_including(url: 'http://127.0.0.1:3030/tripod-test/data?graph=http://example.com/foo'))
|
10
|
+
Tripod::SparqlClient::Data.append('http://example.com/foo', data)
|
11
11
|
end
|
12
12
|
|
13
13
|
it "should send the data as the payload" do
|
14
14
|
RestClient::Request.should_receive(:execute).with(hash_including(payload: data))
|
15
|
-
Tripod::SparqlClient::Data.append('http://foo', data)
|
15
|
+
Tripod::SparqlClient::Data.append('http://example.com/foo', data)
|
16
16
|
end
|
17
17
|
|
18
18
|
it "should HTTP POST the data" do
|
19
19
|
RestClient::Request.should_receive(:execute).with(hash_including(method: :post))
|
20
|
-
Tripod::SparqlClient::Data.append('http://foo', data)
|
20
|
+
Tripod::SparqlClient::Data.append('http://example.com/foo', data)
|
21
21
|
end
|
22
22
|
|
23
23
|
context "which fails with a 400 error" do
|
24
24
|
before do
|
25
25
|
WebMock.enable!
|
26
|
-
stub_http_request(:post, 'http://127.0.0.1:3030/tripod-test/data?graph=http://foo').to_return(body: 'Error 400: Trousers missing', status: 400)
|
26
|
+
stub_http_request(:post, 'http://127.0.0.1:3030/tripod-test/data?graph=http://example.com/foo').to_return(body: 'Error 400: Trousers missing', status: 400)
|
27
27
|
end
|
28
28
|
|
29
29
|
it "should raise a 'parse failed' exception" do
|
30
|
-
lambda { Tripod::SparqlClient::Data.append('http://foo', data) }.should raise_error(Tripod::Errors::BadDataRequest)
|
30
|
+
lambda { Tripod::SparqlClient::Data.append('http://example.com/foo', data) }.should raise_error(Tripod::Errors::BadDataRequest)
|
31
31
|
end
|
32
32
|
|
33
33
|
after do
|
@@ -39,7 +39,7 @@ describe Tripod::SparqlClient do
|
|
39
39
|
describe "Data#replace" do
|
40
40
|
it "should HTTP PUT the data" do
|
41
41
|
RestClient::Request.should_receive(:execute).with(hash_including(method: :put))
|
42
|
-
Tripod::SparqlClient::Data.replace('http://foo', data)
|
42
|
+
Tripod::SparqlClient::Data.replace('http://example.com/foo', data)
|
43
43
|
end
|
44
44
|
end
|
45
45
|
end
|
data/spec/tripod/state_spec.rb
CHANGED
@@ -7,7 +7,7 @@ describe Tripod::State do
|
|
7
7
|
context "when calling new on the resource" do
|
8
8
|
|
9
9
|
let(:person) do
|
10
|
-
Person.new('http://uri', 'http://graph')
|
10
|
+
Person.new('http://example.com/uri', 'http://example.com/graph')
|
11
11
|
end
|
12
12
|
|
13
13
|
it "returns true" do
|
@@ -18,7 +18,7 @@ describe Tripod::State do
|
|
18
18
|
context "when the object has been saved" do
|
19
19
|
|
20
20
|
let(:person) do
|
21
|
-
p = Person.new('http://uri', 'http://graph')
|
21
|
+
p = Person.new('http://example.com/uri', 'http://example.com/graph')
|
22
22
|
p.save
|
23
23
|
p
|
24
24
|
end
|
@@ -32,7 +32,7 @@ describe Tripod::State do
|
|
32
32
|
describe "#persisted?" do
|
33
33
|
|
34
34
|
let(:person) do
|
35
|
-
Person.new('http://uri', 'http://graph')
|
35
|
+
Person.new('http://example.com/uri', 'http://example.com/graph')
|
36
36
|
end
|
37
37
|
|
38
38
|
it "delegates to new_record?" do
|
@@ -54,7 +54,7 @@ describe Tripod::State do
|
|
54
54
|
describe "destroyed?" do
|
55
55
|
|
56
56
|
let(:person) do
|
57
|
-
Person.new('http://uri', 'http://graph')
|
57
|
+
Person.new('http://example.com/uri', 'http://example.com/graph')
|
58
58
|
end
|
59
59
|
|
60
60
|
context "when destroyed is true" do
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: tripod
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.4.0
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -15,7 +15,7 @@ date: 2013-03-13 00:00:00.000000000 Z
|
|
15
15
|
dependencies:
|
16
16
|
- !ruby/object:Gem::Dependency
|
17
17
|
name: rest-client
|
18
|
-
requirement: &
|
18
|
+
requirement: &70364886263520 !ruby/object:Gem::Requirement
|
19
19
|
none: false
|
20
20
|
requirements:
|
21
21
|
- - ! '>='
|
@@ -23,10 +23,10 @@ dependencies:
|
|
23
23
|
version: '0'
|
24
24
|
type: :runtime
|
25
25
|
prerelease: false
|
26
|
-
version_requirements: *
|
26
|
+
version_requirements: *70364886263520
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: activemodel
|
29
|
-
requirement: &
|
29
|
+
requirement: &70364886262400 !ruby/object:Gem::Requirement
|
30
30
|
none: false
|
31
31
|
requirements:
|
32
32
|
- - ~>
|
@@ -34,10 +34,10 @@ dependencies:
|
|
34
34
|
version: '3.1'
|
35
35
|
type: :runtime
|
36
36
|
prerelease: false
|
37
|
-
version_requirements: *
|
37
|
+
version_requirements: *70364886262400
|
38
38
|
- !ruby/object:Gem::Dependency
|
39
39
|
name: equivalent-xml
|
40
|
-
requirement: &
|
40
|
+
requirement: &70364886261680 !ruby/object:Gem::Requirement
|
41
41
|
none: false
|
42
42
|
requirements:
|
43
43
|
- - ! '>='
|
@@ -45,10 +45,10 @@ dependencies:
|
|
45
45
|
version: '0'
|
46
46
|
type: :runtime
|
47
47
|
prerelease: false
|
48
|
-
version_requirements: *
|
48
|
+
version_requirements: *70364886261680
|
49
49
|
- !ruby/object:Gem::Dependency
|
50
50
|
name: rdf
|
51
|
-
requirement: &
|
51
|
+
requirement: &70364886260440 !ruby/object:Gem::Requirement
|
52
52
|
none: false
|
53
53
|
requirements:
|
54
54
|
- - ~>
|
@@ -56,10 +56,10 @@ dependencies:
|
|
56
56
|
version: '1.0'
|
57
57
|
type: :runtime
|
58
58
|
prerelease: false
|
59
|
-
version_requirements: *
|
59
|
+
version_requirements: *70364886260440
|
60
60
|
- !ruby/object:Gem::Dependency
|
61
61
|
name: rdf-rdfxml
|
62
|
-
requirement: &
|
62
|
+
requirement: &70364886259940 !ruby/object:Gem::Requirement
|
63
63
|
none: false
|
64
64
|
requirements:
|
65
65
|
- - ! '>='
|
@@ -67,10 +67,10 @@ dependencies:
|
|
67
67
|
version: '0'
|
68
68
|
type: :runtime
|
69
69
|
prerelease: false
|
70
|
-
version_requirements: *
|
70
|
+
version_requirements: *70364886259940
|
71
71
|
- !ruby/object:Gem::Dependency
|
72
72
|
name: rdf-n3
|
73
|
-
requirement: &
|
73
|
+
requirement: &70364886258140 !ruby/object:Gem::Requirement
|
74
74
|
none: false
|
75
75
|
requirements:
|
76
76
|
- - ! '>='
|
@@ -78,10 +78,10 @@ dependencies:
|
|
78
78
|
version: '0'
|
79
79
|
type: :runtime
|
80
80
|
prerelease: false
|
81
|
-
version_requirements: *
|
81
|
+
version_requirements: *70364886258140
|
82
82
|
- !ruby/object:Gem::Dependency
|
83
83
|
name: rdf-json
|
84
|
-
requirement: &
|
84
|
+
requirement: &70364886255600 !ruby/object:Gem::Requirement
|
85
85
|
none: false
|
86
86
|
requirements:
|
87
87
|
- - ! '>='
|
@@ -89,10 +89,10 @@ dependencies:
|
|
89
89
|
version: '0'
|
90
90
|
type: :runtime
|
91
91
|
prerelease: false
|
92
|
-
version_requirements: *
|
92
|
+
version_requirements: *70364886255600
|
93
93
|
- !ruby/object:Gem::Dependency
|
94
94
|
name: json-ld
|
95
|
-
requirement: &
|
95
|
+
requirement: &70364886254440 !ruby/object:Gem::Requirement
|
96
96
|
none: false
|
97
97
|
requirements:
|
98
98
|
- - ! '>='
|
@@ -100,10 +100,10 @@ dependencies:
|
|
100
100
|
version: '0'
|
101
101
|
type: :runtime
|
102
102
|
prerelease: false
|
103
|
-
version_requirements: *
|
103
|
+
version_requirements: *70364886254440
|
104
104
|
- !ruby/object:Gem::Dependency
|
105
105
|
name: guid
|
106
|
-
requirement: &
|
106
|
+
requirement: &70364886240960 !ruby/object:Gem::Requirement
|
107
107
|
none: false
|
108
108
|
requirements:
|
109
109
|
- - ! '>='
|
@@ -111,10 +111,10 @@ dependencies:
|
|
111
111
|
version: '0'
|
112
112
|
type: :runtime
|
113
113
|
prerelease: false
|
114
|
-
version_requirements: *
|
114
|
+
version_requirements: *70364886240960
|
115
115
|
- !ruby/object:Gem::Dependency
|
116
116
|
name: dalli
|
117
|
-
requirement: &
|
117
|
+
requirement: &70364886240040 !ruby/object:Gem::Requirement
|
118
118
|
none: false
|
119
119
|
requirements:
|
120
120
|
- - ~>
|
@@ -122,7 +122,7 @@ dependencies:
|
|
122
122
|
version: '2.6'
|
123
123
|
type: :runtime
|
124
124
|
prerelease: false
|
125
|
-
version_requirements: *
|
125
|
+
version_requirements: *70364886240040
|
126
126
|
description: RDF ruby ORM
|
127
127
|
email:
|
128
128
|
- ric@swirrl.com
|