tripod 0.10.10 → 0.10.11
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/tripod/finders.rb +21 -12
- data/lib/tripod/sparql_client.rb +3 -4
- data/lib/tripod/version.rb +1 -1
- data/spec/tripod/finders_spec.rb +57 -19
- data/spec/tripod/sparql_client_spec.rb +25 -0
- metadata +4 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: ba073a508bbb8401fee9818d86cab1d1d97dd506
|
4
|
+
data.tar.gz: 89d5cab48aa1e06f603bddd46ccc2d98b8fc592e
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 7ff8a8d538b37f697433d2c1edebec5d80cfd092976b395812de0277bc8abb526d65df706dd8dcc1f68bf0d6c481c57327b290acd2e09b162bbde40ab53a0644
|
7
|
+
data.tar.gz: 5decb3639f621abcfecd3e82380ba710b9941937748b2ce39290f22795f941a3958fa9a53facf91c0635be2363bc1bb77bd7aa64fb711bd38de02553ae2e4693
|
data/lib/tripod/finders.rb
CHANGED
@@ -161,8 +161,8 @@ module Tripod::Finders
|
|
161
161
|
def _create_and_hydrate_resources_from_sparql(select_sparql, opts={})
|
162
162
|
# TODO: Optimization?: if return_graph option is false, then don't do this next line?
|
163
163
|
uris_and_graphs = _select_uris_and_graphs(select_sparql, :uri_variable => opts[:uri_variable], :graph_variable => opts[:graph_variable])
|
164
|
-
|
165
|
-
graph =
|
164
|
+
construct_query = _construct_query_for_uris_and_graphs(uris_and_graphs)
|
165
|
+
graph = _graph_of_triples_from_construct_or_describe(construct_query)
|
166
166
|
_resources_from_graph(graph, uris_and_graphs)
|
167
167
|
end
|
168
168
|
|
@@ -186,6 +186,16 @@ module Tripod::Finders
|
|
186
186
|
"
|
187
187
|
end
|
188
188
|
|
189
|
+
# Generate a CONSTRUCT query for the given uri and graph pairs.
|
190
|
+
def _construct_query_for_uris_and_graphs(uris_and_graphs)
|
191
|
+
value_pairs = uris_and_graphs.map do |(uri, graph)|
|
192
|
+
u = RDF::URI.new(uri).to_base
|
193
|
+
g = graph ? RDF::URI.new(graph).to_base : 'UNDEF'
|
194
|
+
"(#{u} #{g})"
|
195
|
+
end
|
196
|
+
query = "CONSTRUCT { ?uri ?p ?o . #{ self.all_triples_construct("?uri") }} WHERE { GRAPH ?g { ?uri ?p ?o . #{ self.all_triples_where("?uri") } VALUES (?uri ?g) { #{ value_pairs.join(' ') } } } }"
|
197
|
+
end
|
198
|
+
|
189
199
|
# For a select query, get a raw serialisation of the DESCRIPTION of the resources from the database.
|
190
200
|
#
|
191
201
|
# @option options [ String ] uri_variable The name of the uri variable in the query, if not 'uri'
|
@@ -207,7 +217,7 @@ module Tripod::Finders
|
|
207
217
|
# uris from the graph, and just not create the resoruces with a graph
|
208
218
|
# (but they won't be persistable).
|
209
219
|
|
210
|
-
uris_and_graphs.
|
220
|
+
uris_and_graphs.each do |(u,g)|
|
211
221
|
|
212
222
|
# instantiate a new resource
|
213
223
|
g ||= {}
|
@@ -232,7 +242,7 @@ module Tripod::Finders
|
|
232
242
|
resources
|
233
243
|
end
|
234
244
|
|
235
|
-
# based on the query passed in, build
|
245
|
+
# based on the query passed in, build an array of [uri, graph] pairs
|
236
246
|
# @param [ String] sparql. The sparql query
|
237
247
|
# @param [ Hash ] opts. A hash of options.
|
238
248
|
#
|
@@ -241,16 +251,15 @@ module Tripod::Finders
|
|
241
251
|
def _select_uris_and_graphs(sparql, opts={})
|
242
252
|
select_results = Tripod::SparqlClient::Query.select(sparql)
|
243
253
|
|
244
|
-
|
254
|
+
uri_variable = opts[:uri_variable] || 'uri'
|
255
|
+
graph_variable = opts[:graph_variable] || 'graph'
|
245
256
|
|
246
|
-
select_results.
|
247
|
-
|
248
|
-
|
249
|
-
|
250
|
-
|
257
|
+
select_results.reduce([]) do |memo, result|
|
258
|
+
u = result[uri_variable]['value']
|
259
|
+
g = result[graph_variable]['value'] if result[graph_variable]
|
260
|
+
memo << [u, g]
|
261
|
+
memo
|
251
262
|
end
|
252
|
-
|
253
|
-
uris_and_graphs
|
254
263
|
end
|
255
264
|
|
256
265
|
end
|
data/lib/tripod/sparql_client.rb
CHANGED
@@ -46,7 +46,7 @@ module Tripod::SparqlClient
|
|
46
46
|
end
|
47
47
|
|
48
48
|
# Tripod helper to turn a hash to a query string, allowing multiple params in arrays
|
49
|
-
# e.g. :query=>'foo', :graph=>['bar', 'baz']
|
49
|
+
# e.g. :query=>'foo', :graph=>['bar', 'baz']
|
50
50
|
# -> query=foo&graph=bar&graph=baz
|
51
51
|
# based on the ActiveSupport implementation, but with different behaviour for arrays
|
52
52
|
def self.to_query hash
|
@@ -93,13 +93,12 @@ module Tripod::SparqlClient
|
|
93
93
|
#
|
94
94
|
# @return [ true ]
|
95
95
|
def self.update(sparql)
|
96
|
-
|
97
96
|
begin
|
98
97
|
RestClient::Request.execute(
|
99
98
|
:method => :post,
|
100
99
|
:url => Tripod.update_endpoint,
|
101
100
|
:timeout => Tripod.timeout_seconds,
|
102
|
-
:payload => sparql,
|
101
|
+
:payload => { update: sparql }.merge(Tripod.extra_endpoint_params),
|
103
102
|
:headers => {
|
104
103
|
:content_type => 'application/sparql-update'
|
105
104
|
}
|
@@ -113,4 +112,4 @@ module Tripod::SparqlClient
|
|
113
112
|
|
114
113
|
end
|
115
114
|
|
116
|
-
end
|
115
|
+
end
|
data/lib/tripod/version.rb
CHANGED
data/spec/tripod/finders_spec.rb
CHANGED
@@ -15,6 +15,13 @@ describe Tripod::Finders do
|
|
15
15
|
b
|
16
16
|
end
|
17
17
|
|
18
|
+
let!(:john) do
|
19
|
+
j = Person.new('http://example.com/id/john', 'http://example.com/another_graph')
|
20
|
+
j.name = "john"
|
21
|
+
j
|
22
|
+
end
|
23
|
+
|
24
|
+
|
18
25
|
describe '.find' do
|
19
26
|
|
20
27
|
before do
|
@@ -196,34 +203,65 @@ describe Tripod::Finders do
|
|
196
203
|
|
197
204
|
describe '.find_by_sparql' do
|
198
205
|
|
199
|
-
before
|
200
|
-
|
201
|
-
|
202
|
-
|
206
|
+
before { [bill, ric, john].each(&:save!) }
|
207
|
+
|
208
|
+
context 'given a simple SELECT query, returning uri and graph' do
|
209
|
+
let(:query) { 'SELECT DISTINCT ?uri ?graph WHERE { GRAPH ?graph { ?uri ?p ?o } }' }
|
210
|
+
|
211
|
+
it 'returns an array of matching resources' do
|
212
|
+
res = Person.find_by_sparql(query)
|
213
|
+
res.should =~ [bill, ric, john]
|
214
|
+
end
|
203
215
|
end
|
204
216
|
|
205
|
-
|
206
|
-
|
207
|
-
res.length.should == 2
|
208
|
-
res.should include bill
|
209
|
-
res.should include ric
|
217
|
+
context 'given a simple SELECT query, returning uri only' do
|
218
|
+
let(:query) { 'SELECT DISTINCT ?uri WHERE { ?uri ?p ?o }' }
|
210
219
|
|
211
|
-
|
212
|
-
|
213
|
-
|
220
|
+
it 'returns an array of matching resources' do
|
221
|
+
res = Person.find_by_sparql(query)
|
222
|
+
res.should =~ [bill, ric, john]
|
223
|
+
end
|
214
224
|
end
|
215
225
|
|
216
|
-
|
217
|
-
|
218
|
-
|
226
|
+
context 'given a SELECT query and named uri and graph variables' do
|
227
|
+
let(:query) { 'SELECT DISTINCT ?x ?y WHERE { GRAPH ?y { ?x ?p ?o } }' }
|
228
|
+
let(:opts) { {:uri_variable => 'x', :graph_variable => 'y'} }
|
229
|
+
|
230
|
+
it 'returns an array of matching resources' do
|
231
|
+
res = Person.find_by_sparql(query, opts)
|
232
|
+
res.should =~ [bill, ric, john]
|
233
|
+
end
|
219
234
|
end
|
220
235
|
|
221
|
-
|
222
|
-
|
223
|
-
|
236
|
+
context 'given a SELECT query containing a graph restriction' do
|
237
|
+
let(:query) { 'SELECT DISTINCT ?uri ?graph WHERE { GRAPH <http://example.com/graph> { ?uri ?p ?o } }' }
|
238
|
+
|
239
|
+
it 'only returns matching resources' do
|
240
|
+
res = Person.find_by_sparql(query)
|
241
|
+
res.should =~ [bill, ric]
|
242
|
+
end
|
224
243
|
end
|
225
244
|
|
226
|
-
|
245
|
+
context 'given a SELECT query containing multiple graph restrictions' do
|
246
|
+
let(:query) { 'SELECT DISTINCT ?uri ?graph WHERE {
|
247
|
+
{ GRAPH <http://example.com/graph> { ?uri ?p ?o } }
|
248
|
+
UNION
|
249
|
+
{ GRAPH <http://example.com/another_graph> { ?uri ?p ?o } }
|
250
|
+
}' }
|
251
|
+
|
252
|
+
it "should return matching resources" do
|
253
|
+
res = Person.find_by_sparql(query)
|
254
|
+
res.should =~ [bill, ric, john]
|
255
|
+
end
|
256
|
+
end
|
227
257
|
|
258
|
+
context 'given a SELECT query which returns no resources' do
|
259
|
+
let(:query) { 'SELECT ?uri WHERE { ?uri ?p ?o . <http://example.com/minotaur> ?p ?o . }' }
|
228
260
|
|
261
|
+
it 'returns an empty array' do
|
262
|
+
res = Person.find_by_sparql(query)
|
263
|
+
res.empty?.should == true
|
264
|
+
end
|
265
|
+
end
|
266
|
+
end
|
229
267
|
end
|
@@ -0,0 +1,25 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
module Tripod::SparqlClient
|
4
|
+
describe Update do
|
5
|
+
describe '.update' do
|
6
|
+
context 'given a valid SPARQL query' do
|
7
|
+
let(:uri) { RDF::URI.new("http://example.com/me") }
|
8
|
+
let(:query) { "INSERT DATA { GRAPH <http://example.com/graph/foo> { #{uri.to_base} <http://example.com/hello> \"world\" . } }" }
|
9
|
+
|
10
|
+
it 'should return true' do
|
11
|
+
Update.update(query).should == true
|
12
|
+
end
|
13
|
+
|
14
|
+
it 'should execute the update' do
|
15
|
+
Update.update(query)
|
16
|
+
Resource.find(uri).should_not be_nil
|
17
|
+
end
|
18
|
+
|
19
|
+
context 'and some additional endpoint params' do
|
20
|
+
it 'should include the additional params in the query payload'
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
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.10.
|
4
|
+
version: 0.10.11
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Ric Roberts
|
@@ -10,7 +10,7 @@ authors:
|
|
10
10
|
autorequire:
|
11
11
|
bindir: bin
|
12
12
|
cert_chain: []
|
13
|
-
date: 2015-02-
|
13
|
+
date: 2015-02-23 00:00:00.000000000 Z
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: rest-client
|
@@ -276,6 +276,7 @@ files:
|
|
276
276
|
- spec/tripod/repository_spec.rb
|
277
277
|
- spec/tripod/resource_spec.rb
|
278
278
|
- spec/tripod/serialization_spec.rb
|
279
|
+
- spec/tripod/sparql_client_spec.rb
|
279
280
|
- spec/tripod/sparql_query_spec.rb
|
280
281
|
- spec/tripod/state_spec.rb
|
281
282
|
- spec/tripod/streaming_spec.rb
|
@@ -327,6 +328,7 @@ test_files:
|
|
327
328
|
- spec/tripod/repository_spec.rb
|
328
329
|
- spec/tripod/resource_spec.rb
|
329
330
|
- spec/tripod/serialization_spec.rb
|
331
|
+
- spec/tripod/sparql_client_spec.rb
|
330
332
|
- spec/tripod/sparql_query_spec.rb
|
331
333
|
- spec/tripod/state_spec.rb
|
332
334
|
- spec/tripod/streaming_spec.rb
|