tripod 0.10.12 → 0.11.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.
- checksums.yaml +4 -4
- data/lib/tripod/criteria.rb +4 -1
- data/lib/tripod/criteria/execution.rb +7 -2
- data/lib/tripod/finders.rb +14 -6
- data/lib/tripod/graphs.rb +6 -1
- data/lib/tripod/sparql_client.rb +5 -1
- data/lib/tripod/version.rb +1 -1
- data/spec/spec_helper.rb +9 -6
- data/spec/tripod/criteria_execution_spec.rb +9 -9
- data/spec/tripod/criteria_spec.rb +6 -6
- data/spec/tripod/finders_spec.rb +2 -2
- data/spec/tripod/links_spec.rb +1 -2
- metadata +2 -2
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA1:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 531f10bb018c574b829130163c072bf92da17bb5
|
|
4
|
+
data.tar.gz: 8d975d11b7b3a4e0d860910871e760b5bc6266ec
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: f25fe33e76090c1002bacf050eab8e47cd3b223d3547e21f8d60b1204464987623926e32a8b890a083aabcae5418844a83f057fe72640573df94f6cb5fb98a78
|
|
7
|
+
data.tar.gz: 5ef2a69e11203c68ce7f0a3b0b9406377614eed24f9e20b3c6a4320c5d009d511bfd33b3891f755b8f47ef1e53192d10fb5f79cd26eac8b12c40516569c0b3cb
|
data/lib/tripod/criteria.rb
CHANGED
|
@@ -42,7 +42,7 @@ module Tripod
|
|
|
42
42
|
# e.g. my_criteria.where("?uri a <http://my-type>")
|
|
43
43
|
#
|
|
44
44
|
def where(filter)
|
|
45
|
-
if filter.is_a?(String) # we
|
|
45
|
+
if filter.is_a?(String) # we got a Sparql snippet
|
|
46
46
|
where_clauses << filter
|
|
47
47
|
elsif filter.is_a?(Hash)
|
|
48
48
|
filter.each_pair do |key, value|
|
|
@@ -54,6 +54,9 @@ module Tripod
|
|
|
54
54
|
self
|
|
55
55
|
end
|
|
56
56
|
|
|
57
|
+
def query_where_clauses
|
|
58
|
+
where_clauses.empty? ? ['?uri ?p ?o'] : where_clauses
|
|
59
|
+
end
|
|
57
60
|
# takes a string and adds an extra clause to this criteria.
|
|
58
61
|
# e.g. my_criteria.extras("LIMIT 10 OFFSET 20").extrass
|
|
59
62
|
#
|
|
@@ -44,7 +44,12 @@ module Tripod
|
|
|
44
44
|
sq = Tripod::SparqlQuery.new(self.as_query(opts))
|
|
45
45
|
count_sparql = sq.as_count_query_str
|
|
46
46
|
result = Tripod::SparqlClient::Query.select(count_sparql)
|
|
47
|
-
|
|
47
|
+
|
|
48
|
+
if result.length > 0
|
|
49
|
+
result[0]["tripod_count_var"]["value"].to_i
|
|
50
|
+
else
|
|
51
|
+
return 0
|
|
52
|
+
end
|
|
48
53
|
end
|
|
49
54
|
|
|
50
55
|
# turn this criteria into a query
|
|
@@ -70,7 +75,7 @@ module Tripod
|
|
|
70
75
|
select_query += "GRAPH <#{graph_uri}> { " if graph_uri
|
|
71
76
|
end
|
|
72
77
|
|
|
73
|
-
select_query += self.
|
|
78
|
+
select_query += self.query_where_clauses.join(" . ")
|
|
74
79
|
select_query += " } "
|
|
75
80
|
select_query += "} " if return_graph || graph_uri # close the graph clause
|
|
76
81
|
select_query += self.extra_clauses.join(" ")
|
data/lib/tripod/finders.rb
CHANGED
|
@@ -41,7 +41,7 @@ module Tripod::Finders
|
|
|
41
41
|
graph_uri ||= self.get_graph_uri
|
|
42
42
|
unless graph_uri
|
|
43
43
|
# do a quick select to see what graph to use.
|
|
44
|
-
select_query = "SELECT
|
|
44
|
+
select_query = "SELECT * WHERE { GRAPH ?g {<#{uri.to_s}> ?p ?o } } LIMIT 1"
|
|
45
45
|
result = Tripod::SparqlClient::Query.select(select_query)
|
|
46
46
|
if result.length > 0
|
|
47
47
|
graph_uri = result[0]["g"]["value"]
|
|
@@ -90,7 +90,7 @@ module Tripod::Finders
|
|
|
90
90
|
# execute a query to return all objects (restricted by this class's rdf_type if specified)
|
|
91
91
|
# returns a criteria object
|
|
92
92
|
def all
|
|
93
|
-
|
|
93
|
+
Tripod::Criteria.new(self)
|
|
94
94
|
end
|
|
95
95
|
|
|
96
96
|
def count
|
|
@@ -161,9 +161,15 @@ 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
|
-
|
|
166
|
-
|
|
164
|
+
|
|
165
|
+
#there are no resources if there are no uris and graphs
|
|
166
|
+
if uris_and_graphs.empty?
|
|
167
|
+
[]
|
|
168
|
+
else
|
|
169
|
+
construct_query = _construct_query_for_uris_and_graphs(uris_and_graphs)
|
|
170
|
+
graph = _graph_of_triples_from_construct_or_describe(construct_query)
|
|
171
|
+
_resources_from_graph(graph, uris_and_graphs)
|
|
172
|
+
end
|
|
167
173
|
end
|
|
168
174
|
|
|
169
175
|
# For a select query, generate a query which DESCRIBES all the results
|
|
@@ -250,10 +256,12 @@ module Tripod::Finders
|
|
|
250
256
|
# @option options [ String ] graph_variable The name of the uri variable in thh query, if not 'graph'
|
|
251
257
|
def _select_uris_and_graphs(sparql, opts={})
|
|
252
258
|
select_results = Tripod::SparqlClient::Query.select(sparql)
|
|
253
|
-
|
|
259
|
+
|
|
254
260
|
uri_variable = opts[:uri_variable] || 'uri'
|
|
255
261
|
graph_variable = opts[:graph_variable] || 'graph'
|
|
256
262
|
|
|
263
|
+
return [] unless select_results.select{|r| r.keys.length > 0 }.any?
|
|
264
|
+
|
|
257
265
|
select_results.reduce([]) do |memo, result|
|
|
258
266
|
u = result[uri_variable]['value']
|
|
259
267
|
g = result[graph_variable]['value'] if result[graph_variable]
|
data/lib/tripod/graphs.rb
CHANGED
|
@@ -7,6 +7,11 @@ module Tripod::Graphs
|
|
|
7
7
|
def graphs
|
|
8
8
|
select_query = "SELECT DISTINCT ?g WHERE { GRAPH ?g {<#{uri.to_s}> ?p ?o } }"
|
|
9
9
|
result = Tripod::SparqlClient::Query.select(select_query)
|
|
10
|
-
|
|
10
|
+
|
|
11
|
+
if result.length > 0
|
|
12
|
+
result.select{|r| r.keys.length > 0 }.map{|r| r["g"]["value"] }
|
|
13
|
+
else
|
|
14
|
+
[]
|
|
15
|
+
end
|
|
11
16
|
end
|
|
12
17
|
end
|
data/lib/tripod/sparql_client.rb
CHANGED
|
@@ -69,7 +69,11 @@ module Tripod::SparqlClient
|
|
|
69
69
|
# @return [ Hash, String ]
|
|
70
70
|
def self.select(query)
|
|
71
71
|
query_response = self.query(query, "application/sparql-results+json")
|
|
72
|
-
|
|
72
|
+
if query_response.length >0
|
|
73
|
+
JSON.parse(query_response)["results"]["bindings"]
|
|
74
|
+
else
|
|
75
|
+
[]
|
|
76
|
+
end
|
|
73
77
|
end
|
|
74
78
|
|
|
75
79
|
def self._response_limit_options(response_limit_bytes)
|
data/lib/tripod/version.rb
CHANGED
data/spec/spec_helper.rb
CHANGED
|
@@ -16,12 +16,15 @@ RSpec.configure do |config|
|
|
|
16
16
|
config.before(:each) do
|
|
17
17
|
WebMock.disable!
|
|
18
18
|
# delete from all graphs.
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
19
|
+
# delete from default graph:
|
|
20
|
+
# Tripod::SparqlClient::Update.update('
|
|
21
|
+
# DELETE {?s ?p ?o} WHERE {?s ?p ?o}')
|
|
22
|
+
# # delete from named graphs:
|
|
23
|
+
# Tripod::SparqlClient::Update.update('
|
|
24
|
+
# DELETE {graph ?g {?s ?p ?o}} WHERE {graph ?g {?s ?p ?o}};
|
|
25
|
+
# ')
|
|
26
|
+
Tripod::SparqlClient::Update.update('drop default')
|
|
27
|
+
Tripod::SparqlClient::Update.update('drop all')
|
|
25
28
|
end
|
|
26
29
|
|
|
27
30
|
end
|
|
@@ -28,12 +28,12 @@ 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.as_query.should == "SELECT DISTINCT ?uri (<http://example.com/graph> as ?graph) WHERE { GRAPH <http://example.com/graph> { ?uri a <http://example.com/person>
|
|
31
|
+
person_criteria.as_query.should == "SELECT DISTINCT ?uri (<http://example.com/graph> as ?graph) WHERE { GRAPH <http://example.com/graph> { ?uri a <http://example.com/person> } }"
|
|
32
32
|
end
|
|
33
33
|
|
|
34
34
|
context "with include_graph option set to false" do
|
|
35
35
|
it "should not select graphs, but restrict to graph" do
|
|
36
|
-
person_criteria.as_query(:return_graph => false).should == "SELECT DISTINCT ?uri WHERE { GRAPH <http://example.com/graph> { ?uri a <http://example.com/person>
|
|
36
|
+
person_criteria.as_query(:return_graph => false).should == "SELECT DISTINCT ?uri WHERE { GRAPH <http://example.com/graph> { ?uri a <http://example.com/person> } }"
|
|
37
37
|
end
|
|
38
38
|
end
|
|
39
39
|
|
|
@@ -41,7 +41,7 @@ describe Tripod::Criteria do
|
|
|
41
41
|
before { person_criteria.where("[pattern]") }
|
|
42
42
|
|
|
43
43
|
it "should return a SELECT query with the extra restriction" do
|
|
44
|
-
person_criteria.as_query.should == "SELECT DISTINCT ?uri (<http://example.com/graph> as ?graph) WHERE { GRAPH <http://example.com/graph> { ?uri a <http://example.com/person> .
|
|
44
|
+
person_criteria.as_query.should == "SELECT DISTINCT ?uri (<http://example.com/graph> as ?graph) WHERE { GRAPH <http://example.com/graph> { ?uri a <http://example.com/person> . [pattern] } }"
|
|
45
45
|
end
|
|
46
46
|
end
|
|
47
47
|
|
|
@@ -49,7 +49,7 @@ describe Tripod::Criteria do
|
|
|
49
49
|
before { person_criteria.graph("http://example.com/anothergraph") }
|
|
50
50
|
|
|
51
51
|
it "should override the graph in the query" do
|
|
52
|
-
person_criteria.as_query.should == "SELECT DISTINCT ?uri (<http://example.com/anothergraph> as ?graph) WHERE { GRAPH <http://example.com/anothergraph> { ?uri a <http://example.com/person>
|
|
52
|
+
person_criteria.as_query.should == "SELECT DISTINCT ?uri (<http://example.com/anothergraph> as ?graph) WHERE { GRAPH <http://example.com/anothergraph> { ?uri a <http://example.com/person> } }"
|
|
53
53
|
end
|
|
54
54
|
end
|
|
55
55
|
end
|
|
@@ -66,10 +66,10 @@ describe Tripod::Criteria do
|
|
|
66
66
|
end
|
|
67
67
|
|
|
68
68
|
context "and extra restrictions" do
|
|
69
|
-
before { resource_criteria.where("
|
|
69
|
+
before { resource_criteria.where("?uri a <http://type>") }
|
|
70
70
|
|
|
71
71
|
it "should return a SELECT query with the extra restrictions" do
|
|
72
|
-
resource_criteria.as_query.should == "SELECT DISTINCT ?uri ?graph WHERE { GRAPH ?graph { ?uri
|
|
72
|
+
resource_criteria.as_query.should == "SELECT DISTINCT ?uri ?graph WHERE { GRAPH ?graph { ?uri a <http://type> } }"
|
|
73
73
|
end
|
|
74
74
|
end
|
|
75
75
|
|
|
@@ -84,10 +84,10 @@ describe Tripod::Criteria do
|
|
|
84
84
|
|
|
85
85
|
context "with extras" do
|
|
86
86
|
|
|
87
|
-
before { resource_criteria.where("
|
|
87
|
+
before { resource_criteria.where("?uri a <http://type>").extras("LIMIT 10").extras("OFFSET 20") }
|
|
88
88
|
|
|
89
89
|
it "should add the extras on the end" do
|
|
90
|
-
resource_criteria.as_query.should == "SELECT DISTINCT ?uri ?graph WHERE { GRAPH ?graph { ?uri
|
|
90
|
+
resource_criteria.as_query.should == "SELECT DISTINCT ?uri ?graph WHERE { GRAPH ?graph { ?uri a <http://type> } } LIMIT 10 OFFSET 20"
|
|
91
91
|
end
|
|
92
92
|
end
|
|
93
93
|
end
|
|
@@ -191,7 +191,7 @@ describe Tripod::Criteria do
|
|
|
191
191
|
|
|
192
192
|
it "should execute the right Sparql" do
|
|
193
193
|
sparql = "SELECT (COUNT(*) as ?tripod_count_var) {
|
|
194
|
-
SELECT DISTINCT ?uri (<http://example.com/graph> as ?graph) WHERE { GRAPH <http://example.com/graph> { ?uri a <http://example.com/person>
|
|
194
|
+
SELECT DISTINCT ?uri (<http://example.com/graph> as ?graph) WHERE { GRAPH <http://example.com/graph> { ?uri a <http://example.com/person> } } LIMIT 10 OFFSET 20
|
|
195
195
|
}"
|
|
196
196
|
Tripod::SparqlClient::Query.should_receive(:select).with(sparql).and_call_original
|
|
197
197
|
Person.all.limit(10).offset(20).count
|
|
@@ -18,13 +18,13 @@ 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://example.com/person>"
|
|
21
|
+
person_criteria.where_clauses.should == ["?uri a <http://example.com/person>"]
|
|
22
22
|
end
|
|
23
23
|
end
|
|
24
24
|
|
|
25
25
|
context "with no rdf_type set on the class" do
|
|
26
26
|
it "should initialize the where clauses to ?uri ?p ?o" do
|
|
27
|
-
resource_criteria.where_clauses.should == [
|
|
27
|
+
resource_criteria.where_clauses.should == []
|
|
28
28
|
end
|
|
29
29
|
end
|
|
30
30
|
end
|
|
@@ -34,7 +34,7 @@ describe Tripod::Criteria do
|
|
|
34
34
|
context 'given a string' do
|
|
35
35
|
it "should add the sparql snippet to the where clauses" do
|
|
36
36
|
resource_criteria.where("blah")
|
|
37
|
-
resource_criteria.where_clauses.should == ["
|
|
37
|
+
resource_criteria.where_clauses.should == ["blah"]
|
|
38
38
|
end
|
|
39
39
|
|
|
40
40
|
it "should return an instance of Criteria" do
|
|
@@ -42,7 +42,7 @@ describe Tripod::Criteria do
|
|
|
42
42
|
end
|
|
43
43
|
|
|
44
44
|
it "should return an instance of Criteria with the where clauses added" do
|
|
45
|
-
resource_criteria.where("blah").where_clauses.should == ["
|
|
45
|
+
resource_criteria.where("blah").where_clauses.should == ["blah"]
|
|
46
46
|
end
|
|
47
47
|
end
|
|
48
48
|
|
|
@@ -52,7 +52,7 @@ describe Tripod::Criteria do
|
|
|
52
52
|
|
|
53
53
|
it 'should construct a sparql snippet with the appropriate predicate, treating the value as a literal' do
|
|
54
54
|
criteria = resource_criteria.where(label: value)
|
|
55
|
-
criteria.where_clauses[
|
|
55
|
+
criteria.where_clauses[0].should == "?uri <#{ RDF::RDFS.label }> \"#{ value }\""
|
|
56
56
|
end
|
|
57
57
|
end
|
|
58
58
|
|
|
@@ -61,7 +61,7 @@ describe Tripod::Criteria do
|
|
|
61
61
|
|
|
62
62
|
it 'should construct a sparql snippet with the appropriate predicate' do
|
|
63
63
|
criteria = resource_criteria.where(label: value)
|
|
64
|
-
criteria.where_clauses[
|
|
64
|
+
criteria.where_clauses[0].should == "?uri <#{ RDF::RDFS.label }> <#{ value.to_s }>"
|
|
65
65
|
end
|
|
66
66
|
end
|
|
67
67
|
end
|
data/spec/tripod/finders_spec.rb
CHANGED
|
@@ -146,8 +146,8 @@ describe Tripod::Finders do
|
|
|
146
146
|
end
|
|
147
147
|
|
|
148
148
|
describe ".all" do
|
|
149
|
-
it "should make and return a new criteria for the current class
|
|
150
|
-
Person.all.should == Tripod::Criteria.new(Person)
|
|
149
|
+
it "should make and return a new criteria for the current class" do
|
|
150
|
+
Person.all.should == Tripod::Criteria.new(Person)
|
|
151
151
|
end
|
|
152
152
|
end
|
|
153
153
|
|
data/spec/tripod/links_spec.rb
CHANGED
|
@@ -106,8 +106,7 @@ describe Tripod::Links do
|
|
|
106
106
|
|
|
107
107
|
rover.friends.length.should == 2
|
|
108
108
|
|
|
109
|
-
rover.friends.
|
|
110
|
-
rover.friends.to_a.last.uri.should == spot.uri
|
|
109
|
+
rover.friends.map {|f| f.uri}.should =~ [fido.uri, spot.uri]
|
|
111
110
|
end
|
|
112
111
|
|
|
113
112
|
it "creates field getters and setters with the _uris suffix" 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.11.0
|
|
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-
|
|
13
|
+
date: 2015-06-03 00:00:00.000000000 Z
|
|
14
14
|
dependencies:
|
|
15
15
|
- !ruby/object:Gem::Dependency
|
|
16
16
|
name: rest-client
|