tripod 0.5.0 → 0.5.1
Sign up to get free protection for your applications and to get access to all the features.
- data/lib/tripod/sparql_client.rb +23 -25
- data/lib/tripod/streaming.rb +5 -0
- data/lib/tripod/version.rb +1 -1
- data/spec/tripod/sparql_client_spec.rb +25 -1
- metadata +21 -21
data/lib/tripod/sparql_client.rb
CHANGED
@@ -16,35 +16,33 @@ module Tripod::SparqlClient
|
|
16
16
|
# @return [ RestClient::Response ]
|
17
17
|
def self.query(sparql, accept_header, extra_params={})
|
18
18
|
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
end
|
19
|
+
params = {:query => sparql}.merge(extra_params)
|
20
|
+
request_url = Tripod.query_endpoint + '?' + params.to_query
|
21
|
+
streaming_opts = {:accept => accept_header, :timeout_seconds => Tripod.timeout_seconds}
|
22
|
+
streaming_opts.merge!(:response_limit_bytes => Tripod.response_limit_bytes) if Tripod.response_limit_bytes
|
24
23
|
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
stream_data = -> {
|
32
|
-
Tripod::Streaming.get_data(request_url, streaming_opts)
|
33
|
-
}
|
34
|
-
|
35
|
-
if Tripod.cache_store # if a cache store is configured
|
36
|
-
# SHA-2 the key to keep the it within the small limit for many cache stores (e.g. Memcached is 250bytes)
|
37
|
-
# Note: SHA2's are pretty certain to be unique http://en.wikipedia.org/wiki/SHA-2.
|
38
|
-
key = 'SPARQL-QUERY-' + Digest::SHA2.hexdigest([extra_params, accept_header, sparql].join(" "))
|
39
|
-
Tripod.cache_store.fetch(key, &stream_data)
|
40
|
-
else
|
41
|
-
stream_data.call()
|
24
|
+
# Hash.to_query from active support core extensions
|
25
|
+
stream_data = -> {
|
26
|
+
if defined?(Rails)
|
27
|
+
Rails.logger.debug "TRIPOD: About to run query: #{sparql}"
|
28
|
+
Rails.logger.debug "TRIPOD: Straming fron url: #{request_url}"
|
29
|
+
Rails.logger.debug "TRIPOD: Streaming opts: #{streaming_opts.inspect}"
|
42
30
|
end
|
43
31
|
|
44
|
-
|
45
|
-
|
46
|
-
|
32
|
+
response = Tripod::Streaming.get_data(request_url, streaming_opts)
|
33
|
+
Rails.logger.debug "TRIPOD: response: #{response}" if defined?(Rails)
|
34
|
+
response
|
35
|
+
}
|
36
|
+
|
37
|
+
if Tripod.cache_store # if a cache store is configured
|
38
|
+
# SHA-2 the key to keep the it within the small limit for many cache stores (e.g. Memcached is 250bytes)
|
39
|
+
# Note: SHA2's are pretty certain to be unique http://en.wikipedia.org/wiki/SHA-2.
|
40
|
+
key = 'SPARQL-QUERY-' + Digest::SHA2.hexdigest([extra_params, accept_header, sparql].join(" "))
|
41
|
+
Tripod.cache_store.fetch(key, &stream_data)
|
42
|
+
else
|
43
|
+
stream_data.call()
|
47
44
|
end
|
45
|
+
|
48
46
|
end
|
49
47
|
|
50
48
|
# Runs a SELECT +query+ against the endpoint. Returns a Hash of the results.
|
data/lib/tripod/streaming.rb
CHANGED
@@ -23,6 +23,11 @@ module Tripod
|
|
23
23
|
response_string = ""
|
24
24
|
|
25
25
|
http.request_get(uri.request_uri, 'Accept' => accept) do |res|
|
26
|
+
|
27
|
+
Rails.logger.debug "TRIPOD: response code: #{res.code}" if defined?(Rails)
|
28
|
+
|
29
|
+
raise Tripod::Errors::BadSparqlRequest.new(res.body) if res.code.to_s != "200"
|
30
|
+
|
26
31
|
res.read_body do |seg|
|
27
32
|
total_bytes += seg.size
|
28
33
|
response_string += seg.to_s
|
data/lib/tripod/version.rb
CHANGED
@@ -2,11 +2,23 @@ require "spec_helper"
|
|
2
2
|
|
3
3
|
describe Tripod::SparqlClient do
|
4
4
|
describe Data do
|
5
|
+
|
5
6
|
let(:data) { 'some-data-goes-here' }
|
6
7
|
|
7
8
|
describe "Query#query" do
|
9
|
+
|
10
|
+
let(:query) { "SELECT * WHERE {?s ?p ?o}" }
|
11
|
+
let(:bad_query) { "SELECT * WHERE ?s ?p ?o}" }
|
12
|
+
|
13
|
+
before do
|
14
|
+
p = Person.new('http://example.com/id/garry')
|
15
|
+
p.name = "garry"
|
16
|
+
p.save!
|
17
|
+
p
|
18
|
+
end
|
19
|
+
|
8
20
|
it "should use Tripod::Streaming to get the data" do
|
9
|
-
|
21
|
+
|
10
22
|
Tripod::Streaming.should_receive(:get_data).with(
|
11
23
|
Tripod.query_endpoint + "?query=#{CGI.escape(query)}",
|
12
24
|
{
|
@@ -17,6 +29,18 @@ describe Tripod::SparqlClient do
|
|
17
29
|
).and_return("some data")
|
18
30
|
Tripod::SparqlClient::Query.query(query, "application/sparql-results+json")
|
19
31
|
end
|
32
|
+
|
33
|
+
it "should execute the query and return the format requested" do
|
34
|
+
JSON.parse(Tripod::SparqlClient::Query.query(query, "application/sparql-results+json"))["results"]["bindings"].length > 0
|
35
|
+
end
|
36
|
+
|
37
|
+
context "with a bad query" do
|
38
|
+
it "should raise a bad request error" do
|
39
|
+
lambda {
|
40
|
+
Tripod::SparqlClient::Query.query(bad_query, "application/sparql-results+json")
|
41
|
+
}.should raise_error
|
42
|
+
end
|
43
|
+
end
|
20
44
|
end
|
21
45
|
|
22
46
|
describe "Data#append" 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.5.
|
4
|
+
version: 0.5.1
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -15,7 +15,7 @@ date: 2013-03-26 00:00:00.000000000 Z
|
|
15
15
|
dependencies:
|
16
16
|
- !ruby/object:Gem::Dependency
|
17
17
|
name: rest-client
|
18
|
-
requirement: &
|
18
|
+
requirement: &70266811885900 !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: *70266811885900
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: activemodel
|
29
|
-
requirement: &
|
29
|
+
requirement: &70266811901040 !ruby/object:Gem::Requirement
|
30
30
|
none: false
|
31
31
|
requirements:
|
32
32
|
- - ~>
|
@@ -34,10 +34,10 @@ dependencies:
|
|
34
34
|
version: '3.2'
|
35
35
|
type: :runtime
|
36
36
|
prerelease: false
|
37
|
-
version_requirements: *
|
37
|
+
version_requirements: *70266811901040
|
38
38
|
- !ruby/object:Gem::Dependency
|
39
39
|
name: equivalent-xml
|
40
|
-
requirement: &
|
40
|
+
requirement: &70266811900040 !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: *70266811900040
|
49
49
|
- !ruby/object:Gem::Dependency
|
50
50
|
name: rdf
|
51
|
-
requirement: &
|
51
|
+
requirement: &70266811898540 !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: *70266811898540
|
60
60
|
- !ruby/object:Gem::Dependency
|
61
61
|
name: rdf-rdfxml
|
62
|
-
requirement: &
|
62
|
+
requirement: &70266811898000 !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: *70266811898000
|
71
71
|
- !ruby/object:Gem::Dependency
|
72
72
|
name: rdf-n3
|
73
|
-
requirement: &
|
73
|
+
requirement: &70266811897200 !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: *70266811897200
|
82
82
|
- !ruby/object:Gem::Dependency
|
83
83
|
name: rdf-json
|
84
|
-
requirement: &
|
84
|
+
requirement: &70266811895920 !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: *70266811895920
|
93
93
|
- !ruby/object:Gem::Dependency
|
94
94
|
name: json-ld
|
95
|
-
requirement: &
|
95
|
+
requirement: &70266811894100 !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: *70266811894100
|
104
104
|
- !ruby/object:Gem::Dependency
|
105
105
|
name: guid
|
106
|
-
requirement: &
|
106
|
+
requirement: &70266811908240 !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: *70266811908240
|
115
115
|
- !ruby/object:Gem::Dependency
|
116
116
|
name: dalli
|
117
|
-
requirement: &
|
117
|
+
requirement: &70266811906460 !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: *70266811906460
|
126
126
|
description: RDF ruby ORM
|
127
127
|
email:
|
128
128
|
- ric@swirrl.com
|